Sqoop
2021-04-12 08:59:04 0 举报
AI智能生成
Sqoop笔记
作者其他创作
大纲/内容
1. Apache Sqoop
介绍
来自 apache
数据传输工具
Hadoop生态体系 与 RDBMS体系 之间传输
Hadoop 生态系统包括:HDFS、Hive、Hbase 等
RDBMS 体系包括:Mysql、Oracle、DB2 等
工作机制
将导入或导出命令翻译成 mapreduce 程序来实现
Import:数据导入。RDBMS----->Hadoop
Export:数据导出。Hadoop---->RDBMS
安装
依赖
Java
Hadoop
2. Sqoop 导入
MySql到HDFS
全量导入
sqoop import \
--connect jdbc:mysql://node03:3306/userdb \
--username root \
--password 123456 \
--table allowinsert \
--target-dir /data/sqoop/allowinsert \
--delete-target-dir \
--fields-terminated-by '\t' \
--m 1
--connect jdbc:mysql://node03:3306/userdb \
--username root \
--password 123456 \
--table allowinsert \
--target-dir /data/sqoop/allowinsert \
--delete-target-dir \
--fields-terminated-by '\t' \
--m 1
查询导入
sqoop import \
--connect jdbc:mysql://node03:3306/userdb \
--username root \
--password 123456 \
--target-dir /data/sqoop/allowinsert_query \
--delete-target-dir \
--query 'select id, name from allowinsert where 1=1 and $CONDITIONS' \
--fields-terminated-by ',' \
--m 1
--connect jdbc:mysql://node03:3306/userdb \
--username root \
--password 123456 \
--target-dir /data/sqoop/allowinsert_query \
--delete-target-dir \
--query 'select id, name from allowinsert where 1=1 and $CONDITIONS' \
--fields-terminated-by ',' \
--m 1
导出部分字段
sqoop import \
--connect jdbc:mysql://node03:3306/userdb \
--username root \
--password 123456 \
--table allowinsert \
--delete-target-dir \
--target-dir /data/sqoop/allowinsert_columns \
--columns name,salary \
--fields-terminated-by '|' \
--m 1
--connect jdbc:mysql://node03:3306/userdb \
--username root \
--password 123456 \
--table allowinsert \
--delete-target-dir \
--target-dir /data/sqoop/allowinsert_columns \
--columns name,salary \
--fields-terminated-by '|' \
--m 1
使用sqoop关键字筛选查询导入数据
sqoop import \
--connect jdbc:mysql://node03:3306/userdb \
--username root \
--password 123456 \
--table allowinsert \
--delete-target-dir \
--target-dir /data/sqoop/allowinsert_query_gjz \
--where id=1203 \
--fields-terminated-by '\t' \
--m 1
--connect jdbc:mysql://node03:3306/userdb \
--username root \
--password 123456 \
--table allowinsert \
--delete-target-dir \
--target-dir /data/sqoop/allowinsert_query_gjz \
--where id=1203 \
--fields-terminated-by '\t' \
--m 1
MySql到Hive
方法1
#将关系型数据的表结构复制到 hive 中
sqoop create-hive-table \
--connect jdbc:mysql://node03:3306/userdb \
--username root \
--password 123456 \
--table allowinsert \
--hive-table userdb.allowinsert_hive
sqoop create-hive-table \
--connect jdbc:mysql://node03:3306/userdb \
--username root \
--password 123456 \
--table allowinsert \
--hive-table userdb.allowinsert_hive
sqoop import \
--connect jdbc:mysql://node03:3306/userdb \
--username root \
--password 123456 \
--table allowinsert \
--hive-import \
--hive-table db.allowinsert_hive \
--hive-overwrite \
--fields-terminated-by '\t' \
--m 1
--connect jdbc:mysql://node03:3306/userdb \
--username root \
--password 123456 \
--table allowinsert \
--hive-import \
--hive-table db.allowinsert_hive \
--hive-overwrite \
--fields-terminated-by '\t' \
--m 1
方法2
#直接复制表结构和数据到hive
sqoop import \
--connect jdbc:mysql://node03:3306/userdb \
--username root \
--password 123456 \
--table employee \
--hive-import \
--hive-database userdb \
--m 1
sqoop import \
--connect jdbc:mysql://node03:3306/userdb \
--username root \
--password 123456 \
--table employee \
--hive-import \
--hive-database userdb \
--m 1
增量导入(3个参数同时使用)
--check-column (col):可以指定列,列的数据类型不能是char,varchar等字符类型
--incremental (mode)
append:追加,比如对大于 last-value 指定的值之后的记录进行追加导入。
lastmodified:最后的修改时间,追加 last-value 指定的日期之后的记录
--last-value (value)
指定自从上次导入后列的最大值(大于该指定的值),也可以自己设定某一值
#append模式
sqoop import \
--connect jdbc:mysql://node03:3306/userdb \
--username root \
--password 123456 \
--table employee \
--target-dir /data/sqoop/employee_icre \
--incremental append \
--check-column id \
--last-value 1205 \
--fields-terminated-by '\t' \
--m 1
sqoop import \
--connect jdbc:mysql://node03:3306/userdb \
--username root \
--password 123456 \
--table employee \
--target-dir /data/sqoop/employee_icre \
--incremental append \
--check-column id \
--last-value 1205 \
--fields-terminated-by '\t' \
--m 1
3. Sqoop 导出
HIVE/HDFS到MySql(默认导出)
sqoop export \
--connect jdbc:mysql://node03:3306/userdb \
--username root \
--password 123456 \
--table allowinsert_mysql \
--export-dir /user/hive/warehouse/allowinsert_hive \
--input-fields-terminated-by '\t' \
--m 1
--connect jdbc:mysql://node03:3306/userdb \
--username root \
--password 123456 \
--table allowinsert_mysql \
--export-dir /user/hive/warehouse/allowinsert_hive \
--input-fields-terminated-by '\t' \
--m 1
更新导出(updateonly 模式)
bin/sqoop export \
--connect jdbc:mysql://node-1:3306/userdb \
--username root --password hadoop \
--table updateonly \
--export-dir /updateonly_2/ \
--update-key id \
--update-mode updateonly
--connect jdbc:mysql://node-1:3306/userdb \
--username root --password hadoop \
--table updateonly \
--export-dir /updateonly_2/ \
--update-key id \
--update-mode updateonly
更新导出(allowinsert 模式)
bin/sqoop export \
--connect jdbc:mysql://node-1:3306/userdb \
--username root --password hadoop \
--table allowinsert \
--export-dir /allowinsert_2/ \
--update-key id \
--update-mode allowinsert
--connect jdbc:mysql://node-1:3306/userdb \
--username root --password hadoop \
--table allowinsert \
--export-dir /allowinsert_2/ \
--update-key id \
--update-mode allowinsert
4. Sqoop job
1. job 语法
$ sqoop job (generic-args) (job-args)
[-- [subtool-name] (subtool-args)]
[-- [subtool-name] (subtool-args)]
2. 创建 job
bin/sqoop job --create itcastjob
-- import --connect jdbc:mysql://node-1:3306/userdb \
--username root \
--password hadoop \
--target-dir /sqoopresult333 \
--table emp --m 1
#注意 import 前要有空格
-- import --connect jdbc:mysql://node-1:3306/userdb \
--username root \
--password hadoop \
--target-dir /sqoopresult333 \
--table emp --m 1
#注意 import 前要有空格
3. 验证 job
bin/sqoop job --list
4. 检查 job
bin/sqoop job --show itcastjob
5. 执行 job
bin/sqoop job --exec itcastjob
6. 免密执行 job
sqoop 在创建 job 时,使用--password-file 参数,可以避免输入 mysql 密码.
密码文件必须存放在 HDFS 上,并且权限必须是 400
密码文件必须存放在 HDFS 上,并且权限必须是 400
#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>
<property>
<name>sqoop.metastore.client.record.password</name>
<value>true</value>
<description>If true, allow saved passwords in the metastore.
</description>
</property>
bin/sqoop job --create itcastjob1 -- import --connect jdbc:mysql://cdh-
1:3306/userdb \
--username root \
--password-file /input/sqoop/pwd/itcastmysql.pwd \
--target-dir /sqoopresult333 \
--table emp --m 1
1:3306/userdb \
--username root \
--password-file /input/sqoop/pwd/itcastmysql.pwd \
--target-dir /sqoopresult333 \
--table emp --m 1
0 条评论
下一页