Sqoop教程(一) Sqoop数据迁移工具

 

 

Sqoop教程() Sqoop数据迁移工具

 


1 Sqoop介绍

Sqoop是一个用来将Hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(例如MySQLOraclePostgres等)中的数据导进到HadoopHDFS中,也可以将HDFS的数据导进到关系型数据库中。对于某些NoSQL数据库它也提供了连接器。Sqoop,类似于其他ETL工具,使用元数据模型来判断数据类型并在数据从数据源转移到Hadoop时确保类型安全的数据处理。Sqoop专为大数据批量传输设计,能够分割数据集并创建Hadoop任务来处理每个区块。

Sqoop教程(一) Sqoop数据迁移工具_第1张图片

Sqoop工作流程图1-1

1.1 数据环境

1、windons安装MySQL数据库,安装教程参见:http://jingyan.baidu.com/article/4b07be3c67853c48b380f311.html

2、本地安装MySQL可视化工具SQLyog,下载地址:http://download.csdn.net/detail/yuan_xw/9535853

3、下载创建数据库、插入测试数据,下载地址:http://download.csdn.net/detail/yuan_xw/9537098

创建数据库sqoop_db

Sqoop教程(一) Sqoop数据迁移工具_第2张图片

 

1.2 sqoop下载安装

Hadoop教程()Hadoop分布式集群部署安装》安装的是Hadoop-2.7.1版本,在此需要下载sqoop版本hadoop-2.0.4-alpha.tar.gz

下载地址:http://mirrors.hust.edu.cn/apache/sqoop/1.4.6/sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz

 

4、Hadoop3服务器节点下载hadoop-2.0.4-alpha.tar.gz到目录位置:/usr/local/software/

执行命令:

cd /usr/local/software

wgethttp://mirrors.hust.edu.cn/apache/sqoop/1.4.6/sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz

 

5、解压Hbase

执行命令:tar -zxvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz

重命名:mv sqoop-1.4.6.bin__hadoop-2.0.4-alpha sqoop_1.4.6


 

6、配置环境变量

export JAVA_HOME=/usr/local/software/jdk1.8.0_66

export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export HADOOP_HOME=/usr/local/software/hadoop_2.7.1

export SQOOP_HOME=/usr/local/software/sqoop_1.4.6

export PATH=.:$JAVA_HOME/bin:$HADOOP_HOME/bin:$SQOOP_HOME/bin:$PATH


配置好环境变量,退出并刷新环境变量:source /etc/profile

将数据库连接驱动拷贝到$SQOOP_HOME/lib文件中,

执行命令:

cd /usr/local/software/sqoop_1.4.6/lib

wgethttp://central.maven.org/maven2/mysql/mysql-connector-java/5.1.38/mysql-connector-java-5.1.38.jar

 

7、设置MySQL数据root用户

MySQL数据库开启远程连接,在localhost(本机)登录mysql数据库后,对root远程进行授权,SQL语句如下:

 

--192.168.1.105主机访问数据的权限--

GRANT ALL PRIVILEGES ON sqoop_db.* TO'root'@'192.168.1.105' IDENTIFIED BY '123' WITH GRANT OPTION;

 

--予任何主机访问数据的权限--

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'IDENTIFIED BY 'root' WITH GRANT OPTION;

 

--修改生效--

FLUSH PRIVILEGES


1.3 sqoop数据导入

1、MySQL导入HDFS文件系统

执行命令:

sqoop import --connect jdbc:mysql://192.168.1.105:3306/sqoop_db --username root --password root
 --table product --columns 'PRODUCT_ID,PRODUCT_NAME,LIST_PRICE,QUANTITY,CREATE_TIME'

import:从MySQL导入到HDFS文件系统数据

--connect:数据库JDBC连接字符串jdbc:mysql://192.168.1.105:3306/sqoop_db

--username:数据库用户名

--password:数据库密码

--table:数据库表名

--columns:数据库列名


实际上import命令,从MySQL导入到HDFS文件系统数据操作的背后依然是执行的MapReduce


查看导入到HDFS中的数据:

通过web浏览器查看http://192.168.1.121:50070/explorer.html#/user/root/product

Sqoop教程(一) Sqoop数据迁移工具_第3张图片

通过命令行查看

