SQOOP是用于对数据进行导入导出的。
(1)把MySQL、Oracle等数据库中的数据导入到HDFS、Hive、HBase中
(2)把HDFS、Hive、HBase中的数据导出到MySQL、Oracle等数据库中
1.把数据从mysql导入到hdfs(默认是/user/<username>)中
导出TBLS表,表中字段用'\t'分隔,如果字段为null,用**代替,指定使用一个map任务(默认4个),如果重复导入,则append,新增一个输出文
件,--hive-import代表导入到HDFS上的Hive中。
sqoop import --connect jdbc:mysql://hadoop0:3306/hive --username root --password admin --table TBLS --fields-terminated-by
'\t' --null-string '**' -m 1 --append --hive-import
导出TBLS表,表中字段用'\t'分隔,如果字段为null,用**代替,指定使用一个map任务(默认4个),如果重复导入,则append,新增一个输出文
件,--hive-import代表导入到HDFS上的Hive中。再导入时检查TBL_ID字段,只导入该字段值大于6的记录。
sqoop import --connect jdbc:mysql://hadoop0:3306/hive --username root --password admin --table TBLS --fields-terminated-by
'\t' --null-string '**' -m 1 --append --hive-import --check-column 'TBL_ID' --incremental append --last-value 6
2.把数据从hdfs导出到mysql中
将hdfs上的根目录上的ids文件夹内的所有文件(导出都是按目录导出,不是按文件),导出到ids表中。
sqoop export --connect jdbc:mysql://hadoop0:3306/hive --username root --password admin --table ids --fields-terminated-by
'\t' --export-dir '/ids'
(1)把MySQL、Oracle等数据库中的数据导入到HDFS、Hive、HBase中
(2)把HDFS、Hive、HBase中的数据导出到MySQL、Oracle等数据库中
1.把数据从mysql导入到hdfs(默认是/user/<username>)中
导出TBLS表,表中字段用'\t'分隔,如果字段为null,用**代替,指定使用一个map任务(默认4个),如果重复导入,则append,新增一个输出文
件,--hive-import代表导入到HDFS上的Hive中。
sqoop import --connect jdbc:mysql://hadoop0:3306/hive --username root --password admin --table TBLS --fields-terminated-by
'\t' --null-string '**' -m 1 --append --hive-import
导出TBLS表,表中字段用'\t'分隔,如果字段为null,用**代替,指定使用一个map任务(默认4个),如果重复导入,则append,新增一个输出文
件,--hive-import代表导入到HDFS上的Hive中。再导入时检查TBL_ID字段,只导入该字段值大于6的记录。
sqoop import --connect jdbc:mysql://hadoop0:3306/hive --username root --password admin --table TBLS --fields-terminated-by
'\t' --null-string '**' -m 1 --append --hive-import --check-column 'TBL_ID' --incremental append --last-value 6
2.把数据从hdfs导出到mysql中
将hdfs上的根目录上的ids文件夹内的所有文件(导出都是按目录导出,不是按文件),导出到ids表中。
sqoop export --connect jdbc:mysql://hadoop0:3306/hive --username root --password admin --table ids --fields-terminated-by
'\t' --export-dir '/ids'
3.设置为作业,运行作业
将该脚本保存为一个名为myjpb的job,方便使用。以后直接执行myjob即可。
sqoop job --create myjob -- import --connect jdbc:mysql://hadoop0:3306/hive --username root --password admin --table TBLS
--fields-terminated-by '\t' --null-string '**' -m 1 --append --hive-import
可以通过sqoop job --list 查看。
执行myjob的命令:sqoop job --exec myjob 执行需要设置执行密码,如果不想输入需要在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>
-->
4.导入导出的事务是以Mapper任务为单位。
如果使用默认的map任务数量(4个),那代表同时有四个事务。如果想保持四个事务的一致性,可以使用 --staging-table 指定一个表名,将数据先全部导入到该表后,再进行导入导出操作,这样就可以满足多事务的一直。操作完成后清空该表还可以使用 --clear-staging-table 参数