草庐IT

Iterator-reducer

全部标签

Hadoop - reducer 如何获取数据?

我知道映射器为每个reducer生成1个分区。reducer如何知道要复制哪个分区?假设有2个节点为字数统计程序运行mapper,并且配置了2个reducer。如果每个map节点产生2个分区,并且两个节点中的分区都可能包含相同的单词作为键,reducer将如何正常工作?例如:如果节点1产生分区1和分区2,分区1包含一个名为“WHO”的键。如果节点2产生分区3和分区4,分区3包含一个名为“WHO”的键。如果Partition1和Partition4进入reducer1(剩余部分进入reducer2),reducer1如何计算正确的字数?如果这不可能,分区1和分区3将转到reducer1,

Hadoop:Reducer 将 Mapper 输出写入输出文件

我遇到了一个非常非常奇怪的问题。reducer确实可以工作,但是如果我检查输出文件,我只会找到映射器的输出。当我尝试调试时,在将映射器的输出值类型从Longwritable更改为Text后,我​​发现字数示例存在同样的问题packageorg.myorg;importjava.io.IOException;importjava.util.*;importorg.apache.hadoop.fs.Path;importorg.apache.hadoop.conf.*;importorg.apache.hadoop.io.*;importorg.apache.hadoop.mapreduc

hadoop - 以不同用户身份运行 map reduce 作业

我有一个与Hadoop交互的Web应用程序。(Clouderacdh3u6)特定的用户操作应该在集群中启动一个新的MapReduce作业。该集群不是安全集群,但它使用简单的组身份验证-因此如果我以自己的身份通过ssh访问它,我可以从命令行启动MR作业。在Web应用程序中,我使用ToolRunner来运行我的作业:MyMapReduceWrapperClassmr=newMyMapReduceWrapperClass();ToolRunner.run(mr,null);//insidetherunimplementationofmywrapperclass:Jobjob=newJob(c

hadoop - 如何保证 combiner 在 map/reduce 中至少运行一次?

从一些文章中,我知道combiner会在mapper端和reducer端运行,并且会运行0~N次。而且我知道无论是否调用组合器,我们的mapreduce程序都应该得到相同的结果。但我有一种特殊情况需要组合器至少被调用一次,有人知道如何确保这一点吗?PS,在maptask.java中,我看到了这行:if(null==combinerClass||numSpills如果我将minSpillsForCombine设置为零,我能否确保组合器至少被调用一次?非常感谢! 最佳答案 在溢出期间,在溢出线程写入磁盘之前,线程首先将数据分成分区,这些

hadoop - 如何在 HDFS 中只保存非空 reducer 的输出

在我的应用程序中,reducer将所有part文件保存在HDFS中,但我希望reducer只写入大小不为0bytes的part文件。请告诉我如何定义它。 最佳答案 这是可能的-请参阅“惰性输出”的文档部分:http://hadoop.apache.org/mapreduce/docs/current/mapred_tutorial.html#Lazy+Output+Creationimportorg.apache.hadoop.mapreduce.lib.output.LazyOutputFormat;LazyOutputForma

hadoop - 在 Hadoop Map/Reduce 中为多个映射器配置 Map Side join

我有一个关于在Hadoop中为多个映射器配置Map/Side内部连接的问题。假设我有两个非常大的数据集A和B,我使用相同的分区和排序算法将它们拆分成更小的部分。对于A,假设我有a(1)到a(10),对于B,我有b(1)到b(10)。确保a(1)和b(1)包含相同的key,a(2)和b(2)具有相同的key,依此类推。我想设置10个映射器,特别是映射器(1)到映射器(10)。据我了解,Map/Sidejoin是mapper之前的预处理任务,因此,我想为mapper(1)加入a(1)和b(1),加入a(2)和b(2)对于mapper(2),等等。看了一些引用资料,我还是不太清楚这十个map

java - 如何将对象传递给 Mapper 和 reducers

我有一个在hadoop上运行的应用程序。如何将对象传递给映射器和缩减器以处理数据。例如,我声明了一个FieldFilter对象来过滤在映射器中处理的行。过滤器包含许多由用户指定的过滤规则。所以,我想知道如何将过滤器和规则传递给Mappers和Reducers?我的想法是将对象序列化为字符串,通过配置传递字符串,然后通过字符串重新构造对象。但是好像对我不好!还有其他方法吗?谢谢!publicclassFieldFilter{privatefinalArrayListrules=newArrayList();publicFieldFilteraddRule(FieldFilterRule.

hadoop - 关于 reducer 的数据分区

Hadoop权威指南(TomWhite)第178页Sectionshuffleandsort:map端。就在图6-4之后在写入磁盘之前,线程首先将数据分成与数据最终将发送到的reducer相对应的分区。在每个分区中,后台线程按键执行内存中排序,如果有组合器函数,它会在排序的输出上运行。问题:这是否意味着映射将每个键输出写入不同的文件,然后再将它们组合起来。因此,如果有2个不同的key输出要发送到reducer,每个不同的key将分别发送到reducer,而不是发送单个文件。如果我的上述推理不正确,那么实际发生的是什么。 最佳答案 仅

hadoop - Hadoop Map/Reduce 程序使用哪种语言? Java 还是 PHP?

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭2年前。Improvethisquestion我最近用java编写了几个map/reduce程序。但是我也知道像php这样的脚本语言也是可以的。但是,大多数人都推荐java或python。我目前在php工作。所以我想知道哪种语言更适合map/reduce程序开发?用于map/reduce实现的php的一个主要缺点是,它不是多线程的。此外,hadoop具有广泛的类、接口(interface)和方法框架,专门用java编写,而php程序无

Hadoop Map-Reduce OutputFormat 用于将结果分配给内存变量(不是文件)?

(来自Hadoop新手)我想在玩具Hadoop概念验证示例中尽可能避免使用文件。我能够从非基于文件的输入中读取数据(感谢http://codedemigod.com/blog/?p=120)——这会生成随机数。我想将结果存储在内存中,以便我可以对其进行进一步的(非Map-Reduce)业务逻辑处理。本质上:conf.setOutputFormat(InMemoryOutputFormat)JobClient.runJob(conf);Mapresult=conf.getJob().getResult();//?似乎做我想做的最接近的事情是以二进制文件输出格式存储结果,然后用等效的输入格