一、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
本站声明:网站内容来源于网络,如有侵权,请联系我们,我们将及时处理。
还没有人抢沙发呢~