——本文非本人原創,為公司同事整理,發布至此以便查閱
一、入庫前數據準備
1、入hbase詳細要求及rowkey生成規則,參考文檔“_入HBase庫要求 20190104.docx”。
2、根據標準庫中的數據,生成帶有rowkey的視圖。
參照159數據庫hubei_std用戶下的p_getRowKey1存儲過程,生成該用戶下 所有表帶有rowkey的視圖。
注:運行存儲過程時,需傳入醫院編碼和采集次數。
3、在進行正式入庫前,先以醫院編碼在hbase中建立命名空間(hbase shell 進 入命令界面):
create_namespace 'HB1'
4、在該命名空間下建立所有標準表的表名,如:
列族名稱參照“入hbase統計表.xlsx”
create 'HB1:inp_orders’, 'f', SPLITS=>['e','i','m','q','u']
HB1:命名空間
Inp_orders:標準表名
f:列族
SPLITS:分區
注:建表時,與標準表名一致。
5、操作完以上步驟以后,開始進行入庫操作。
二、入庫開始
1、需先將oracle的ojdbc6.jar放入到該目錄:
/opt/cloudera/parcels/CDH-5.12.0-1.cdh5.12.0.p0.29/lib/sqoop/lib
2、sqoop連接到oracle數據庫:
sqoop list-tables --connect jdbc:oracle:thin:@172.16.0.159:1521:orcl --username hubei_std --password hubei_std 若連接成功,則顯示hubei_std下的表。
3、將之前生成的視圖的數據,導入hbase
sqoop import --append --connect jdbc:oracle:thin:@172.16.0.159:1521:orcl --username hubei_std --password hubei_std -m 1 --table INPBILLDETAIL --columns ID,NAME,AGE --hbase-create-table --hbase-table HB1:inp_bill_detail --hbase-row-key ROWKEY --column-family f
-m 1:指定1個map進行入庫操作,若大于1,則需在該語句后加上--split-by column(column是指定oracle的源表按該字段進行分割,如指定列為 PATIENT_ID,m指定為2的話,則將PATIENT_ID的值均分2份進行入庫)。
--append:如有該參數,則可以不指定--columns 參數。
--hbase-create-table:如已在hbase中建表,則可以不指定該參數。
--hbase-row-key:指定源表中,哪一列為rowkey
注:--hbase-table 參數,需在表名前加上命名空間
三、入庫完成核對
1、核對入庫條數是否正確:
hbase org.apache.hadoop.hbase.mapreduce.RowCounter ‘HB1:
pat_visit_master’
2、查看數據情況(兩條記錄):
get_table(‘HB1:pat_visit_master’).scan LIMIT=>2
3、進入CDM管理界面,在hue中查看數據情況:
Hue-->Web UI-->主菜單-->HBase-->進入對應的表看數據
4、入Hbase完成后大小對比:
湖北:
oracle:28.84G
Hbase:177.11G
查詢方法:
Oracle:select sum(bytes)/1073741824 from user_segments
Hbase:hadoop fs -ls /
hadoop fs -ls /hbase
hadoop fs -ls /hbase/data
hadoop fs -ls /hbase/data/HB1
hadoop fs -du -h /hbase/data/HB1/
5、將入完hbase的數據拷貝到szyl命名空間下:
su hdfs
hbase org.apache.hadoop.hbase.mapreduce.CopyTable--new.name=
szyl:inp_orders HB1:inp_orders
四、入庫速度
1、以湖北省腫瘤inp_orders表為實驗表,該表31097227條記錄:
1、-m 1 用時:1973秒,速度15761.39條/秒
2、-m 2 用時:5006秒,速度6211.99條/秒
以湖北省腫瘤inp_bill_detail表為實驗表,該表113271245條記錄:
1、-m 1 用時:8926秒,速度12690.03條/秒
2、-m 3 用時:9012秒,速度12568.93條/秒
inp_bill_detail:113271245條
inp_orders:31097227
pat_visit_master:273300
inp_settle_master:283025
2、開封市腫瘤數據入hbase:
exam_master:41630
exam_report:24336
his_cells:3833
his_organization:4208
inp_bill_detail:14385379
inp_orders:6024317
inp_settle_master:41830
lab_result:764482
五、遇到問題
1、在導入數據時,設定-m為3,則只有一個map執行,導入的數據量只有總數 據的三分之一,另外兩個map不執行:
sqoop import --append --connect jdbc:oracle:thin:@172.16.0.159:1521:orcl --username hubei_std --password hubei_std -m 3 --table INPBILLDETAIL --hbase-table HB1:inp_bill_detail --hbase-row-key ROWKEY --column-family f --split-by PATIENT_ID
在指定--split-by參數時,不能指定虛列如:rownum 建議指定主鍵或唯一鍵
2、在創建表時,防止寫成以下語句:
create ‘HB1:pat_visit_master’,’p’,SPLIT=[‘e’,’i’,’m’,q’,’u’]
create ‘HB1:pat_visit_master’,’p’,SPLITS=[‘e’,’i’,’m’,’q’,’u’]
以上兩種寫法,會將分區當成列族建在表中。
六、常用命令
1、刪除命名空間:
drop_namespace ‘HB1’
2、查看命名空間:
describe_namespace ‘HB1’
3、列出所有命名空間:
list_namespace
4、查看命名空間下的所有表:
list_namespace_tables ‘HB1’
5、刪除表:
disable ‘HB1:inp_orders’
drop ‘HB1:inp_orders’
6、刪除表多的所有記錄:
truncate ‘HB1:inp_orders’
7、查看表結構:
desc ‘HB1:inp_orders’
8、查詢表數據:
scan ‘HB1:inp_orders’
9、查詢現在執行的job:
hadoop job -list
浙公網安備 33010602011771號