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