我希望Map的输出为SequenceFileOutputFormat,reduce的最终输出为TextOutputFormat。作业配置只允许指定setOutputFormatClass如何为map和reduce阶段设置不同的输出格式? 最佳答案 我不认为您可以为映射器和缩减器指定不同的输出格式,只是为了整体工作。您可以尝试一个选项,具体取决于您的处理,您可以让一个作业输出SequenceFileOutputFormat中的文件,然后另一个作业读取并处理它以将其转换为TextOutputFormat。
我在HadoopJavaAPI(1.0.3)中编写了一个MapReduce作业。这项工作包括对我的数据中特定字段(X)的所有值求和,并创建其他字段的加权分布。输入:1field1_1field2_1field3_1...fieldX_12field1_2field2_2field3_2...fieldX_23field1_3field2_3field3_3...fieldX_3由于我的数据中的任何行都会发出一对,并且我需要使用单个reducer来汇总所有值,因此我想将相同的Reduce类设置为Combiner。总X求和:map输出:XfieldX_1XfieldX_2XfieldX_3
我的工作是计算密集型的,所以我实际上只使用Hadoop的分布函数,我希望我的所有输出都在1个文件中,所以我将reducer的数量设置为1。我的reducer实际上什么都不做。..通过将reducer的数量显式设置为0,我可以知道如何在映射器中进行控制以强制将所有输出写入同一个1输出文件吗?谢谢。 最佳答案 您不能在Hadoop中这样做。您的每个映射器都必须写入独立文件。这使它们变得高效(无争用或网络传输)。如果你想合并所有这些文件,你需要一个单一的reducer。或者,您可以让它们成为单独的文件,并在下载它们时合并这些文件(例如,使
我有三个reducer,我需要它们中的每一个都接收相同的key,如下所示:GOOG-Reducer0AAPL-Reducer1VMW-Reducer2在分区器中,getPartition()方法应返回一个int,指示reducer的索引(0,1,2)之一。我的getPartition()实现是:return((CompositeKey)key).getSymbol().hashCode()%numReduceTasks;但是这在这里不起作用是我得到的:intnumReduceTasks=3;System.out.println("GOOG".hashCode()%numReduceTa
我有两个大文件并将它们上传到名为“ccssdd”的AmazonS3存储桶中,并创建了一个名为data的文件夹:数据/友谊.xml数据/用户.xml用户结构是12447football..和13..我需要编写一个作业jar以在AmazonElasticMapReduce上运行它以计算:找出每个用户的friend数。我知道我应该从每个友谊元素中生成对作为map函数的输出在reduce函数中,我应该将每个用户ID的“1”相加。1_我知道我可以在eclipse中运行我的应用程序以生成.jar作业文件,但我不知道我应该下载哪些库并将其添加到项目中。2-我真的不知道如何将我的应用程序连接到s3!并
我们正在使用Hive进行临时查询,并且有一个Hive表,该表按两个字段(date,id)进行分区。现在每个日期大约有1400个ID,所以在一天左右添加了很多分区。实际数据驻留在s3中。现在我们面临的问题是假设我们从表格中执行一个月的selectcount(*)然后启动map需要相当长的时间(大约:1小时52分钟)减少工作。当我在Hive详细模式下运行查询时,我可以看到它这次花费的时间实际上决定了要生成多少个映射器(计算拆分)。有什么方法可以减少启动map-reduce作业的延迟时间吗?这是在此延迟时间内记录的日志消息之一:13/11/1907:11:06INFOmapred.FileI
在代码的第一部分,我设置了一些数组来跟踪一些值,如下所示:@Overridepublicvoidconfigure(JobConfconf){top5=newString[5];counttop5=newint[5]}现在,在reducer的一些代码之后,我想将顶部的内容输出到输出文件,但是,为了做到这一点,我创建了一个close()函数:@Overridepublicvoidclose(){//whatgoeshere?}但是正如您所见,没有任何东西可以调用,因为输出是在reducer方法中定义的。虽然代码本身很长,但这里是方法的数据签名:publicstaticclassMapex
我已经运行了很多天的seq2sparse作业,但它就是没有完成。主要原因是大多数“子作业”只有1个reducer,而每个作业都有很多映射器。我在从命令行调用seq2sparse时指定了--numReducers=n,但该属性仅在某些地方使用,例如MakePartialVectors而不是用于子作业,例如PruneVectors.可能是什么原因? 最佳答案 我查看了代码并意识到numReducers变量并未传递给所有子作业,因此这些作业是使用默认的缩减容量创建的,即1要绕过此限制,只需指定变量-Dmapred.reduce.tasks
我有一个在HBase表上运行的mapreduce作业。它在应用一些扫描过滤器并进行一些处理后扫描Hbase表。这项工作花费了很长时间,绝对比预期的要长得多,并且感觉性能下降是指数级的(即,前90%的完成速度比其余的快得多,大约98%(映射器完成)之后,看起来像像电影开始时的hell边缘一样陷入永恒。从高层来看,这种不均衡的性能应该没有任何理由,因为扫描中的每一行都应该有类似的行为,并且下游服务应该在HBase表的每一行都有类似的SLA。如何调试和分析此作业?是否有任何可用的工具可以帮助我对系统进行计量并查明行为异常的组件? 最佳答案
我有一个场景,我不确定减少处理器的位置。i)我有一个输入文本文件,它有1到4之间平衡范围内的1000个整数。ii)让我们假设有一个4节点集群,每个节点有12个槽,其中4个分配为reducer-总共有16个reduce槽iii)我在驱动程序中设置了reducer的数量:jobConf.setNumReduceTasks(4);iii)最后我有一个分区方法是publicclassMyPartitionerextendsPartitioner{@OverridepublicintgetPartition(Textkey,Textvalue,intnumPartitions){returnIn