草庐IT

Iterator-reducer

全部标签

hadoop - 为 hadoop 设计 "mapper"和 "reducer"函数的功能?

我正在尝试为Hadoop设计映射器和缩减器。我是Hadoop的新手,我对映射器和缩减器应该如何为我的特定应用程序工作感到有点困惑。我的映射器的输入是一个大的有向图的连通性。它是一个2列输入,其中每一行都是一个单独的边缘连接。第一列是起始节点ID,第二列是每条边的结束节点ID。我正在尝试将每个起始节点ID的邻居数输出到一个2列文本文件中,其中第一列按起始节点ID递增的顺序排序。我的问题是:(1)输入已经设置好,每一行都是一个键值对,其中键是起始节点id,值是结束节点id。映射器是否只是简单地读入每一行并将其写出?这似乎是多余的。(2)排序是在mapper和reducer之间进行,还是排序

java - 为什么 reducer 在我的情况下不能正常工作?

为什么“set”只有一个元素,而例如前5行具有相同URL和四个不同IP的输入应该有4个元素。我还使用了“for-each”而不是“迭代器”,但不起作用。有人可以帮助我吗?映射器publicclassWordCount{publicstaticclassTokenizerMapperextendsMapper{privateTextIP=newText();privateTextword=newText();publicvoidmap(Objectkey,Textvalue,Contextcontext)throwsIOException,InterruptedException{Str

hadoop - 在 Tez 和 Map reduce 中运行 "count(*) "时的行为差异

最近我遇到了这个问题。我在Hadoop分布式文件系统路径和相关配置单元表中有一个文件。table的两边都有30个分区。我从HDFS中删除了5个分区,然后执行了"msckrepairtable;"在hivetable上。它完成得很好但输出了"Partitionsmissingfromfilesystem:"我尝试运行selectcount(*);(在tez上)失败并出现以下错误:Causedby:java.util.concurrent.ExecutionException:java.io.FileNotFoundException:但是当我将hive.execution.engine设

java - hadoop、map/reduce 输出文件(part-00000)和分布式缓存

我的map/reduce输出的值是一个字节可写的数组,它被写入输出文件part-00000(hadoop默认这样做)。我的下一个map函数需要这个数组,所以我想将这个数组保存在分布式缓存中。有人能告诉我如何从可能不是文本文件的输出文件(part-00000)中读取并存储在分布式缓存中吗? 最佳答案 我的建议:创建一个具有以下属性的新Hadoop作业:输入包含所有part-...文件的目录。创建一个写入分布式缓存的自定义OutputFormat类。现在让你的工作看起来本质上是这样的:conf.setInputFormat(Sequen

Hadoop 管道 : how to pass large data records to map/reduce tasks

我正在尝试使用map/reduce来处理大量二进制数据。该应用程序的特点如下:记录的数量可能很大,因此我真的不想将每条记录作为单独的文件存储在HDFS中(我打算将它们全部连接到单个二进制序列文件),并且每个记录都是一个大的连贯(即不可拆分)blob,大小在一到几百MB之间。这些记录将由C++可执行文件使用和处理。如果不是为了记录的大小,HadoopPipesAPI会很好:但这似乎是基于将输入作为连续的字节block传递给map/reduce任务,这在这种情况下是不切实际的。我不确定执行此操作的最佳方法。是否存在任何类型的缓冲接口(interface)允许每个M/R任务以可管理的bloc

configuration - 能够限制 hadoop hive mapred 作业的最大 reducer ?

我试过在查询前加上:setmapred.running.reduce.limit=25;和sethive.exec.reducers.max=35;最后一个将530个reducer的工作减少到35...这让我觉得它会尝试将530个reducer的工作值(value)降低到35个。现在给setmapred.tasktracker.reduce.tasks.maximum=3;尝试查看该数字是否是每个节点的某种最大值(之前在具有70个潜在reducer的集群上为7)。更新:setmapred.tasktracker.reduce.tasks.maximum=3;没有效果,但值得一试。

hadoop - HBase 批量加载会产生大量的 reducer 任务——任何解决方法

HBase批量加载(使用configureIncrementalLoad辅助方法)将作业配置为创建与hbase表中的区域一样多的reducer任务。因此,如果有几百个区域,那么该作业将产生数百个reducer任务。这在小型集群上可能会变得非常慢。是否可以使用MultipleOutputFormat或其他方式解决问题?谢谢 最佳答案 按区域分阶段减少减少会给您带来很多长期利益。一旦导入的数据在线,您就会获得数据局部性。您还可以确定何时将区域负载平衡到另一台服务器。我不会这么快进入更粗略的粒度。由于reduce阶段是单个文件写入,您应该

hadoop - 可以使用 Map Reduce 和 Hadoop 并行处理批处理作业吗?

我们的组织有数百个通宵运行的批处理作业。其中许多工作需要2、3、4小时才能完成;有些甚至需要长达7个小时。目前,这些作业以单线程模式运行,因此我们提高性能的尝试受到具有额外CPU和内存的机器垂直扩展的限制。我们正在探索利用并行处理技术(例如MapReduce)来缩短完成这些作业所需时间的想法。我们的大多数批处理过程通常会从数据库中提取大型数据集,逐行处理数据,然后将结果作为文件转储到另一个数据库中。在大多数情况下,单个行的处理独立于其他行。现在我们正在研究MapReduce框架,以将这些作业分解成更小的部分以进行并行处理。我们的组织拥有超过400名员工的台式PC,我们希望在下类时间利用

Hadoop reduce 任务挂起

我设置了一个有4个节点的hadoop集群,当运行map-reduce任务时,map任务很快完成,而reduce任务卡在27%的百分比。我查看了日志,是reduce任务无法从map节点获取map输出。master的作业跟踪器日志显示如下消息:---------------------------------2011-06-2719:55:14,748INFOorg.apache.hadoop.mapred.JobTracker:Addingtask(REDUCE)'attempt_201106271953_0001_r_000000_0'totiptask_201106271953_00

hadoop - 限制每个用户的并发 reducer 数量

有没有办法限制hadoop中每个用户的并发reduce槽数?我们希望确保任何时候都没有单个用户用完所有可用的reduce插槽。 最佳答案 这可以使用FairSchedulerinthecurrentversionofHadoop.您可以为每个用户分配一个池,然后设置maxReduces。但是,此选项在FairSchedulerwith0.20.203中不可用。.此版本方便地具有minReduces而没有maxReduces。 关于hadoop-限制每个用户的并发reducer数量,我们在