sqoop导入mysql数据到hive表

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用户密码

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值