Sqoop是一款开源的工具,主要用于在Hadoop相关存储(HDFS、Hive、HBase)与传统关系数据库(MySql、Oracle等)间进行数据传递工作。Sqoop最早是作为Hadoop的一个第三方模块存在,后来被独立成为了一个Apache项目。除了关系数据库外,对于某些NoSQL数据库,Sqoop也提供了连接器。

一、Sqoop基础知识

  Sqoop项目开始于2009年,可以在Hadoop相关存储与传统关系数据库之间进行数据导入导出工作。Sqoop会开启多个MapReduce任务来并行进行数据导入导出工作,提高工作效率。

图1.1 Sqoop简介

二、Sqoop安装

  本实例安装版本:sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz

1、将安装文件上传到/usr/local/目录下并解压,然后重命名为sqoop。

2、配置环境变量,执行命令:vi /etc/profile,增加export $SQOOP_HOME=/usr/local/bin,并在export PATH中增加$PIG_HOME/bin,然后执行命令:source /etc/profile使配置文件立即生效。

3、将需要连接的数据库驱动文件拷贝至lib目录下,此实例连接mysql数据库,驱动文件为:mysql-connector-java-5.1.34.jar。注意,hadoop2貌似需要5.1.30以后的mysql驱动版本,否则很可能报错。

三、Sqoop使用命令

   参考官方文档:http://sqoop.apache.org/docs/1.4.5/index.html

1、MySQL数据导入到Hadoop

   sqoop import --connect jdbc:mysql://192.168.137.1:3306/test --username root --password 123456 --table mytabs --fields-terminated-by '\t' -m 1 [--hive-import] --append --check-column 'id'  --incremental append --last-value 5 --where 'id>2 and id<5'

   常用参数说明:

   ▶ --fields-terminated-by '\t',表示将数据导入到hadoop中列记录之间的间隔符,默认符号为英文逗号。这里通常使用制表符\t来间隔数据,避免数据再次从HDFS到入到关系数据库时引起分割混乱;

   ▶ -m 1,是--num-mappers的缩写,表示指定MapReduce的个数为1个(默认会自动开启多个),sqoop转化的MR程序不包含reduce

   ▶ --append,表示数据导入到hadoop的方式为追加,否则不允许重复导入;

   ▶ --check-column '主键列名' --incremental append --last-value 5,表示数据为增量导入,根据--last-value的值来判断,有大于这个值的记录则执行导入,否则不执行导入操作;

   ▶ --hive-import,表示将数据导入到Hive中;

   ▶ --where '',数据筛选条件

   ▶ -e 或--query 'select * from table where id>5 and $CONDITIONS',自定义导入数据的sql语句。使用自定义sql语句需要注意:① 使用了自定义sql就不能指定--table;② 自定义sql语句的where条件中必须包含字符串"$CONDITIONS",$CONDITIONS是一个变量,用于给多个map任务划分任务范围;③ 使用自定义sql时,如果通过参数-m指定多个map任务,由于自定义sql中可能存在多表查询,因此必须使用参数“--split-by 表名.字段名”指定多个map任务分割数据的根据字段,如--split-by users.id;

   ▶ --target-dir,显示指定数据导入到HDFS中的位置,默认保存路径为:/user/{当前用户}/{表名}/表数据文件,如果导入时需要将已存在的HDFS文件删除,可使用--delete-target-dir

2、Hadoop数据导入到MySQL

   sqoop export --connect jdbc:mysql://192.168.137.1:3306/test --username root --password 123456 --table ids --fields-terminated-by '\t' --export-dir '/ids'

   其中--export-dir '/ids',表示指定要导出的HDFS文件地址。执行导出操作前,必须保证MySQL表ids存在。

3、将Sqoop命令保存作业方便调用

   sqoop job --create myjob -- import --connect jdbc:mysql://192.168.137.1:3306/test --username root --password 123456 --table mytabs --fields-terminated-by '\t'

   其中myjob表示作业名称。在job中保存密码,默认在调用时还会要求输入密码,需要将密码直接保存在job中下次可以免密码直接执行,可以将/conf/sqoop-site.xml中的sqoop.metastore.client.record.password注视去掉。

   其他相关作业命令:① job sqoop job --list,查看作业列表;② job sqoop job --delete myjob,删除作业。

