2017-02-20 8 views
0

Как я могу запустить 2x искрообразования в одно и то же время? У меня простая искра (без дополнительных конфигураций на моем компьютере) с выделенными 4 ядрами.Одновременное предоставление нескольких искровых приложений (динамическое распределение ресурсов)

Если я пытаюсь представить приложение, 2x раз, второй один получает «WARN TaskSchedulerImpl: Первоначальная работа не принял каких-либо ресурсов, проверить кластера пользовательский интерфейс для обеспечения того, чтобы работники зарегистрированы и иметь достаточные ресурсы»

Код: от будущего импорт print_function

import sys 
from operator import add 

from pyspark.sql import SparkSession 

if __name__ == "__main__": 

    spark = SparkSession\ 
     .builder\ 
     .appName("test")\ 
     .getOrCreate() 

    rdd = spark.sparkContext.parallelize(xrange(1000000000), 100) 
    print(rdd.sample(False, 0.1, 81).count()) 

    spark.stop() 

Как я пытаюсь запустить их: ./spark-submit --master искра: // myaddresshere: 7077 --name "app1" --conf искра. shuffle.service.enabled = true - -conf park.shuffle.service.enabled = true /path_to_py_file.py

Я знаю, что могу предварительно установить количество ядер для использования, но моя цель - динамически распределять ресурсы. Если работает только 1 задача => потребляет 100%, если они составляют 4 задания => 25% каждый.

Я пробовал несколько вариантов, но не повезло.

Подсказка будет оценена по достоинству.

+0

Динамическое распределение Spark работает только на уровне исполнителей, что означает, что он будет выделять больше исполнителей при загрузке задач в очередь. Если дополнительные исполнители могут быть выделены, зависит от их настройки и доступных ресурсов. Также имейте в виду, что при работе на локальном уровне драйверам также понадобятся ядра. – LiMuBei

ответ

0

Похоже, вы работаете локально, так что нет никакого менеджера ресурсов, такого как Пряжа для распределения ресурсов. ваше приложение, вероятно, работает с

val conf = new SparkConf() 
    .setMaster(local[*]) 

Который говорит искру, чтобы использовать все ядра .. Вы не можете использовать динамическое значение здесь будет зависеть от будущих ПРЕДСТАВЛЯЕТ.

Что вы просите, это менеджер ресурсов, который будет распределять ресурсы равномерно между приложениями ... Я не знаю ничего, что предлагает именно это.

такая конфигурация, как динамическое распределение, позволит диспетчеру ресурсов предоставить ресурсы приложения в соответствии с его потребностями, но это не обязательно будет 50% для 2 приложений (вероятно, не будет).

Насколько мне известно, у вас нет другого выбора, кроме как «рассказать» Spark, сколько исполнителей использовать и сколько ядер для каждого исполнителя (используя параметры «исправить-представить аргументы» или «искровые значения по умолчанию»), чтобы ресурсы были равномерно распределены.