Hbase數據IO

場景及方案分析

場景1:logs --> HBase

  • logs -> flume -> hfile -> import -> HBase (實時)
  • csv導入HBase 使用hive 做爲臨時表csv導入HBase
  • tsv導入HBase 直接import 方式1

場景2:RDBMS --> HBase

  • RDBMS -> sqoop -> Hfile -> import -> HBase (非實時) 方式1
  • RDBMS -> JDBC -> Put API -> HBase (實時較高,純手寫,較經常使用,由於須要過濾處理) 方式3
  • RDBMS -> Stome -> HBase (實時)
  • RDBMS -> Spark -> HBase (實時)

場景3:集羣性能測試

  • 本身寫多線程併發程序(),測試讀寫速度

場景4:HBase -> RDBMS

三種方式

1.Using the HBase Put API

使用Put API import,缺點:數據保存在內存中,大數據量處理速度慢,數據缺乏過濾api

HADOOP_CLASSPATH=`$HBASE_HOME/bin/hbase mapredcp` \
$HADOOP_HOME/bin/yarn jar \
$HBASE_HOME/lib/hbase-server-1.2.0-cdh5.12.0.jar \
importtsv \
-Dimporttsv.columns=HBASE_ROW_KEY,info:name,info:sex,info:age \
user_from_tsv \
/user/cen/data/hbase_import_user.tsv

2.Using the HBase bulk load tool

使用MapReduce存儲成HBase底層文件,優勢,減小HBase集羣插入壓力(不通過插入),下降Job集羣時間提升運行速度多線程

# 跟上述命令不用的是,這個導入並不會將數據導入到HBase而是到一個指定的文件夾
# 使用import生成Hfile文件到HDFS,底層經過MapReduce(只有Map)實現
HADOOP_CLASSPATH=`$HBASE_HOME/bin/hbase mapredcp`:${HBASE_HOME}/conf \
$HADOOP_HOME/bin/yarn jar \
$HBASE_HOME/lib/hbase-server-1.2.0-cdh5.12.0.jar \
importtsv \
-Dimporttsv.columns=HBASE_ROW_KEY,info:name,info:sex,info:age \
-Dimporttsv.bulk.output=/user/cen/hbase/hfileoutput \
user_from_tsv_bulk \ 
/user/cen/data/hbase_import_user.tsv

# 加載數據(非MapReduce),至關於移動數據
HADOOP_CLASSPATH=`$HBASE_HOME/bin/hbase mapredcp`:${HBASE_HOME}/conf \
$HADOOP_HOME/bin/yarn jar \
$HBASE_HOME/lib/hbase-server-1.2.0-cdh5.12.0.jar \
completebulkload \
/user/cen/hbase/hfileoutput \
user_from_tsv_bulk

3.Using a customized MapReduce job

自定義 MapReduce Job 優勢:史無前例的自由度,缺點:我有一句mmp不知當講不當講併發

a.mapreduce

csv -> hfile

b.bulk load

hfile -> table

bulk_load_API

相關文章
相關標籤/搜索