Диспетчеризация по всему приложению
Я хочу, чтобы запустить приложение Word Word для четырех разных файлов одновременно.
У меня есть автономный кластер с 4 рабочими узлами, каждый узел имеет одно ядро и 1 Гб памяти.
spark работает в автономном режиме... 1.4 рабочих узлов 2.1 ядра для каждого рабочего узла 3.1 Гб памяти для каждого узла 4.core_max установлен в 1
./conf/spark-env.sh
**
export SPARK_MASTER_OPTS="-Dspark.deploy.defaultCores=1"
export SPARK_WORKER_OPTS="-Dspark.deploy.defaultCores=1"
export SPARK_WORKER_CORES=1
export SPARK_WORKER_MEMORY=1g
export SPARK_WORKER_INSTANCES=4
**
я выполнил, используя.sh файл
./bin/spark-submit --master spark://-Aspire-E5-001:7077 ./wordcount.R txt1 &
./bin/spark-submit --master spark://-Aspire-E5-001:7077 ./wordcount.R txt2 &
./bin/spark-submit --master spark://-Aspire-E5-001:7077 ./wordcount.R txt3 &
./bin/spark-submit --master spark://-Aspire-E5-001:7077 ./wordcount.R txt4
это правильный способ подать заявку параллельно?
когда для одного работающего приложения это занимает 2 секунды (только с использованием одного ядра), когда 4 приложения подаются одновременно, тогда каждое приложение занимает более 4 секунд...как параллельно запустить приложение spark для разных файлов?
1 ответ
Когда вы отправляете несколько заданий в спарк-кластер, мастер приложений / менеджер ресурсов автоматически планирует задания параллельно. (как искра на вершине пряжи).
Вам не нужно делать никаких дополнительных графиков для этого.
И для сценария, который вы показали, вы могли бы прочитать все разные файлы за одно задание.
И поверьте мне, из-за ленивой оценки Spark / оптимизации DAG и преобразований RDD (логические / физические планы) чтение различных файлов и подсчет слов будут идти параллельно.
Вы можете прочитать все файлы в одном задании как:
sc.wholeTextFiles("<folder-path>")
folder-path
является родительским каталогом, в котором находятся все файлы.