在某些条件下,我们希望映射器完成所有工作并输出到HDFS,我们不希望将数据传输到reducer(将使用额外的带宽,如果有错误请纠正我)。一个伪代码是:defmapper(k,v_list):forvinv_list:ifcriteria:writetoHDFSelse:emit我发现这很难,因为我们唯一可以玩的就是OutputCollector。我想到的一件事是扩展OutputCollector,覆盖OutputCollector.collect并执行这些操作。有没有更好的方法? 最佳答案 您可以使用JobConf.setNumRe
我遇到了一个非常非常奇怪的问题。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
我正在研究一个Map-Reduce问题。但我一直停留在一点,我怎样才能通过List作为Mapperoutput?可不可以?如果是,那我们怎么知道configuration关于Mapperoutputclass? 最佳答案 您可以使用ArrayWritable类作为映射器类中的值对象。请为您的映射器类引用以下代码片段,ArrayWritablearrayWritable=newArrayWritable(Text.class);Text[]textValues=newText[2];textValues[0]=newText("val
我有一个在hadoop上运行的应用程序。如何将对象传递给映射器和缩减器以处理数据。例如,我声明了一个FieldFilter对象来过滤在映射器中处理的行。过滤器包含许多由用户指定的过滤规则。所以,我想知道如何将过滤器和规则传递给Mappers和Reducers?我的想法是将对象序列化为字符串,通过配置传递字符串,然后通过字符串重新构造对象。但是好像对我不好!还有其他方法吗?谢谢!publicclassFieldFilter{privatefinalArrayListrules=newArrayList();publicFieldFilteraddRule(FieldFilterRule.
我正在将一些软件从较旧的Hadoop集群(使用用户名/密码身份验证)转移到较新的,2.6.0-cdh5.12.0,它具有>Kerberos身份验证已启用。我已经能够使用AccumuloInput/OutputFormat类中设置的DelegationToken使许多使用Accumulo作为其输入和/或输出的现有Map/Reduce作业正常工作。但是,我有1个工作,它使用AccumuloInput/OutputFormat进行输入和输出,而且在其Mapper.setup()方法中,它通过Zookeeper连接到Accumulo,因此在Mapper.map()方法中,它可以将Mapper.
我可以通过在生成缩减器的语句中使用PARALLEL子句来控制缩减器的数量。我想控制映射器的数量。数据源已经创建,我无法减少数据源中的部件数。是否可以控制我的pig语句生成的map数量?我可以对生成的map数量设置上下限吗?控制这个是个好主意吗?我尝试使用pig.maxCombinedSplitSize、mapred.min.split.size、mapred.tasktracker.map.tasks.maximum等,但它们似乎没有帮助。有人可以帮助我了解如何控制map的数量并可能分享一个工作示例吗? 最佳答案 映射器的数量有一个
我已经开始阅读有关大数据和Hadoop的内容,所以这个问题对您来说可能听起来很愚蠢。这就是我所知道的。每个映射器处理少量数据并产生中间输出。在此之后,我们有洗牌和排序的步骤。现在,Shuffle=将中间输出移至各自的Reducer,每个Reducer都处理一个或多个特定的键。那么,一个数据节点是否可以在其中运行Mapper和Reducer代码,或者我们为每个节点设置不同的DN? 最佳答案 术语:数据节点用于HDFS(存储)。Mappers和Reducers(计算)在具有TaskTracker守护进程的节点上运行。每个tasktrac
我想知道是否可以添加一个可以跨多个map()调用使用的成员对象。例如,一个StringBuilder:privateStringBuilderbuilder;publicvoidmap(...){...builder.setLength(0);builder.append(a);builder.append(b);builder.append(c);d=builder.toString();...}显然,如果mapper对象在多个线程之间共享,由于来自多个线程的并发访问,上述构建器对象的行为将不会像预期的那样。所以我的问题是:是否确保hadoop中的每个线程都会为自己使用一个专用的映射
想要了解在Mapper/Reducer中处理异常的最佳实践。选项1:不进行任何try/catch,让任务失败,MR将重试最终终止作业的任务。属性mapreduce.map/reduce.maxattempts在这里发挥作用。选项2:使用计数器记录catchblock中的失败次数。并根据这些错误的某个阈值终止作业或仅使用计数器显示失败记录的数量。在map-reduce中处理异常的任何(其他)通用/标准做法? 最佳答案 列出的选项1和2是我们在项目中处理的一些方法。请看here.它列出了更多选项
对于给定的MR作业,我需要生成两个输出文件。一个文件应该是Mapper的输出另一个文件应该是Reducer的输出(它只是上面Mapper的聚合)我能否将mapper和reducer输出都写在一个作业中?编辑:在作业1中(仅Mapper阶段)输出包含单行中的20个字段,必须将其写入hdfs(file1)。在Job2(Mappernreducer)中,Mapper从Job1的输出中获取输入,删除几个字段以使其成为标准格式(仅10个字段)并将其传递给写入file2的reducer。我需要hdfs中的file1和file2...现在我的疑问是,在Job1映射器中,我是否可以将数据作为file1