sqoop数据迁移工具
2020-06-09 09:45:12 0 举报
AI智能生成
sqoop 数据迁移工具
作者其他创作
大纲/内容
Hadoop和关系数据库之间传输数据
sqoop的工作机制
将导入和导出的命令翻译成mapreduce程序实现
在翻译出的mapreduce中主要是对inputformat和outputformat进行定制
导入
导入数据库表数据到HDFS
查看帮助文档:sqoop list-databases --help
列举出所有的数据库:sqoop list-databases --connect jdbc:mysql://node1:3306/ --username root --password 123456
sqoop import --connect jdbc:mysql://node1:3306/userdb --username root --password 123456 --table emp --m 1
--target-dir==来指定导出目的地
--delete-target-dir==来判断导出目录是否存在,如果存在就删掉
--fields-terminated-by 指定导入后数据字段的分隔符
导入关系表到Hive中
将hive的一个叫做==hive-exec-1.2.2.jar==包拷贝到sqoop的lib目录下
要先创建hive表 : sqoop import --connect jdbc:mysql://node1:3306/userdb --username root --password 123456 --table emp --fields-terminated-by '\001' --hive-import --hive-table sqooptohive.emp_hive --hive-overwrite --m 1
自动创建表: sqoop import --connect jdbc:mysql://node1:3306/userdb --username root --password 123456 --hive-database sqooptohive --hive-table emp1 --table emp --hive-import -m 1 ;
导入表数据子集
sqoop import \
--connect jdbc:mysql://node1:3306/userdb \
--username root --password 123456 --table emp \
--target-dir /sqoop/emp_where -m 1 --delete-target-dir \
--where "dept = 'TP'"
--connect jdbc:mysql://node1:3306/userdb \
--username root --password 123456 --table emp \
--target-dir /sqoop/emp_where -m 1 --delete-target-dir \
--where "dept = 'TP'"
sql语句查找导入hdfs
sqoop import \
--connect jdbc:mysql://node1:3306/userdb \
--username root --password 123456 \
--target-dir /sqoop/emp_sql -m 1 --delete-target-dir \
--query 'select * from emp where salary >30000 and $CONDITIONS'
--connect jdbc:mysql://node1:3306/userdb \
--username root --password 123456 \
--target-dir /sqoop/emp_sql -m 1 --delete-target-dir \
--query 'select * from emp where salary >30000 and $CONDITIONS'
增量导入
基于递增列的增量数据导入(Append方式)
sqoop import \
--connect jdbc:mysql://node1:3306/userdb \
--username root \
--password 123456 \
--table emp \
--incremental append \
--check-column id \
--last-value 1202 \
-m 1 \
--target-dir /sqoop/increment1
--connect jdbc:mysql://node1:3306/userdb \
--username root \
--password 123456 \
--table emp \
--incremental append \
--check-column id \
--last-value 1202 \
-m 1 \
--target-dir /sqoop/increment1
这里不能加上 --delete-target-dir 参数
基于时间列的增量数据导入(LastModified方式)
sqoop import \
--connect jdbc:mysql://node1:3306/userdb \
--username root \
--password 123456 \
--table user \
--target-dir /sqoop/incement2 \
--incremental lastmodified \
--check-column createTime \
--last-value '2019-09-01 10:16:00' \
--m 1
--connect jdbc:mysql://node1:3306/userdb \
--username root \
--password 123456 \
--table user \
--target-dir /sqoop/incement2 \
--incremental lastmodified \
--check-column createTime \
--last-value '2019-09-01 10:16:00' \
--m 1
导出
hdfs文件导出到mysql表中
创建一张mysql表
sqoop export \
--connect jdbc:mysql://node1:3306/userdb \
--username root --password 123456 \
--table fromhdfs \
--input-fields-terminated-by " " \
--export-dir /user/hive/warehouse/hive_source
--connect jdbc:mysql://node1:3306/userdb \
--username root --password 123456 \
--table fromhdfs \
--input-fields-terminated-by " " \
--export-dir /user/hive/warehouse/hive_source
Sqoop作业
在创建job时,==命令"-- import" 中间有个空格
sqoop job \
--create myjob \
-- import \
--connect jdbc:mysql://node1:3306/userdb \
--username root \
--password 123456 \
--table emp \
--target-dir /sqoop/myjob \
--delete-target-dir \
--m 1
--create myjob \
-- import \
--connect jdbc:mysql://node1:3306/userdb \
--username root \
--password 123456 \
--table emp \
--target-dir /sqoop/myjob \
--delete-target-dir \
--m 1
0 条评论
下一页