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

原创 2016年06月01日 13:05:33

 

 

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

 


1 Sqoop介绍

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


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


 

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


通过命令行查看

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


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


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 /


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


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/


执行命令: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/

                 

执行命令: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;


 

1.8 学习sqoop推荐书籍:

1. Apache Sqoop Cookbook

 


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

                                                                                                                                                                                      ——厚积薄发(yuanxw)


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Alex 的 Hadoop 菜鸟教程: 第12课 Sqoop1 安装/导入/导出教程

原帖地址: http://blog.csdn.net/nsrainbow/article/details/41575807 Sqoop是什么 sqoop是用于在传统关系型数据库跟hdfs之...

Sqoop详解

引言 Sqoop依赖与hadoop        数据的一方,存储在hdfs        底层的数据传输实现map/reduce yarn 只有map任务 因为官网sqoop没有hadoop2.5...

Alex 的 Hadoop 菜鸟教程: 第7课 Sqoop2 导入教程

Alex 的 Hadoop 菜鸟教程: 第7课 Sqoop2 导入教程 时间 2014-11-26 17:13:36 CSDN博客 原文  http://blog.csdn.net...

Sqoop使用实战

Sqoop实战

HAWQ取代传统数仓实践(四)——定期ETL(Sqoop、HAWQ)

一、变化数据捕获(CDC)        初始装载只在数据仓库开始使用前执行一次,然而,必须要周期性地执行装载源数据过程。与初始装载不同,定期装载一般都是增量的,并且需要捕获并且记录数据的变化历史。1...
  • wzy0623
  • wzy0623
  • 2017年05月12日 16:03
  • 2623

基于Hadoop生态圈的数据仓库实践 —— ETL(一)

一、使用Sqoop抽取数据 1. Sqoop简介         Sqoop是一个在Hadoop与结构化数据存储(如关系数据库)之间高效传输大批量数据的工具。它在2012年3月被成功孵化,现在已是Ap...
  • wzy0623
  • wzy0623
  • 2016年07月01日 22:54
  • 11445

Sqoop学习笔记

一、Sqoop简介Sqoop是一个用来将Hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop...

Sqoop使用实例讲解

摘要:本文主要讲了笔者在使用sqoop过程中的一些实例

sqoop jdk1.7不兼容问题

sqoop测试库上测试的很好,一切正常,切到正式库上运行报错: 查了下说是jdk兼容问题。测试库用的是jdk1.6,正式库是jdk1.7。用的是sqoop1.4.4,估计它还是在1.6的环境下编译的,...

SQOOP之——安装部署笔记

sqoop是一个把关系型数据库数据抽向hadoop的工具。同时,也支持将hive、pig等查询的结果导入关系型数据库中存储。由于,本人部署的hadoop版本是2.2.0,所以sqoop的版本是:sqo...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Sqoop教程(一) Sqoop数据迁移工具
举报原因:
原因补充:

(最多只允许输入30个字)