一、介绍
我在这里阐述一下自己对sqoop job的简答理解:创建sqoop job可以将原来的sqoop提交作业代码固化,只需要创建一次,不需要每次运行时都输入过长的代码,便于重复地调用。
二、前提条件
我进行测试用的sqoop是1.4.7版本的。(这里特别提一下:1.4.6版本的可能不支持增量的导入一些功能)配置了hadoop 2.3.0版本的集群。
三、配置
1. 在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>
2. 编写mysql的密码文件,并上传到hdfs上
- 在liunx本地创建mysql密码文件:
#echo –n “Root123@” > sqoop.pwd
注意:文件个是必须正确。 - 上传密码文件到hdfs上:
#hdfs dfs –put sqoop.pwd /sqoop/ - 将hdfs上的密码文件设置权限为400,必须为400:
hdfs dfs –chmod 400 /sqoop/sqoop.pwd - 确定是否设置权限成功:
#hdfs dfs –ls /sqoop/sqoop.pwd
四、常用的sqoop job命令
1. 创建sqoop job任务
这里使用–password-file代替–password就是读取之前上传到hdfs上的密码文件来连接mysql。
sqoop job --create sqoopJobName -- import \
--connect jdbc:mysql://bigdata1:3306/*?useCursorFetch=true \
--username root \
--password-file /sqoop/sqoop.pwd \
--target-dir /mysqldb/t_order \
--table t_order \
--fields-terminated-by "\001" \
--incremental append \
--check-column id \
--last-value 0 \
-m 1
扩展:上面代码使用的是增量导入,使用sqoop job这种方法,在进行增量导入后就会记忆你的last-value的值,这样你下次运行时就不需要手动更新last-value的值。
2. 查看sqoop job
sqoop job -list
3. 删除sqoop job
sqoop job -delete sqoopJobName
4. 运行sqoop job
sqoop job -exec sqoopJobName
注意:sqoop job在没有使用密码文件时,运行sqoop job就会在过程中输入要连接数据库的密码,即使在sqoop job中已经有了—password Root123@这样的配置,还是要求你输入。所以就要按照上面配置免密运行。
五、测试时遇到的错误
在测试job –exec时,我遇到了关于缺少js相关jar包的异常。解决的办法就是在sqoop的lib目录下加入相应的jar包即可。Jar包下载地址:http://www.java2s.com/Code/Jar/j/Downloadjavajsonjar.htm