我正在将大量文件导入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更改它吗?
答案 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)
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对象来更改此属性。