Справедливое планирование приложений Spark - PullRequest
0 голосов
/ 18 мая 2018

У меня есть работа, которая перебирает столбцы таблицы, чтобы получить различные значения каждого из них.Каждый запрос занимает около 6 секунд, но они не используют полный процессор.Вот почему я решил использовать расписание FAIR в Приложении, чтобы ресурсы могли быть полностью использованы.На самом деле это приложение имеет 4 ядра и 10 Гб оперативной памяти.

Я добавил в свой файл 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);

Используется пул filters , я вижу его в графическом интерфейсе приложения spark, и задания выполняются параллельно, но если раньше, то каждый запрос выполнялсяв режиме FIFO за 6 секунд с использованием режима FAIR 4 параллельных запроса выполняются за 24 секунды.Я проверил загрузку процессора и, как раньше, когда использовался режим FIFO.

Я что-то упустил?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...