公司近期搭建了hadoop集群,改造前后的體系架構如下:
?????? 從圖中可以看出用hive庫,替代了db2和td中的cdr層,也就是業務處理邏輯層,之后再把匯總數據抽取到db2和td,在此聊聊抽取到兩個庫中的用法。
??????? 由于本次抽取需要生成落地文件,所以并沒有用sqoop直接抽取到傳統的數據庫,而是采用insert?overwrite locat導出文件到本地系統,之后load裝載到db2
》抽取hive匯總層數據,生成文件
???? ? insert overwrite local在沒有設置hive配置的時,導出的文件是壓縮文件,所以這里需要添加配置,語法如下:
hive?-e?"set?mapred.job.queue.name=app;set?hive.exec.compress.output=false;set?hive.exec.compress.intermediate=false;insert?overwrite?local?directory?'/data8/demo'?row?format?delimited?fields?terminated?by?'^'??select?*?from?test_hive_table where?op_month= 201701 and?op_time= 20170111 and?op_hour= 2017011111 ;?"
??????? 其中生成了文件000000_0,定義生成的文件按照^分隔,所以采用:row?format?delimited?fields?terminated?by?'^'
??????? 在有安裝hive客戶端的crt上執行以上語法,會在本地文件目錄/data8/demo中把查詢語句的數據生成不壓縮文件,存儲到目錄中
???????? 注意查詢條件按照分區查詢,這樣比較快,因為在hadoop中存儲hdfs文件是按照分區建立的目錄
》把文件裝載到db2
db2文件導入:
db2?"load?client?from /data8/demo/000000_0of?del?modified?by?coldel0x5E?codepage=1208?fastparse?anyorder?warningcount?1?messages/data8/log/load.log?insert?into?gzdb.test_hive_table NONRECOVERABLE"
或者不生成db2日志裝載:
db2?"load?client?from /data8/demo/000000_0of?del?modified?by?coldel0x5E?codepage=1208?replace?into?gzdb.test_hive_table NONRECOVERABLE"
》td裝載
td采用公司封裝的命令,在此不與論述