sqoop在创建job时,使用–password-file参数,可以避免输入mysql密码,如果使用–password将出现警告,并且每次都要手动输入密码才能执行job,sqoop规定密码文件必须存放在HDFS上,并且权限必须是400,下面介绍如何创建密码文件执行job,使用的sqoop版本是版本是sqoop-1.4.6-cdh5.7.0。
创建密码文件并放置到HDFS
假设我的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>
创建sqoop job
在创建job时,使用–password-file参数
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
执行job
通过命令sqoop job -exec torderincrementjob执行job
如果password文件格式错误会有如下提示:
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)