最近在增量同步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官網