Java 在hadoop中实现并行计算

Java 在hadoop中实现并行计算,java,hadoop,Java,Hadoop,我想在hadoop上为in实现一个并行。基本上并行接收子骨架(它可以是类似map()的函数)和作为参数的整数。子骨架将按integer参数指定的次数执行。子骨架的一次调用的结果作为参数传递给子骨架的后续调用。最后,最后一个子骨架的结果将作为并行结果提供。Scandium库上的实现示例(http://skandium.niclabs.cl/)下面是一个示例,我很想在hadoop上移植这个实现 * @param <P> The input and result type of the {

我想在hadoop上为in实现一个并行。基本上并行接收子骨架(它可以是类似map()的函数)和作为参数的整数。子骨架将按integer参数指定的次数执行。子骨架的一次调用的结果作为参数传递给子骨架的后续调用。最后,最后一个子骨架的结果将作为并行结果提供。Scandium库上的实现示例(http://skandium.niclabs.cl/)下面是一个示例,我很想在hadoop上移植这个实现

* @param <P> The input and result type of the {@link Skeleton}.
* */
public class For<P> extends AbstractSkeleton<P,P> {

    Skeleton<P,P> subskel;
    int times;

    /**
     * The constructor.
     * 
     * @param skeleton The skeleton pattern to execute.
     * @param times The number of times to execute the skeleton.
     */
    public For(Skeleton<P,P> skeleton, int times){
        this.subskel=skeleton;
        this.times = times;
    }

    /**
     * The constructor.
     * 
     * @param execute The skeleton pattern to execute.
     * @param times The number of times to execute the {@link Muscle}.
     */
    public For(Execute<P,P> execute, int times){
        this(new Seq<P,P>(execute), times);
    }

    /**
     * {@inheritDoc}
     */
    public void accept(SkeletonVisitor visitor) {
        visitor.visit(this);
    }
}
*@param

{@link Skeleton}的输入和结果类型。 * */

的公共类扩展了AbstractSkeleton{ 骨骼亚基尔; 整数倍; /** *构造器。 * *@param skeleton要执行的骨架模式。 *@param乘以执行骨架的次数。 */ 公共对象(骨架,整数倍){ subskel=骨架; 这个。次=次; } /** *构造器。 * *@param执行要执行的骨架模式。 *@param乘以执行{@link Muscle}的次数。 */ public For(执行,int次){ 本次(新序列(执行),次); } /** *{@inheritardoc} */ 公共无效接受(SkeletonVisitor){ 访客。访问(本); } }


如果我正确理解了这个问题,那么您希望执行一个函数N次,每次调用都接收上一次调用的输出作为输入

这种函数调用的链接本质上是串行的。没有(通用的)并行方法

我所能看到的唯一希望是,如果函数和输入(您没有指定)的性质允许对函数的单个调用进行并行化,那么您可以这样做,并在作业控制级别进行迭代/链接。这就是说:如果您的输入是一个数据集,而您的函数是该数据集上的某个转换,其输出是函数的合法输入,并且如果该转换可以并行化,那么这里可能有一种使用Hadoop的方法


如果您能提供更多详细信息,我很乐意为您提供更具体的建议。

对不起,我不理解您的问题。是否希望以固定次数运行某个函数f(),每次都将上一次运行的结果传递给当前运行?哪一部分应该是平行的?如果您能更具体地说明您的总体目标是什么,那么可能有一个简单的现有工具可以提供帮助。在hadoop中,输入被拆分到不同的工作站,相同的功能同时应用到所有工作站。这是它的平行部分。我唯一需要担心的是以顺序的方式实现该函数。算法骨架框架处理并行的复杂性。MapReduce(Hadoop)是其中一个框架。要将映射函数的结果传递到新的映射函数中,您必须链接映射程序。。。听起来可能有效的方法是在映射器中有一个循环,该循环进行处理,然后在一个reducer中组合/完成结果?映射器中的一个循环还是新Pfor函数中的一个循环?例如,Pfor(map(),data,int4){for i=0到i=3 do data.map();}???这就是你所指的还是循环必须在mapper类内部?关于这个主题还有什么想法吗?