Hbase作为Hadoop生态体系当中备受重用的数据库,常常需要从外部的数据源进来数据导入,涉及到比较大规模的数据,就需要进行批量导入操作,对比Hbase也有几种解决方案。今天的大数据开发分享,我们就主要来讲讲,Hbase数据批量导入怎么做?

HBase目前常用的数据导入方式有三种:
①使用HBase原生Client API。
②使用HBase提供的TableOutputFormat,原理是通过一个Mapreduce作业将数据导入HBase。
③使用Bulk Load方式:原理是使用MapReduce作业以HBase的内部数据格式输出表数据,然后直接将生成的HFile加载到正在运行的HBase中。
Hbase数据导入的方式对比
前两种方式:需要频繁的与数据所存储的RegionServer通信,一次性导入大量数据时,可能占用大量Regionserver资源,影响存储在该Regionserver上其他表的查询。
第三种方式:HBase在HDFS中是以HFile文件结构存储的,一个比较高效便捷的方法就是先生成HFile,再将生成的HFile加载到正在运行的HBase中。即使用HBase提供的HFileOutputFormat2类或者importtsv工具来完成上述操作。
通常来说,在数据量很大的情况下,使用第三种方式(Bulk Load)更好。占用更少的CPU和网络资源就实现了大数据量的导入。
Hbase Bulk Load数据导入
Bulk Load方式之所以高效,是因为绕过了正常写数据的路径(WAL、MemStore、flush)。
Bulk Load方式使用MapReduce作业以HBase的内部数据格式输出表数据,然后直接将生成的HFiles加载到正在运行的HBase中。与仅使用HBase API相比,使用Bulk Load方式不占用Region资源,不会产生巨量的写入I/O,将使用更少的CPU和网络资源。
HBase Bulk Load过程包括两个主要步骤:
将准备的数据生成HFile:使用importtsv工具将数据转化为HFile,或者通过HBase提供的HFileOutputFormat2类编写MapReduce程序。
将HFile导入到HBase中:使用LoadIncrementalHFiles或者completebulkload将HFile导入到HBase中。
1、将准备的数据生成HFile
将数据生成HFile,有两种方式,分别是:
通过HBase提供的HFileOutputFormat2类编写MapReduce程序来生成HFile。
使用importtsv工具将TSV格式数据转换为HFile,自动生成MapReduce任务。
importtsv是一个实用工具,它将TSV格式的数据加载到HBase中。它有两种用法,分别为:
importtsv工具默认使用HBase put API导入数据,将数据从HDFS中的TSV格式直接加载到HBase的MemStore中。非Bulk Load方式,比较占用集群资源,不建议在处理大数据量时使用。
hbase org.apache.hadoop.hbase.mapreduce.ImportTsv-Dimporttsv.columns=a,b,c<tablename><hdfs-inputdir>
Bulk Load方式,当使用选项-Dimporttsv.bulk.output时,将会先生成HFile文件的内部格式的文件,这时并不会写数据到HBase中。建议使用√
hbase org.apache.hadoop.hbase.mapreduce.ImportTsv-Dimporttsv.columns=a,b,c-Dimporttsv.bulk.output=hdfs://storefile-outputdir<tablename><hdfs-data-inputdir>
注意:使用importtsv-Dimporttsv.bulk.output选项时,如果目标表尚不存在,则将使用默认列族描述符创建目标表。如果准备了大量数据要进行Bulk Load,请确保对目标HBase表进行适当的预分区,也就是预先创建多个Region,避免热点与数据倾斜问题。
2、完成数据加载,将HFile加载到HBase中
completebulkload工具用于将数据导入正在运行的HBase中。此命令行工具遍历准备好的数据文件(HFile),确定每个HFile所属的Region,然后联系相应的RegionServer将HFile移入其存储目录并将数据供客户端使用。
如果在Bulk Load准备过程中或在准备和完成步骤之间Region边界已更改,则completebulkload工具会自动将HFile拆分为与新边界对应的部分。此过程效率不高,因此用户应尽量减少准备HFile与将HFile加载到HBase中这两步骤之间的时间延迟,尤其是在其他客户端通过其他方式同时加载数据时也要注意。
将HFile加载到HBase中有两种方式:
LoadIncrementalHFiles
hbase org.apache.hadoop.hbase.tool.LoadIncrementalHFiles<hdfs://storefileoutput><tablename>
completebulkload
export HBASE_HOME=/usr/hdp/{hdp-version}/hbase
HADOOP_CLASSPATH=`${HBASE_HOME}/bin/hbase classpath`${HADOOP_HOME}/bin/hadoop jar${HBASE_HOME}/lib/hbase-mapreduce-{version}.jar completebulkload<hdfs://storefileoutput><tablename>
关于大数据开发,Hbase数据批量导入怎么做,以上就为大家做了简单的介绍了。Hbase做数据导入,建议是需要根据原始数据和具体的场景需求来做,大批量的数据,往往建议 Bulk Load方式。
















