SQOOP的描述
SQOOP是用于对数据进行导入导出的。
(1)把MySQL、Oracle等数据库中的数据导入到HDFS、Hive、Hbase中
(2)把HDFS、Hive、HBase中的数据导出到MySQL、Oracle等数据库中
SQOOP的安装
解压缩sqoop的tar.gz文件,设置环境变量(source /etc/profile)
把数据从mysql导入到hdfs(默认是/user/<username>)中
1. 复制mysql的驱动到sqoop目录下的lib中
2. 执行导入命令
sqoopimport --connect jdbc:mysql://hadoop0:3306/hive --username root --password admin --table TBLS --fields-terminated-by'\t' --null-string '**' -m 1 --append --hive-import
说明:
ü 执行import命令将mysql的hive数据库中的TBLS表导入到hdfs中(默认目录user/root)
ü --fields-terminated-by '\t' :表示导入到hdfs中以’\t’进行切割
ü --null-string ‘**’:表示当字段为null时用’**’替换
ü -m1:表示只指定一个map任务(map任务的个数关系生成文件的个数)
ü --append:表示如果执行多次则进行追加(否则多次执行则会报already exsist)
ü --hive-import:表示导入到hive中(如果只需导入到hdfs中则可不写)
ü
sqoopimport --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
说明:
ü 执行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 --connect jdbc:mysql://hadoop0:3306/hive --username root --password admin --table ids--fields-terminated-by '\t' --export-dir '/ids'
说明:
--export-dir '/ids':指定要导出到Mysql的文件目录
设置为作业,运行作业
sqoop job --create myjob -- import --connectjdbc:mysql://hadoop0:3306/hive --username root --password admin --table TBLS --fields-terminated-by'\t' --null-string '**' -m 1 --append --hive-import
说明:
ü 设置为作业后可以直接执行作业,执行作业即执行该命令
ü 执行作业的命令:sqoopjob –exec myjob
ü 查看作业已创建的Job作业:sqoop job –list
注:运行作业第一次需要输入密码,输入密码后即可执行,然后修改sqoop/conf/sqoop-site.xml中的sqoop.metastore.client.record.password(去掉注释即可)
以后运行就不需要在此输入密码了
CIO之家 www.ciozj.com 公众号:imciow