最近在增量同步mysql的数据到hive中,用sqoop进行增量导入,将增量任务设置为sqoop的job,每天定时跑sqoop的job就可以了,在创建job的时候sqoop给出提示,不要在命令行使用明文密码.
创建job命令:
bin/sqoop job --create test01job -- import \
--connect jdbc:localhost:3306/test --username root --password 123456 \
--table users --hive-import --hive-table ods.users --fields-terminated-by "\t" \
--incremental append \--check-column id --last-value 1 -m 1
任务创建好以后,尝试去执行任务,果然有坑,创建任务时候的明文密码被忽略了,要手动输入密码,这个需要解决才能定时执行,网上查找了一下以后,有两个方法能解决需要手动输入密码这个问题.
- 设置sqoop-site.xml文件
在sqoop的conf目录下,找到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>
-
在创建job的时候使用password-file代替password
在sqoop的官方文档中,连接密码是支持用password-file这种文件方式来传递的…亲测,password-file文件在本地和hadoop集群上都可以生效.
创建password文件,echo '123456' > test.password
.
测试本地password文件
创建jobbin/sqoop job --create test01job -- import \ --connect jdbc:localhost:3306/test --username root \ --password-file file:///home/data/sqoop/test.password \ --table users --hive-import --hive-table ods.users \ --fields-terminated-by "\t" \ --incremental append \--check-column id \ --last-value 1 -m 1
测试hadoop集群password文件,
将password文件上传到hdfs.hdfs dfs -put test.password /user/root/
创建jobbin/sqoop job --create test01job -- import \ --connect jdbc:localhost:3306/test --username root \ --password-file /user/root/test.password \ --table users --hive-import --hive-table ods.users \ --fields-terminated-by "\t" \ --incremental append \--check-column id \ --last-value 1 -m 1
亲测,password文件在本地和hdfs上均有效.
参考. sqoop官网