1、创建orc表并导入mysql数据
脚本文件如下:(必须这样写,一行参数,一行值)
import
--connect
jdbc:mysql://node2:3306/sqoop
--username
root
--password
root
--query
'select * from test_1 where id<5 and $CONDITIONS'
--fields-terminated-by
','
--create-hcatalog-table
--hcatalog-database
tkdw
--hcatalog-table
a_1
--hcatalog-partition-keys
createtime
--hcatalog-partition-values
20190501
--hcatalog-storage-stanza
'stored as orc tblproperties ("orc.compress"="ZLIB")'
-m
1
执行脚本:
./sqoop --options-file test.txt
2、增量导入数据,目前(1.4.7)不支持orc格式,只能一般存储格式
$CONDITIONS 固定写法,必须有,如果设置多个m执行,必须设置上- -split-by
参数指定根据哪一列来实现哈希分片,从而将不同分片的数据分发到不同 map 任务上去跑,避免数据倾斜。
参考https://blog.csdn.net/whdxjbw/article/details/81079746
import --connect jdbc:mysql://node2:3306/sqoop \
--username root \
--password root \
--query 'select * from test_1 where $CONDITIONS' \
-m 1 \
--fields-terminated-by ',' \
--target-dir /sqoop/ \
--incremental append \
--check-column id \
--last-value 0 \
--hive-import \
--hive-database tkdw \
--hive-table hive_test_sqoop_orc123
增量抽取,需要指定--incremental append,同时指定按照源表中哪个pk字段进行增量--check-column equipmentid,并指定hive表中pk当前最大值--last-value 1893。创建sqoop job的目的是,每次执行job以后,sqoop会自动记录pk的last-value,下次再执行时,就会自动指定last-value,不需要手工去改了
原文:https://blog.csdn.net/xiaolong_4_2/article/details/82111158
1、创建job sqoop job --create fdc_equipment_job
3、 执行sqoop job
sqoop job --exec fdc_equipment_job
如果创建的job有问题,可以删除再重新创建:
sqoop job --delete fdc_equipment_job
4、 定时执行sqoop job
首先创建一个.sh的程序,然后通过crontab –e,创建定时执行程序
crontab -e
30 0 * * 1 /home/root/fdc/equipment_sqoop.sh >> /home/root/fdc/equipment.log 2>&1
crontab -e
*/20 * * * * /usr/sbin/ntpdate 1.cn.pool.ntp.org #每隔20分钟同步一下时间
10 7 * * * /sbin/service jenkins stop #每天7点10分停止jenkins
20 8 * * * /sbin/service jenkins start #每天8点20分起动jenkins
1 */3 * * * sh /tmp/maqingbin/clearDisk.sh #每3分钟1秒 执行一下clearDisk.sh脚本
常见问题:https://blog.csdn.net/zhangbcn/article/details/83014437
(1)、hive的hive-site.xml需要放到sqoop的conf下
(2)、ERROR Could not register mbeans java.security.AccessControlException: access denied ("javax.management.MBeanTrustPermission" "register")
https://blog.csdn.net/xuhao1233344/article/details/79992983
java 的安全策略问题:找到jre包, /Java/jre/lib/security 包下面的 java.policy 文件,编辑他,加上如下 代码
3、sqoop从db2导入到hive,2种方案
(1)、先导入导临时表,再导入导分区表
导入临时表,可以构建sqoop job,跑定时增量导入。
然后再insert到hive的目标表(orc,可以指定压缩)表。
(2)、使用hcatalog,在sqoop1.4.4以后才有,直接导入到分区orc表
增量导入:按月导入,一个月一个分区,到时候修改sqoop脚本的查询db2的sql和hive的分区即可。
sqoop只能指定静态分区。
4、sqoop job
(1)、创建sqoop job
./sqoop job \
--create sqoop_job_1 \
-- import \ # 这里-- 和 import 有个空格
--connect jdbc:mysql://node2:3306/sqoop \
--username root \
--password root \
--query 'select * from test_1 where $CONDITIONS' \
-m 1 \
--fields-terminated-by ',' \
--target-dir /sqoop/ \
--incremental append \
--check-column id \
--last-value 0 \
--hive-import \
--hive-database tkdw \
--hive-table test_inc_1
多个map需要配置split一起使用
(2)、执行sqoop job
./sqoop job --exec sqoop_job_name
# 此时输入的密码是db2的密码
(3)、删除sqoop job
./sqoop job --delete sqoop_job_name
(4)、查看sqoop job
./sqoop job --list
./sqoop job --show sqoop_job_name # 此时输入的密码是linux用户密码