需求。如何把hdfs的数据转入hbase? datax?spark?flink?
不不不,直接用hbase自带的命令即可。参考 http://hbase.apache.org/2.2/book.html
前提。hdfs存储格式为text
hbase数据为 列族 是0 列名是ou_code ou_level
1把数据放到hdfs上去。这个如果你的表存储格式为text直接用存储目录也行
二将文件转化为hfile
hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.columns=HBASE_ROW_KEY,0:ou_code,0:ou_level -Dimporttsv.bulk.output=/user/devuser/warehouse/cc_test_load_hbase/output jl:test_load /user/devuser/warehouse/cc_test_load_hbase/input/test_load_hbase
说明
importtsv.columns 是hbase的rowkey 列族列名 第一个默认是rowkey
output 不能存在否则报错
jl:test_load hbase名称空间jl和表明test_load 名称空间不能少
/user/devuser/warehouse/cc_test_load_hbase/input/test_load_hbase hdfs文件
注意!!! 不要随便加空格0:ou_code ,0:ou_level例如这里有个空格 他会把后面level 认为是另一个参数 也就是名称空间。会报个名称空间非法错误
然后区分中英空格hbase org.apache.hadoop.hbase.mapreduce.ImportTsv 这里当时搞了个中文空格 linux 看又看不出来 一直报命令没找到还是啥的。
会采用mr的形式将格式转化为hfile 到输出目录
加载数据到hbase
$ bin/hbase org.apache.hadoop.hbase.tool.LoadIncrementalHFiles <hdfs://storefileoutput> <tablename>
hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles /user/devuser/warehouse/cc_test_load_hbase/output jl:test_load
查询HBASE数据,发现数据已经到了
——————————————————————————————————————————————————————————————————————————————————————————
最后说下为啥要用这个命令转化
根据大佬说法。
这个命令是属于直接将hdfs文件转化为hbase的存储文件,不经过hbase的regionserver,不会影响hbase的查询和写入性能。
如果你使用hbase 读hive和写hbase的方法,1会影响hive的读,2会影响hbase的写性能,明显没有上面的好。