集群中的Spark作业非常慢(每个任务的“执行程序计算时间”增加)

时间:2016-01-21 18:01:07

标签: apache-spark

用例:我们收集了要分析的小文件。

Spark设置:Spark1.5具有独立群集,2个工作节点,每个节点8核,每个10GB内存。

计划:
1)文档被加载到List<Tuple2<Doc_Name, Doc_Contents>>
2)使用上面的集合调用parallelizePairs,并将分区大小设置为100 3)Map() - 分析每个文档,然后生成json 4)收集()

问题: 对于首先安排的任务(任务0到16),“执行器计算时间”大约为3分钟,但对于稍后安排的任务,“执行器计算时间”每次增加(8分钟,12分钟和17分钟)。{ {3}}

观察:
当我在本地模式下运行代码时,每个任务都采用相同的数量,一切正常。当在独立群集模式下执行相同的代码时,每个任务变得越来越慢,如屏幕截图所示。我确实尝试过客户端和集群部署模式,在这两种情况下,当独立集群中执行的应用程序“后执行计算时间”增加后续任务时。

示例代码:

List<Tuple2<String, String>> data = getData(); -> data is around 7MB
JavaPairRDD<String, String> pairRDD = sc.parallelizePairs(data, 100);
JavaRDD<Tuple2<String, String>> aRDD = resumePairRDD.map(new ProcessDoc());
List<Tuple2<String, String>> output = aRDD.collect();

public class ProcessDoc implements Function<Tuple2<String, String>, Tuple2<String, String>>, Serializable {
    @Override
    public Tuple2<String, String> call(Tuple2<String, String> fileNameContentTuple) throws Exception {
    String fileName = FilenameUtils.getBaseName(fileNameContentTuple._1());
    String content = fileNameContentTuple._2();
     // Below API has dependency on many other classes and approximately takes around 2 seconds for each record.
     DocumentAnalyzerResponse documentAnalyzerResponse = DocumentAnalyzerFactory.parse(content);
     String resultJson = objectMapper.writeValueAsString(documentAnalyzerResponse);
     // Upload the resultJson to s3
    }
}

感谢所有评论。

0 个答案:

没有答案