Spark应用程序FAIR Scheduling

时间:2018-05-18 08:42:38

标签: java apache-spark

我有一个迭代表列的工作,以获取每个列的不同值。每个查询大约需要6秒,但它们不使用完整的CPU。这就是为什么我决定在应用程序中使用FAIR调度,以便可以充分利用资源。实际上这个应用程序有4个内核和10 Gb内存。

我在spark spark-defaults.conf文件中添加了以下行:

spark.scheduler.mode FAIR
spark.scheduler.allocation.file /bin/spark/pools.xml

我创建了以下池:

<pool name="filters">
<schedulingMode>FAIR</schedulingMode>
<weight>1000</weight>
<minShare>0</minShare>
</pool>

这是我的代码:

List<ColumnMetadata> fields = getCategoryFieldsFromViewMetadata(...);
Dataset<Row> dsCube = sqlContext.sql("...");

dsCube = dsCube
        .select(JavaConversions.asScalaBuffer(filterColumns))
        .persist(StorageLevel.MEMORY_ONLY());

dsCube.createOrReplaceTempView("filter_temp");

sqlContext.sparkContext().setLocalProperty("spark.scheduler.pool", "filters");

fields.parallelStream().forEach((ColumnMetadata field) -> {
    Dataset<Row> temp = sqlContext.sql("select distinct tenant_id, user_domain, cube_name, field, value "
                        +"from filter_temp");
    saveDataFrameToMySQL("analytics_cubes_filters", temp, SaveMode.Append); //Here I save the results to a MySQL table.
});
sqlContext.sparkContext().setLocalProperty("spark.scheduler.pool", null);

正在使用过滤器池,我可以在spark应用程序GUI中看到它,并且作业是并行执行的,但如果之前,每个查询都在6秒内以FIFO模式执行,现在使用FAIR模式4个并行查询在24秒内执行。我已经检查了CPU的使用情况,并且在使用FIFO模式之前看起来很像。

我错过了什么吗?

0 个答案:

没有答案