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

提示不要使用明文
任務創建好以後,嘗試去執行任務,果然有坑,創建任務時候的明文密碼被忽略了,要手動輸入密碼,這個需要解決才能定時執行,網上查找了一下以後,有兩個方法能解決需要手動輸入密碼這個問題.
手動輸入密碼

  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>

  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官網

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章