执行命令:hadoop fs -ls -R /

Sqoop教程(一) Sqoop数据迁移工具_第4张图片

执行命令:hadoop fs -cat/user/root/product/part-m-00001

Sqoop教程(一) Sqoop数据迁移工具_第5张图片


1.4 指定参数导入

1、将数据从MySQL导入HDFS文件系统指定的目录下,并且指定使用#号进行数据分隔指定Map数量为2,方便分析

执行命令:

	sqoop import --connect jdbc:mysql://192.168.1.105:3306/sqoop_db --username root --password root --table product
	 --columns 'PRODUCT_ID,PRODUCT_NAME,LIST_PRICE,QUANTITY,CREATE_TIME' --target-dir' /sqoop/product1' --fields-terminated-by '#'  -m 2

通过命令行查看

执行命令:hadoop fs -ls -R /

Sqoop教程(一) Sqoop数据迁移工具_第6张图片

执行命令:hadoop fs -cat /sqoop/product1/part-m-00001|grep '#'

Sqoop教程(一) Sqoop数据迁移工具_第7张图片


1.5 where条件数据导入

1、where条件查询出QUANTITY字段大于500的导入到HDFS文件系统指定的目录下,where条件的内容必须在单引号中

       执行命令:

	sqoop import --connect jdbc:mysql://192.168.1.105:3306/sqoop_db --username root --password root  --table product
  --columns 'PRODUCT_ID,PRODUCT_NAME,LIST_PRICE,QUANTITY,CREATE_TIME' --where 'QUANTITY> 500' --target-dir '/sqoop/product2' --fields-terminated-by '#'

通过命令行查看

  执行命令:hadoop fs -ls -R /sqoop/product2/

Sqoop教程(一) Sqoop数据迁移工具_第8张图片

执行命令:hadoop fs -cat /sqoop/product2/part-m-00004|grep '#'


1.6 sql语句查询数据导入

1、where条件导入使用--query这个命令的时候,需要注意的是where后面的参数,AND$CONDITIONS这个参数必须加上而且存在单引号与双引号的区别,如果--query后面使用的是双引号,那么需要在$CONDITIONS前加上\\$CONDITIONS如果设置map数量为1个时即-m 1,不用加上--split-by${tablename.column},否则需要加上。query使用 \ 将语句换行。

执行命令:

sqoop import --connect jdbc:mysql://192.168.1.105:3306/sqoop_db --username root --password root
 --query 'SELECT P.PRODUCT_ID,P.PRODUCT_NAME,P.LIST_PRICE,P.QUANTITY,B.BRAND_ID,B.BRAND_NAME,P.CREATE_TIME FROM PRODUCT P 
 INNER JOIN BRAND B ON P.BRAND_ID = B.BRAND_ID WHERE P.QUANTITY > 500 AND $CONDITIONS' 
 --split-by P.PRODUCT_ID --target-dir '/sqoop/product3' --fields-terminated-by '#'

通过命令行查看

  执行命令:hadoop fs -ls -R /sqoop/product3/

                  Sqoop教程(一) Sqoop数据迁移工具_第9张图片

执行命令:hadoop fs -cat /sqoop/product3/part-m-00001|grep '#'

                 

 

1.7 sqoop数据导入

1、SQL语句查出的数据,进行导入到MySQL数据库中。另外需要注意的是,如果导入HDFS的使用的分隔符是'#',那么在数据导出到MySQL也需要指定分隔符是'#'

执行命令:

sqoop export --connect jdbc:mysql://192.168.1.105:3306/sqoop_db --username root --password root
 --export-dir '/sqoop/product3' --table PRODUCT_BRAND_TABLE -m 1 --input-fields-terminated-by '#'

MySQL命令行执行SQL语句,查看数据:select * from product_brand_table;

Sqoop教程(一) Sqoop数据迁移工具_第10张图片

 

1.8 学习sqoop推荐书籍:

1. Apache Sqoop Cookbook

 


                --以上为《Sqoop教程(一) Sqoop数据迁移工具》,如有不当之处请指出,我后续逐步完善更正,大家共同提高。谢谢大家对我的关注。

                                                                                                                                                                                      ——厚积薄发(yuanxw)


你可能感兴趣的:(Hadoop教程)