往 HBase 导入数据的几种操作
文章目录
一、前言
二、利用ImportTsv将csv文件导入到HBase
三、利用completebulkload将数据导入到HBase
四、利用Import将数据导入到HBase
一、前言
HBase作为Hadoop DataBase,除了使用put进行数据导入之外,还有以下几种导入数据的方式:
(1)使用importTsv功能将csv文件导入HBase;
(2)使用import功能,将数据导入HBase;
(3)使用BulkLoad功能将数据导入HBase。
二、利用ImportTsv将csv文件导入到HBase
simple.csv内容如下:
1 2 3 4 5 |
1,"Tony" 2,"Ivy" 3,"Tom" 4,"Spark" 5,"Storm" |
创建文件
1 2 3 4 5 6 |
[root@hadoop1 datamove]# vim simple.csv 1,"Tony" 2,"Ivy" 3,"Tom" 4,"Spark" 5,"Storm" |
格式:
1 |
hbase [类] [分隔符] [行键,列1,列2...] [表] [导入文件] |
命令:
1 2 |
bin/hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator="," -Dimporttsv.columns=HBASE_ROW_KEY,cf:data hbase-table-name /csv-file-name.csv |
上传文件
1 2 3 4 |
[niit@niit01 data]$ hdfs dfs -put simple.csv /input/ [niit@niit01 data]$ hdfs dfs -ls /input/ Found 1 items -rw-r--r-- 1 niit supergroup 45 2022-11-04 09:08 /input/simple.csv |
创建表
1 2 3 |
hbase(main):001:0> create 'tb1','cf' 0 row(s) in 3.1120 seconds => Hbase::Table - tb1 |
执行mapreduce
1 |
[niit@niit01 hbase]$ $ bin/hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator=, -Dimporttsv.columns=HBASE_ROW_KEY,cf:data tb1 /input/simple.csv |
查看是否成功导入
1 2 3 4 5 6 7 8 |
hbase(main):003:0> scan 'tb1' ROW COLUMN+CELL 1 column=cf:data, timestamp=1436152834178, value="Tony" 2 column=cf:data, timestamp=1436152834178, value="Ivy" 3 column=cf:data, timestamp=1436152834178, value="Tom" 4 column=cf:data, timestamp=1436152834178, value="Spark" 5 column=cf:data, timestamp=1436152834178, value="Storm" 5 row(s) in 0.1490 seconds |
三、利用completebulkload将HFile格式数据导入到HBase
HBase支持bulkload的入库方式,它是利用hbase的数据信息按照特定格式存储在hdfs内这一原理,直接在HDFS中生成持久化的HFile数据格式文件,然后上传至合适位置,即完成巨量数据快速入库的办法。配和mapreduce完成,高效便捷,而且不占用region资源,增添负载,在大数据量写入时,能极大的提高写入效率,并降低对HBase节点的写入压力。
通过使用先生成HFile,然后再BulkLoad到HBase的方式来替代之前直接调用HTableOutputFormat的方法有如下的好处:
1、消除了对HBase集群的插入压力
2、提高了Job的运行速度,降低了Job的执行时间
利用completebulkload将数据导入到HBase
1、先通过lmportTsv生成HFile
将csv导入为hfile文件
1 |
bin/hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator=, -Dmapreduce.map.speculative=false -Dmapreduce.reduce.speculative=false -Dimporttsv.skip.bad.lines=true -Dimporttsv.bulk.output=/output/hfile-tmp -Dimporttsv.columns=HBASE_ROW_KEY,cf:data tb2 /input/simple.csv |
以上的指令,它会主动创建表tb2和文件夹hfile-tmp(此文件夹必须不能事先存在)。
1 2 3 4 |
[niit@niit01 hbase]$ hdfs dfs -ls -R /output/hfile-tmp -rw-r--r-- 1 niit supergroup 0 2022-11-04 10:12 /output/hfile-tmp/_SUCCESS drwxr-xr-x - niit supergroup 0 2022-11-04 10:12 /output/hfile-tmp/cf -rw-r--r-- 1 niit supergroup 5141 2022-11-04 10:12 /output/hfile-tmp/cf/5179350ee60b40cf9fe9a3c51c682a2a |
将hfile数据以增量的方式导入表 tb2, 对应的hfile也会被移动到相应的hbase表的目录下
1 |
[niit@niit01 hbase]$ bin/hbase org.apache.hadoop.hbase.tool.LoadIncrementalHFiles /output/hfile-tmp tb2 |
验证
1 2 3 4 5 6 7 8 9 |
hbase(main):003:0> scan 'tb2' ROW COLUMN+CELL 1 column=cf:data, timestamp=1667527923246, value="Tony" 2 column=cf:data, timestamp=1667527923246, value="Ivy" 3 column=cf:data, timestamp=1667527923246, value="Tom" 4 column=cf:data, timestamp=1667527923246, value="Spark" 5 column=cf:data, timestamp=1667527923246, value="Storm" 5 row(s) Took 0.0541 seconds |
四、利用Import将Sequence File格式的数据导入到HBase
1、HBase export工具导出的数据的格式是sequence file。
比如,在执行完命令bin/hbase org.apache.hadoop.hbase.mapreduce.Export
之后,hbase会启动一个MapReduce作业,作业完成后会在hdfs上面会生成sequence file格式的数据文件。
2、对于这类Sequence file格式的数据文件,HBase是可以通过Import工具直接将它导入到HBase的表里面的。
将数据导出到hdfs中, 格式为sequence file,
1 |
[niit@niit01 hbase]$ bin/hbase org.apache.hadoop.hbase.mapreduce.Export tb2 /output/test |
创建新表
1 2 3 |
hbase(main):010:0> create 'tb3','cf' 0 row(s) in 0.4290 seconds => Hbase::Table - tb3 |
导入到hbase (导入后, 源sequence file仍然存在, 如需删除需要手动删除)
1 |
[root@hadoop1 lib]# hbase org.apache.hadoop.hbase.mapreduce.Import tb3 /output/test |
验证
1 2 3 4 5 6 7 8 |
hbase(main):011:0> scan 'tb3' ROW COLUMN+CELL 1 column=cf:data, timestamp=1436152834178, value="Tony" 2 column=cf:data, timestamp=1436152834178, value="Ivy" 3 column=cf:data, timestamp=1436152834178, value="Tom" 4 column=cf:data, timestamp=1436152834178, value="Spark" 5 column=cf:data, timestamp=1436152834178, value="Storm" 5 row(s) in 0.0580 seconds |
Views: 459