hive從mysql導(dǎo)入數(shù)據(jù)量變多的解決方案
原始導(dǎo)數(shù)命令:
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’等分隔符,導(dǎo)入hive時(shí)默認(rèn)以’n’作換行符,導(dǎo)致hive中的記錄數(shù)變多。
解決方法:導(dǎo)入數(shù)據(jù)時(shí)加上--hive-drop-import-delims選項(xiàng),會(huì)刪除字段中的n,r,01。
最終導(dǎo)數(shù)命令:
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
補(bǔ)充:Sqoop導(dǎo)入MySQL數(shù)據(jù)到Hive遇到的坑
1.sqoop導(dǎo)入到HDFS1.1執(zhí)行sqoop job,會(huì)自動(dòng)更新last value
# sqoop 增量導(dǎo)入腳本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 參數(shù)是必須的,要不然第二次運(yùn)行job 會(huì)報(bào)錯(cuò),如下:
至此,sqoop job 已建設(shè)完畢!
2.Hive創(chuàng)建表,并讀取sqoop導(dǎo)入的數(shù)據(jù)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中時(shí)間的格式為timestamp,設(shè)置為date DB數(shù)據(jù)無法正常加載。
第一次全量加載,整條路線完全OK,hive表可以查詢到數(shù)據(jù)。
-----------------------重點(diǎn)分割線-----------------------
* sqoop lastmodified格式的增量加載,會(huì)將last-value 保存為job執(zhí)行的系統(tǒng)時(shí)間,若測(cè)試數(shù)據(jù)庫的check-column 小于當(dāng)前系統(tǒng)時(shí)間(即上一個(gè)job的last-value),則數(shù)據(jù)將不被加載。
如SId=6 就沒有被加載,遂改為今日時(shí)間(2018-12-26 17:05)進(jìn)行數(shù)據(jù)測(cè)試,數(shù)據(jù)成功被加載!喲呵!!
總結(jié):使用lastmodified格式,進(jìn)行sqoop增量導(dǎo)入時(shí),
1.注意--append的使用;
2.last-value為job運(yùn)行的系統(tǒng)時(shí)間,在數(shù)據(jù)測(cè)試時(shí),要保證數(shù)據(jù)的準(zhǔn)確,數(shù)據(jù)的自增長(zhǎng)。
3.一切皆有定數(shù),查看資料,準(zhǔn)確定位自己系統(tǒng)遇到的問題
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章:
1. MYSQL(電話號(hào)碼,身份證)數(shù)據(jù)脫敏的實(shí)現(xiàn)2. mysql啟動(dòng)時(shí)報(bào)錯(cuò) ERROR! Manager of pid-file quit without3. SQL Server根據(jù)查詢結(jié)果,生成XML文件4. sqlserver數(shù)據(jù)庫導(dǎo)入方法的詳細(xì)圖文教程5. SQL Server 2008通過端口1433連接到主機(jī)127.0.0.1的TCP/IP連接失敗6. Sql Server Management Studio連接Mysql的實(shí)現(xiàn)步驟7. MyBatis Plus 入門使用詳細(xì)教程8. sql server 2000無法打開1433端口9. 解決Mybatis中mapper的ID沖突問題10. 關(guān)于if exists的用法及說明
