繁体   English   中英

HBase大容量负载使用

[英]HBase bulk load usage

我正在尝试将一些HDFS数据导入到已经存在的HBase表中。 我创建的表具有2个列族,并且具有创建新表时HBase附带的所有默认设置。 该表已经充满了大量数据,并且具有98个在线区域。 它具有的行键的类型为(简化版本):2-CHARS_ID + 6-DIGIT-NUMBER + 3 X 32-CHAR-MD5-HASH。

密钥示例:IP281113ec46d86301568200d510f47095d6c99db18630b0a23ea873988b0fb12597e05cc6b30c479dfb9e9d627ccfc4c5dd5fef。

我要导入的数据在HDFS上,并且我正在使用Map-Reduce进程读取它。 我从我的映射器发出Put对象,该对象对应于从HDFS文件读取的每一行。 现有数据具有全部以“ XX181113”开头的键。 作业配置有:

HFileOutputFormat.configureIncrementalLoad(job, hTable)

开始该过程后,我看到它配置了98个reducer(等于表中的在线区域),但是问题是4个reducer会在其中拆分100%的数据,而其余的则什么都不做。 结果,我只看到4个文件夹输出,它们的大小非常大。 这些文件对应于我可以导入到表中的4个新regions吗? 如果是这样,为什么只创建4个,同时创建98个减速器? 阅读HBase文档

In order to function efficiently, HFileOutputFormat must be configured such that each output HFile fits within a single region. In order to do this, jobs whose output will be bulk loaded into HBase use Hadoop's TotalOrderPartitioner class to partition the map output into disjoint ranges of the key space, corresponding to the key ranges of the regions in the table.

关于我为什么得到这种行为,我更加困惑。

谢谢!

您将获得的地图数量并不取决于表中的区域数量,而是取决于如何将数据拆分为区域(每个区域都包含一个键范围)。 由于您提到所有新数据都以相同的前缀开头,因此很可能只适用于少数区域。 您可以预先拆分表格,以便将新数据划分到更多区域中

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM