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用戶密碼

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章