纵有疾风起
人生不言弃

Sqoop学习笔记

一、Sqoop简介

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

SQOOP是用于对数据进行导入导出的。
(1)把MySQL、Oracle等数据库中的数据导入到HDFS、Hive、HBase中。
(2)把HDFS、Hive、HBase中的数据导出到MySQL、Oracle等数据库中。

导入导出的事务是以Mapper任务为单位。

二、安装

1、解压缩、重命名

tar -zxvf sqoop-1.4.3.bin__hadoop-1.0.0.tar.gz
mv sqoop-1.4.3.bin__hadoop-1.0.0 sqoop

2、设置环境变量

[root@liguodong sqoop]# vi /etc/profile
[root@liguodong sqoop]# source /etc/profile

查看帮助
sqoop help

3、把mysql驱动mysql-XXX.jar放到$SQOOP_HOME/lib中

cp /usr/local/hive/lib/mysql-connector-java-5.1.10.jar /usr/local/sqoop/lib/

三、把数据从mysql导入到hdfs中

(默认是/user/<username>)

sqoop                                   ##sqoop命令
import                                  ##表示导入
--connect jdbc:mysql://ip:3306/sqoop ##告诉jdbc,连接mysql的url --username root ##连接mysql的用户名 --password hadoop ##连接mysql的密码 --table mysql1 ##从mysql导出的表名称 --fields-terminated-by '\t' ##指定输出文件中的行的字段分隔符 -m 1 ##复制过程使用1个map作业 --hive-import ##把mysql表数据复制到hive空间中。如果不使用该选项,意味着复制到hdfs中  
sqoop import --connect jdbc:mysql://liguodong:3306/hive  --username root --password hadoop --table TBLS --fields-terminated-by '\t'

删除/user/root/目录下的所有东西,方便观察。

hadoop fs -rmr /user/root

导入的时候,默认会启动4个map执行,加快执行速度,我们可以指定只有一个map执行。

sqoop import --connect jdbc:mysql://liguodong:3306/hive  --username root --password hadoop --table TBLS --fields-terminated-by '\t'  --null-string '**'  -m 1

多次写入,追加内容

sqoop import --connect jdbc:mysql://liguodong:3306/hive  --username root --password hadoop --table TBLS --fields-terminated-by '\t'  --null-string '**'  -m 1 --append

导入到其他指定目录之中

sqoop import --connect jdbc:mysql://liguodong:3306/hive  --username root --password hadoop --table TBLS --fields-terminated-by '\t'  --null-string '**'  -m 1 --append  --hive-import

导入增量部分
如果新增了内容,导入新增内容,如果没有新增内容,就不用导入了。

sqoop import --connect jdbc:mysql://liguodong:3306/hive  --username root --password hadoop --table TBLS --fields-terminated-by '\t'  --null-string '**'  -m 1 --append  --hive-import  --check-column 'TBL_ID' --incremental append --last-value 6

说明:

--hive-import 执行import命令将mysql的hive数据库中的TBLS表导入到hdfs中(默认目录user/root) --check-column 'TBL_ID':表示检查’TBL_ID‘列 --incremental 表示增量 --last-value 6 表示开始追加导入的列从第6列开始(不包含第6列) --check-column 'TBL_ID' --incremental append --last-value 6:整体解释为检查导入的主键列‘TBL_ID’当该列的值(增量)大于6时,可以进行追加导入,否则不进行导入 
(这样做的目的:当第一次导入数据时主键列的最后一个值为6,第二次导入时我们不想导入所有的数据而是后来增加的数据,所以我们可以接着上一次的数据导入,即不导入重复数据)

四、把数据从hdfs导出到mysql中

sqoop                       
export              ##表示数据从hive复制到mysql中
--connect jdbc:mysql://ip:3306/sqoop --username root --password admin --table test ##mysql中的表,即将被导入的表名称 --export-dir '/user/root/warehouse/mysql1' ##hive中被导出的文件目录 --fields-terminated-by '\t' ##hive中被导出的文件字段的分隔符 
注意:test必须存在

创建表ids

mysql> show databases;
mysql> use hive;
mysql> create table ids(id int);

Query OK, 0 rows affected (0.04 sec)

上传文件到hdfs中

vi ids
more ids
1
2
3
4
5

hadoop fs -put ids /ids/id

导出 (导出可以不断的做插入导出都是以目录导出,而不是以文件导出。

sqoop export --connect jdbc:mysql://liguodong:3306/hive  --username root --password hadoop --table ids --fields-terminated-by '\t' --export-dir '/ids'

五、设置为作业(sqoop job),运行作业

sqoop job --create myjob -- import --connect jdbc:mysql://liguodong:3306/hive  --username root --password hadoop --table TBLS --fields-terminated-by '\t'  --null-string '**'  -m 1 --append  --hive-import  

查看job
sqoop job --list

运行作业
sqoop job -exec myjob

设置为自动运行,在$SQOOP_HOME/conf/sqoop-site.xml下,修改配置文件。
设置为运行自动保存密码。

<property>
    <name>sqoop.metastore.client.record.password</name>
    <value>true</value>
    <description>If true, allow saved passwords in the metastore.
    </description>
</property>

必须要删除原来创建的脚本,然后重新创建。

sqoop job --delete myjob


sqoop job --create myjob -- import --connect jdbc:mysql://liguodong:3306/hive  --username root --password hadoop --table TBLS --fields-terminated-by '\t'  --null-string '**'  -m 1 --append  --hive-import  


sqoop job --exec myjob

原文链接:https://blog.csdn.net/scgaliguodong123_/article/details/44938517

本站声明:网站内容来源于网络,如有侵权,请联系我们,我们将及时处理。

未经允许不得转载:起风网 » Sqoop学习笔记
分享到: 生成海报

评论 抢沙发

评论前必须登录!

立即登录