HBase本身提供了很多種數據導入的方式,通常有兩種常用方式:
1、使用HBase提供的TableOutputFormat,原理是通過一個Mapreduce作業將數據導入HBase
2、另一種方式就是使用HBase原生Client API
這兩種方式由於需要頻繁的與數據所存儲的RegionServer通信,一次性入庫大量數據時,特別佔用資源,所以都不是最有效的。瞭解過HBase底層原理的應該都知道,HBase在HDFS中是以HFile文件結構存儲的,一個比較高效便捷的方法就是使用 “Bulk Loading”方法直接生成HFile,即HBase提供的HFileOutputFormat類
BULK LOADING:
HBase 支持BULK LOAD的入庫方式,它是利用HBase的數據信息按照特定格式存儲在HDFS內這一原理,直接在HDFS中生成持久化的HFile數據格式文件,然後上傳至合適位置,即完成巨量數據入庫的辦法。配合mapreduce完成,高效便捷,而且不佔用region資源,增添負載,在大數據量寫入時可以極大的提高寫入效率,並降低對HBase節點的寫入壓力。
將hdfs://BPF:9000/user/bpf/hbase/下的數據以bulk load的方式先生成Hfile到hdfs://BPF:9000/user/bpf/hbase/output
HADOOP_CLASSPATH=`${HBASE_HOME}/bin/hbase mapredcp`:${HBASE_HOME}/conf $HADOOP_HOME/bin/yarn jar ${HBASE_HOME}/lib/hbase-server-1.0.0-cdh5.5.0.jar importtsv -Dimporttsv.columns=HBASE_ROW_KEY,info:name,info:age,info:sex,info:address,info:phone -Dimporttsv.bulk.output=hdfs://BPF:9000/user/bpf/hbase/output student hdfs://BPF:9000/user/bpf/hbase/
完成將HFile裝載到數據庫
HADOOP_CLASSPATH=`${HBASE_HOME}/bin/hbase mapredcp` $HADOOP_HOME/bin/hadoop jar ${HBASE_HOME}/lib/hbase-server-1.1.12.jar completebulkload hdfs://master1:8020/user/master1/output student