sqoop在創(chuàng)建job時(shí),使用--password-file參數(shù),可以避免輸入mysql密碼踱稍,如果使用--password將出現(xiàn)警告,并且每次都要手動(dòng)輸入密碼才能執(zhí)行job悠抹,sqoop規(guī)定密碼文件必須存放在HDFS上珠月,并且權(quán)限必須是400,下面介紹如何創(chuàng)建密碼文件執(zhí)行job楔敌,使用的sqoop版本是版本是sqoop-1.4.6-cdh5.7.0桥温。
-
創(chuàng)建密碼文件并放置到HDFS
假設(shè)我的mysql密碼是123456:
echo -n "123456" > 118mysql.pwd
hadoop fs -rm /input/sqoop/pwd/118mysql.pwd
hadoop fs -put 118mysql.pwd /input/sqoop/pwd/
hadoop fs -chmod 400 /input/sqoop/pwd/118mysql.pwd
完成后可以通過hadoop fs -ls /input/sqoop/pwd查看:
-r-------- 3 root supergroup 6 2018-09-17 14:36 /input/sqoop/pwd/118mysql.pwd
-
檢查sqoop的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>
-
創(chuàng)建sqoop job
在創(chuàng)建job時(shí),使用--password-file參數(shù)
sqoop job --create torderincrementjob -- import \
--connect jdbc:mysql://172.16.*.*:3306/*?useCursorFetch=true \
--username * \
--password-file /input/sqoop/pwd/109mysql.pwd \
--target-dir /mysqldb/t_order \
--table t_order \
--fields-terminated-by "\t" \
--lines-terminated-by "\n" \
--null-string '\\N' \
--null-non-string '\\N' \
--incremental append \
--check-column id \
--last-value 1281 \
-m 1
-
執(zhí)行job
通過命令sqoop job -exec torderincrementjob執(zhí)行job
如果password文件格式錯(cuò)誤會(huì)有如下提示:
ERROR manager.SqlManager: Error executing statement: java.sql.SQLException: Access denied for user 'root'@'spark220' (using password: YES)
ERROR tool.ImportTool: Encountered IOException running import job: java.io.IOException: No columns to generate for ClassWriter at org.apache.sqoop.orm.ClassWriter.generate(ClassWriter.java:1652)