Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 迭代MapReduce_Python_Streaming_Hadoop_Mapreduce_Iteration - Fatal编程技术网

Python 迭代MapReduce

Python 迭代MapReduce,python,streaming,hadoop,mapreduce,iteration,Python,Streaming,Hadoop,Mapreduce,Iteration,我已经为Hadoop编写了一个简单的k-means集群代码(两个独立的程序——mapper和reducer)。代码正在处理本地框上的二维点的小数据集。它是用Python编写的,我计划使用流式API 我想知道如何最好地在Hadoop上运行这个程序 每次运行mapper和reducer后,都会生成新的中心。这些中心是下一次迭代的输入 在我看来,每个mapreduce迭代都必须是一个单独的mapreduce作业。看起来我必须编写另一个脚本(python/bash),在每个reduce阶段之后从HDFS

我已经为Hadoop编写了一个简单的k-means集群代码(两个独立的程序——mapper和reducer)。代码正在处理本地框上的二维点的小数据集。它是用Python编写的,我计划使用流式API

我想知道如何最好地在Hadoop上运行这个程序

每次运行mapper和reducer后,都会生成新的中心。这些中心是下一次迭代的输入

在我看来,每个mapreduce迭代都必须是一个单独的mapreduce作业。看起来我必须编写另一个脚本(python/bash),在每个reduce阶段之后从HDFS中提取新的中心,并将其反馈给mapper


还有其他更简单、更不混乱的方法吗?如果集群碰巧使用了一个公平的调度程序,那么这个计算完成还需要很长时间吗

Hadoop的Java接口具有链接多个作业的概念:

但是,由于您使用的是Hadoop流媒体,因此不支持链接作业和管理工作流

您应该结帐Oozie,Oozie应该为您完成这项工作:

这里有几种方法:github.com/bwhite/hadoop\u vision/tree/master/kmeans


另外,请查看(oozie支持):

回答我自己的问题感觉很有趣。我使用了PIG 0.9(尚未发布,但可在后备箱中使用)。在这种情况下,通过允许将PIG语句嵌入Python等脚本语言中,可以支持模块化和流控制

因此,我编写了一个主python脚本,其中有一个循环,称为我的PIG脚本。PIG脚本inturn调用了UDF。所以,我不得不写三个不同的程序。但结果很好

您可以在此处查看示例-


作为记录,我的UDF也是用Python编写的,使用这个新功能,可以用脚本语言编写UDF。

您不必再编写其他作业。您可以将同一个作业放入循环(while循环),只需不断更改作业的参数,这样,当映射器和reducer完成其处理时,控件将从创建新配置开始,然后您就可以自动拥有一个作为前一阶段输出的输入文件