我在Apache flink中有一个小用例,即批处理系统。我需要处理一组文件。每个文件的处理必须由一台机器处理。我有以下代码。始终只占用一个任务槽,并且一个接一个地处理文件。我有6个节点(所以6个任务管理器),并在每个节点配置4个任务槽。所以,我希望一次处理24个文件。
return Item.delete({id : id}).$promise;
我启动了flink as ./bin/start-cluster.sh命令,Web用户界面显示它有6个任务管理器,24个任务槽。
这些文件夹包含大约49个文件。当我在这个集合上创建mapPartition时,我希望跨越49个并行进程。但是,在我的基础设施中,它们都是一个接一个地处理的。这意味着只有一台机器(一个任务管理器)处理所有49个文件名。我想要的是,每个插槽配置2个任务,我希望同时处理24个文件。
任何指针肯定会有所帮助。我在flink-conf.yaml文件中有这些参数
class MyMapPartitionFunction extends RichMapPartitionFunction[java.io.File, Int] {
override def mapPartition(
myfiles: java.lang.Iterable[java.io.File],
out:org.apache.flink.util.Collector[Int])
: Unit = {
var temp = myfiles.iterator()
while(temp.hasNext()){
val fp1 = getRuntimeContext.getDistributedCache.getFile("hadoopRun.sh")
val file = new File(temp.next().toURI)
Process(
"/bin/bash ./run.sh " + argumentsList(3)+ "/" + file.getName + " " + argumentsList(7) + "/" + file.getName + ".csv",
new File(fp1.getAbsoluteFile.getParent))
.lines
.foreach{println}
out.collect(1)
}
}
}
提前致谢。有人可以告诉我哪里出错了吗?