1、Sqoop Job
- 问题:在增量导入时,是不是每次都要手动更改上一次的值?
- 测试:
bin/sqoop import \
--connect jdbc:mysql://node-03:3306/sqoop \
--username root \
--password 123456 \
--table tb_tohdfs \
--target-dir /sqoop/import/test04 \
--fields-terminated-by '\t' \
--incremental append \
--check-column id \
--last-value 4 \
-m 1
- 解决:官方建议,你将增量导入的程序,封装为Sqoop Job
- 每次不用执行非常长的代码
- 每次不用手动修改lastvalue,sqoop job会自动记录
- 实现
- 在Mysql中再插入两条数据
insert into tb_tohdfs values(null,'laojiu',26);
insert into tb_tohdfs values(null,'laoshi',27);
- 创建一个sqoop job
- 只是定义,不会运行
- 只是定义,不会运行
bin/sqoop job --create job01 \
-- import \
--connect jdbc:mysql://node-03:3306/sqoop \
--username root \
--password 123456 \
--table tb_tohdfs \
--target-dir /sqoop/import/test04 \
--fields-terminated-by '\t' \
--incremental append \
--check-column id \
--last-value 8 \
-m 1
- 查看所有的job
bin/sqoop job --list
- 查看某个job的信息
- 注意:会让你输入Mysql的密码:123456
bin/sqoop job --show job01
- 执行一个Sqoop的Job
- 注意:会让你输入Mysql的密码:123456
bin/sqoop job --exec job01
-
问题
-
每次Sqoop job查看信息或者 运行时都要输入密码,怎么能不输密码?
-
修改Sqoop的sqoop-site.xml这个配置文件
vim conf/sqoop-site.xml
#在121行和128行,去掉注释,开启以下参数
<property>
<name>sqoop.metastore.client.record.password</name>
<value>true</value>
<description>If true, allow saved passwords in the metastore.
</description>
</property>
- 将第一次输入的密码,保存在元数据中
- 重新创建job,只有第一次需要输入密码
Sqoop的程序中密码是暴露的?
-
–password 来指定的
-
方案一:使用-P来代替–password
- 在执行时手动输入密码
bin/sqoop list-databases \
--connect jdbc:mysql://node-03:3306 \
--username root \
-P
-
方案二:–password-file来代替
- 将密码保存在一个文件中,读取文件来实现
bin/sqoop list-databases \
--connect jdbc:mysql://node-03:3306 \
--username root \
--password-file file:///export/datas/mypasswd
- 实现
- 创建编辑
vim /export/datas/mypasswd
123456
- 用nodepad++打开这个文件,删掉第二行的换行
- 问题:默认SQOOP读取hdfs的文件
2、Sqoop 脚本
- 在工作中,增量采集的job都是每天执行一次,需要调度执行
- 如何在脚本中封装Sqoop的命令呢?
- 能不能实现类似于Hive,将Sqoop的程序封装一个文件中,运行这个文件?
- 实现:
- 创建一个文件,将sqoop的代码放入文件,注意必须一行一个参数
vim /export/datas/sqoop.txt
import
--connect
jdbc:mysql://node-03:3306/sqoop
--username
root
--password
123456
--table
tb_tohdfs
--delete-target-dir
--target-dir
/sqoop/import/test05
--fields-terminated-by
'\t'
-m
1
- 通过Sqoop运行这个文件
bin/sqoop --options-file /export/datas/sqoop.txt