Sqoop -- 用于Hadoop与关系数据库间数据导入导出工作的工具的更多相关文章

  1. MySQL数据导入导出方法与工具mysqlimport

    MySQL数据导入导出方法与工具mysqlimport<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office ...

  2. 从零自学Hadoop(16):Hive数据导入导出,集群数据迁移上

    阅读目录 序 导入文件到Hive 将其他表的查询结果导入表 动态分区插入 将SQL语句的值插入到表中 模拟数据文件下载 系列索引 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并 ...

  3. sqoop用法之mysql与hive数据导入导出

    目录 一. Sqoop介绍 二. Mysql 数据导入到 Hive 三. Hive数据导入到Mysql 四. mysql数据增量导入hive 1. 基于递增列Append导入 1). 创建hive表 ...

  4. 从零自学Hadoop(17):Hive数据导入导出,集群数据迁移下

    阅读目录 序 将查询的结果写入文件系统 集群数据迁移一 集群数据迁移二 系列索引 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephis ...

  5. 如何利用sqoop将hive数据导入导出数据到mysql

    运行环境  centos 5.6   hadoop  hive sqoop是让hadoop技术支持的clouder公司开发的一个在关系数据库和hdfs,hive之间数据导入导出的一个工具. 上海尚学堂 ...

  6. 利用sqoop将hive数据导入导出数据到mysql

    一.导入导出数据库常用命令语句 1)列出mysql数据库中的所有数据库命令  #  sqoop list-databases --connect jdbc:mysql://localhost:3306 ...

  7. 使用sqoop将MySQL数据库中的数据导入Hbase

    使用sqoop将MySQL数据库中的数据导入Hbase 前提:安装好 sqoop.hbase. 下载jbdc驱动:mysql-connector-java-5.1.10.jar 将 mysql-con ...

  8. 通过 Sqoop1.4.7 将 Mysql5.7、Hive2.3.4、Hbase1.4.9 之间的数据导入导出

    目录 目录 1.什么是 Sqoop? 2.下载应用程序及配置环境变量 2.1.下载 Sqoop 1.4.7 2.2.设置环境变量 2.3.设置安装所需环境 3.安装 Sqoop 1.4.7 3.1.修 ...

  9. python 全栈开发,Day126(创业故事,软件部需求,内容采集,显示内容图文列表,MongoDB数据导入导出JSON)

    作业讲解 下载代码: HBuilder APP和flask后端登录 链接:https://pan.baidu.com/s/1eBwd1sVXTNLdHwKRM2-ytg 密码:4pcw 如何打开APP ...

随机推荐

  1. md5只是用来签名,签名的作用是保证数据完整不会被破坏而已。签名和加密是两回事

    md5只是用来签名,签名的作用是保证数据完整不会被破坏而已,多一个sign标签,sign的值就是md5生成的字符串.签名和加密是两回事

  2. 字符串复制char *strcpy(char* dest, const char *src);

    ⒈strcpy的实现代码 char * strcpy(char * strDest,const char * strSrc) { if ((NULL==strDest) || (NULL==strSr ...

  3. [转]为何TCP/IP协议栈设计成沙漏型的

    http://m.blog.csdn.net/blog/dog250/18959371 前几天有人回复我的一篇文章问,为何TCP/IP协议栈设计成沙漏型的.这个问题问得好!我先不谈为何它如此设计,我一 ...

  4. 【php学习】数组操作

    1.json字符串和数组之间的转换 json_decode($jsonStr)      json字符串解码为php变量,若第二个参数默认为false,返回一个对象:若第二个参数设置true,则返回一 ...

  5. libopencv_highgui.a(window_gtk.cpp.o): undefined reference to symbol 'g_type_check_instance_is_a'

    libopencv_highgui.a(window_gtk.cpp.o): undefined reference to symbol 'g_type_check_instance_is_a' 尝试 ...

  6. cwe

  7. 安装SQL Server出现在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke的错误解决办法

    以下是错误报告:   标题: SQL Server 安装程序失败. ------------------------------   SQL Server 安装程序遇到以下错误:   在创建窗口句柄之 ...

  8. Linux下开发Windows平台运行的程序 - MinGW

    开源不乏神人,于是有了MinGW(Minimalist GNU for Windows),又称mingw32,是将GCC编译器和GNU Binutils一直到Win32平台下,包含一系列头文件.库和可 ...

  9. 使用C++还是QML

    本质上,Qt 是一个C++类库.在引入 QML 以前,所有的开发都是基于 C++ 的,但到了 Qt 5,QML 和 Qt Quick 成为了 Qt 的核心之一,导致很多初学者在犹豫是否还需要学习 C+ ...

  10. zepto源码--qsa--学习笔记

    zepto内部选择器qsa方法的实现. 简述实现原理: 通过判断传入的参数类型: 如果是'#id',则使用getElementById(id)来获取元素,并且将结果包装成数组形式: 如果是'.clas ...