试图将超过32个hfiles加载到一个区域的一个系列中

时间:2014-07-25 07:34:40

标签: hadoop hbase

我正在将大量文件导入HBase表,因此我决定使用批量加载9.8. Bulk Loading。我已经设法通过MapReduce作业准备数据,但是当我尝试使用此命令完成加载时

hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles <src> <target_table>

我收到了以下错误:

ERROR mapreduce.LoadIncrementalHFiles: Trying to load more than 32 hfiles to family d of region with start key
Exception in thread "main" java.io.IOException: Trying to load more than 32 hfiles to one family of one region
        at org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles.doBulkLoad(LoadIncrementalHFiles.java:288)
        at org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles.run(LoadIncrementalHFiles.java:842)
        at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
        at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:84)
        at org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles.main(LoadIncrementalHFiles.java:847)

您知道如何更改每个家庭和地区的hfiles数量。可以从CLI更改它吗?

3 个答案:

答案 0 :(得分:4)

您可以在hbase-site.xml文件中配置“hbase.hregion.max.filesize”,也可以在-D参数中配置更高的值(可能根据您输入的文件大小),以便创建的hfiles数量会减少。 默认值为10 GB

或者你可以在hbase-site.xml中配置“hbase.mapreduce.bulkload.max.hfiles.perRegion.perFamily”或在-D参数中配置更高的值(到最大值为列族创建的hfiles可以从HDFS中找到。 默认值为32

答案 1 :(得分:1)

@ ashish的回答是正确的。要在shell中使用它,请尝试:

hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles -Dhbase.mapreduce.bulkload.max.hfiles.perRegion.perFamily=1024 <SOURCE> <TABLE>

答案 2 :(得分:0)

你检查过这个吗? https://hbase.apache.org/xref/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.html

 public static final String MAX_FILES_PER_REGION_PER_FAMILY = "hbase.mapreduce.bulkload.max.hfiles.perRegion.perFamily";

 maxFilesPerRegionPerFamily = conf.getInt(MAX_FILES_PER_REGION_PER_FAMILY, 32);

您可以尝试使用要传递给作业的Configuration对象来更改此属性。