Hadoop 将Mapreduce作业的Reducer输出写入单个文件

Hadoop 将Mapreduce作业的Reducer输出写入单个文件,hadoop,mapreduce,hbase,Hadoop,Mapreduce,Hbase,我已经为HBase中的数据编写了一个map reduce作业。它包含多个映射器和一个减速机。Reducer方法接收映射器提供的数据并对其进行分析。在HBase中所有数据的处理完成后,我想通过单个Reducer将数据写回HDFS中的文件。目前,每次我得到新的数据时,我都可以将数据写入HDFS,但最终无法确定如何将最终结论写入HDFS。因此,如果您试图将单个还原器的最终结果写入HDFS,您可以尝试以下任何一种方法- 使用Hadoop API文件系统的create()函数从reducer写入HDFS

我已经为HBase中的数据编写了一个map reduce作业。它包含多个映射器和一个减速机。Reducer方法接收映射器提供的数据并对其进行分析。在HBase中所有数据的处理完成后,我想通过单个Reducer将数据写回HDFS中的文件。目前,每次我得到新的数据时,我都可以将数据写入HDFS,但最终无法确定如何将最终结论写入HDFS。

因此,如果您试图将单个还原器的最终结果写入HDFS,您可以尝试以下任何一种方法-

  • 使用Hadoop API文件系统的create()函数从reducer写入HDFS
  • 在最终计算后,从reducer发出单个键和值
  • 重写Reducers cleanup()函数并在那里执行点(1)
  • 详情3:


    希望这有帮助。

    是否要将HBase表数据导出到HDFS文件?我正在使用Map Reduce作业并行读取数据。但我使用单减速机进行分析,最后将其写回HDFS。其中可能包含一些关于HBASE数据而不是元组的结论。请检查我是否发布了一个答案,如果有帮助的话。我不需要HDFS上的HBASE数据。我想对Reducer方法中的数据进行分析,所有结果的结论只需在最后一次处理后写入HDFS;这不是对你有好处吗?这将迫使一个减速机。我有同样的问题,但我必须做第二个选择。问题是我如何知道所有的任务是否都完成了?我试图查看Hadoop API,但找不到任何方法。你能指导我吗?我正在考虑覆盖输出文件,这是可行的解决方案吗?@Marco167:你使用的是单减速机吗?然后,您可能可以使用context.write()迭代这些值,计算所有内容,最后只向HDFS写入一次。谢谢,我也正是用同样的方法来完成的。但是由于变量是静态的,我无法获得所有任务何时完成,因此我可以使用context.write()编写最终的解决方案(在静态HashMap中传播)?我的意思是,是否有任何方法表明现在没有输入可供处理,所以打印最终结果?我想我无法解释我的问题。我道歉!事实上,我如何知道是否达到了最终计算?我的意思是,现在所有的数据都传递给了reducer。就像ReducerTaskCompleted()?是的,那太好了,那么我之前告诉你的一切都应该起作用。您的reducer有一个本地HashMap,在迭代reduce函数中接收的iterable对象时更新该HashMap。然后,当您完成迭代时,您只发射一次。伪代码:
    reduce(Key-Key,Iterable-value){HashMap-map=new-HashMap();for(T-value:values){//update-map.put()};context.write();}