sqoop运行job避免输入密码的解决方案

最近在增量同步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运行job避免输入密码的解决方案_第1张图片
任务创建好以后,尝试去执行任务,果然有坑,创建任务时候的明文密码被忽略了,要手动输入密码,这个需要解决才能定时执行,网上查找了一下以后,有两个方法能解决需要手动输入密码这个问题.
sqoop运行job避免输入密码的解决方案_第2张图片

  1. 设置sqoop-site.xml文件
    在sqoop的conf目录下,找到sqoop-site.xml文件,在文件中添加下面这个配置,就可以避免输入密码这个问题.这个设置了以后,在第一次执行的时候需要输入密码.以后执行的时候就不需要输入密码了.
  
    sqoop.metastore.client.record.password
    true
    If true, allow saved passwords in the metastore.
    
  

  1. 在创建job的时候使用password-file代替password
    在sqoop的官方文档中,连接密码是支持用password-file这种文件方式来传递的…亲测,password-file文件在本地和hadoop集群上都可以生效.
    创建password文件,echo '123456' > test.password.
    测试本地password文件
    创建job

    bin/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/
    创建job

    bin/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官网

你可能感兴趣的:(大数据,sqoop)