2014年9月30日 星期二

Import CSV file to HBASE(Using HBase Shell Command)

[Software]
    Hadoop2.4.1
    HBase 0.98.5
[Reference]
- http://www.openscg.com/2013/08/hadoop-hbase-tutorial/  (Operations)
- http://wiki.apache.org/hadoop/Hbase/Shell  (HBase shell command)


Input type:

14/09/15 18:20:35, Z00 B00 ,0050.50     ,0053.26     ,0053.45     ,1251.06     ,0291.25      ,FF     
14/09/15 18:20:35, Z00 B01 ,0053.50     ,0055.80     ,0056.03     ,1249.79     ,0357.45      ,FF     
.......

Table:

|         |  type   |                                               m1                                    |
------------------------------------------------------------------------------------
HBASE_ROW_KEY     | states      |   deg      |  high      |  heat      | lenght    |   avg      |char|
------------------------------------------------------------------------------------
14/09/15 18:20:35          | Z00 B00 | 0050.50 | 0053.26 | 0053.45 | 1251.06 | 0291.25 | FF |     
14/09/15 18:20:35          | Z00 B01 | 0053.50 | 0055.80 | 0056.03 | 1249.79 | 0357.45 | FF |   
.......

Step:
$hbase shell
> create 'log_data', 'type','m1'  //建立"log_data",其中包含兩個 column family, "type" and "m1"
> quit

$hbase org.apache.hadoop.hbase.mapreduce.ImportTsv '-Dimporttsv.separator=,' -Dimporttsv.columns=HBASE_ROW_KEY,type:states,m1:deg,m1:high,m1:heat,m1:length,m1:avg,m1:char log_data /user/hduser/test_log.csv

- org.apache.hadoop.hbase.mapreduce.ImportTsv 
執行 hbase-server-${version}-hadoop2.jar 中的 ImportTsv Class,這讓HBASE可以載入csv格式的data
- '-Dimporttsv.separator=,' 
讓HBase知道每行資料值的分隔界線為","
- -Dimporttsv.columns 
設定Columns Family(在hbase shell建立的'type'與'm1'),至少要有一個HBASE_ROW_KEY來當row key,
column格式則為 "columnfamilyname:columnname" ex: "m1:deg"
- log_data
此arg為input table name (即於hbase shell中建立的 "log_data")
- /user/hduser/test_log.csv
此arg為input file name ,對應位置為與HBASE連結的HDFS

$hbase shell
> scan 'log_data' // 查看輸入資料的table

[Future Work]
1. 尚未對完整log包含後面刪除欄位做輸入
2. 透過其他更簡便的介面或程式碼做Input

沒有留言:

張貼留言