hive從mysql導入數據量變多的解決方案
原始導數命令:
bin/sqoop import -connect jdbc:mysql://192.168.169.128:3306/yubei -username root -password 123456 -table yl_city_mgr_evt_info --split-by rec_id -m 4 --fields-terminated-by "\t" --lines-terminated-by "\n" --hive-import --hive-overwrite -create-hive-table -delete-target-dir -hive-database default -hive-table yl_city_mgr_evt_info
原因分析:可能是mysql中字段裡面有’\n’等分隔符,導入hive時默認以’n’作換行符,導致hive中的記錄數變多。
解決方法:
導入數據時加上–hive-drop-import-delims選項,會刪除字段中的\n,\r,\01。
最終導數命令:
bin/sqoop import -connect jdbc:mysql://192.168.169.128:3306/yubei -username root -password 123456 -table yl_city_mgr_evt_info --split-by rec_id -m 4 --hive-drop-import-delims --fields-terminated-by "\t" --lines-terminated-by "\n" --hive-import --hive-overwrite -create-hive-table -delete-target-dir -hive-database default -hive-table yl_city_mgr_evt_info
參考官方文檔:https://sqoop.apache.org/docs/1.4.7/SqoopUserGuide.html
補充:Sqoop導入MySQL數據到Hive遇到的坑
1.sqoop導入到HDFS
1.1執行sqoop job,會自動更新last value
# sqoop 增量導入腳本 bin/sqoop job --create sqoop_hdfs_test02 -- import \ --connect jdbc:mysql://localhost:3306/pactera_test \ --username root \ --password 123456 \ --table student \ --target-dir /user/sqoop/test002/ \ --fields-terminated-by "\t" \ --check-column last_modified \ --incremental lastmodified \ --last-value "2018-12-12 00:03:00" \ --append
說明:–append 參數是必須的,要不然第二次運行job 會報錯,如下:
至此,sqoop job 已建設完畢!
2.Hive創建表,並讀取sqoop導入的數據
create external table if not exists student_hive (SId int,Sname string ,Sage string,Ssex string , last_modified Timestamp) row format delimited fields terminated by '\t' location 'hdfs://node01:8020/user/sqoop/test002/';
註意:此處hive中時間的格式為timestamp,設置為date DB數據無法正常加載。
第一次全量加載,整條路線完全OK,hive表可以查詢到數據。
———————–重點分割線———————–
* sqoop lastmodified格式的增量加載,會將last-value 保存為job執行的系統時間,若測試數據庫的check-column 小於當前系統時間(即上一個job的last-value),則數據將不被加載。
如SId=6 就沒有被加載,遂改為今日時間(2018-12-26 17:05)進行數據測試,數據成功被加載!喲呵!!
總結:
使用lastmodified格式,進行sqoop增量導入時,
1.註意–append的使用;
2.last-value為job運行的系統時間,在數據測試時,要保證數據的準確,數據的自增長。
3.一切皆有定數,查看資料,準確定位自己系統遇到的問題
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。如有錯誤或未考慮完全的地方,望不吝賜教。
推薦閱讀:
- postgresql 實現數據的導入導出
- java實現往hive 的map類型字段寫數據
- 如何快速修改MySQL用戶的host屬性
- shell命令執行hive腳本(hive交互)
- sqoop export導出 map100% reduce0% 卡住的多種原因及解決