我使用HFileOutputFormat将CSV文件批量加载到hbase表中。我只有map.setNumReduceTasks(0)的map和no reduce任务。但我可以看到减速器在工作中运行,这个减速器是否因为HFileOutputFormat而启动? 以前我使用TableOutputFormat进行相同的工作,从来没有运行reducer。我最近重构了map任务以使用HFileOutputFormat,但现在在这个更改之后,我可以看到一个reducer正在运行。
其次我在reducer中得到以下错误,我之前没有使用TableOutputFormat,这是否与HFileOutputFormat有关?
错误:java.lang.ClassNotFoundException:com.google.common.base.Preconditions
答案 0 :(得分:2)
HFileOutputFormat确实启动了(对于HFiles必要的)reduce任务。
出现错误Hadoop需要Google的Guava库才能生成HFile。让Hadoop找到此库的最简单方法是将其从$HBASE_HOME/lib/
复制到$HADOOP_HOME/lib/
。寻找guava-<version>.jar
。
答案 1 :(得分:0)
是的,即使我们将Reducers的数量设置为零,HFileOutputFormat也会启动一个reducer任务来对mapper输出进行排序和合并,以使该文件与HTable兼容。 reducer的数量等于HBase表中的区域数
通过MapReduce作业here
找到准备HBase批量加载数据的示例代码