Java 在hadoop中实现并行计算
我想在hadoop上为in实现一个并行。基本上并行接收子骨架(它可以是类似map()的函数)和作为参数的整数。子骨架将按integer参数指定的次数执行。子骨架的一次调用的结果作为参数传递给子骨架的后续调用。最后,最后一个子骨架的结果将作为并行结果提供。Scandium库上的实现示例(http://skandium.niclabs.cl/)下面是一个示例,我很想在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 {
* @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类内部?关于这个主题还有什么想法吗?