Sqoop Job 应用(二)
问:在看了 Sqoop Job 应用(一) 后应该对sqoop job有一定的认识了,但是实际业务中我们肯定不会每次都手动执行sqoop脚本,更不会盯着去输入数据库密码,那怎么办呢?
答:用调度器。之前的文章提到过用oozie调度sqoop,本文介绍用crontab
0.重点说明
a.省略输入密码要将之前的 –passowrd 换成 –password-file,后面跟hdfs上的密码文件
b.将密码写入文件并上传到hdfs,权限设置为400,命令如下
echo -n "pasword" > mysql_pwd
hdfs dfs -put mysql_pwd /testdata/pwd/mysql_pwd
hdfs dfs -chmod 400 /testdata/pwd/mysql_pwd
c.设置 sqoop-site.xml 中 sqoop.metastore.client.record.password 为 true
d.如果报错 ERROR manager.SqlManager: Error executing statement: java.sql.SQLException: Access denied for user 'root'@'deptest1' (using password: YES),则是你的mysql数据库密码有问题。我遇到一个天坑,我用echo命令将密码追加到文件后,密码改变了,来回折腾很多次才解决。发现时密码中有特殊字符,所以小朋友们一定要注意,出现该错误一定要来回检查mysql的密码,密码不行就换一个密码吧(我是这个干的,哈哈)
<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)
sqoop job \
--create job01_test \
-- \
import \
--connect jdbc:mysql://deptest23:3306/test_data \
--username root \
--password-file /testdata/pwd/mysql_pwd \
--table mysql_stu_info \
--split-by age \
--delete-target-dir \
--hive-drop-import-delims \
--hive-import \
--hive-overwrite \
--hive-database test_data \
--hive-table stu_info \
--fields-terminated-by '\t' \
-m 6
2.crontab 定时任务
如果你的电脑没有crontab,需要先安装,不会安装的找运维小哥哥
sudo crontab -uhadoop -e
* 1 * * * sqoop job --exec job01_test #每日凌晨1点跑任务