Amazon EMR использует только один основной узел, но у меня есть два основных узла - PullRequest
0 голосов
/ 08 апреля 2020

Я пытаюсь использовать EMR для сканирования. Целевой сервер распознает IP-адрес клиента, поэтому я хочу запустить по одному исполнителю для каждого основного узла. В настоящее время у меня есть один главный узел и два основных узла. Тип узлов ядра - c4.large, каждый из которых имеет два vcores. Итак, мне нужно изменить настройки. (Настройка по умолчанию запускает двух исполнителей на одном базовом узле.)

Вот конфигурация для моего кластера.

[{"classification":"spark", "properties":{"maximizeResourceAllocation":"true"}, "configurations":[]},
{"classification":"yarn-site", "properties":{
  "yarn.nodemanager.resource.cpu-vcores":"1",
  "yarn.nodemanager.resource.memory-mb":"3584",
  "yarn.scheduler.maximum-allocation-vcores":"1",
  "yarn.scheduler.maximum-allocation-mb":"3584"}, "configurations":[]},
{"classification":"mapred-site", "properties":{
  "mapreduce.map.memory.mb":"3584",
  "mapreduce.map.cpu.vcores":"1"}, "configurations":[]}]

А вот и скрипт запуска.

spark-submit \
  --conf spark.hadoop.parquet.enable.dictionary=true \
  --conf spark.hadoop.parquet.enable.summary-metadata=false \
  --conf spark.sql.hive.metastorePartitionPruning=true \
  --conf spark.sql.parquet.filterPushdown=true \
  --conf spark.sql.parquet.mergeSchema=true \
  --conf spark.worker.cleanup.enabled=true \
  --conf spark.executorEnv.LD_LIBRARY_PATH="/usr/local/lib:$LD_LIBRARY_PATH" \
  --conf spark.executor.cores=1 \
  --conf spark.executor.memory=3200m \
  --packages com.amazonaws:aws-java-sdk-pom:1.10.34,org.apache.hadoop:hadoop-aws:2.7.2 \
  extract_spark.py news_new data

Наконец, вот фрагмент кода.

  numbers = sc.parallelize(list(range(100)))
  contents = numbers.flatMap(lambda n: get_contents(args.id, n)).toDF()

  contents.coalesce(2).write.mode('append').parquet(
      os.path.join(args.path, args.id))

Он использует только один узел ядра. Две задачи карты выполняются последовательно на главном узле. Используемый базовый узел выбирается случайным образом, поэтому я предполагаю, что оба базовых узла готовы к использованию.

Как я могу запустить две задачи на двух основных узлах параллельно?

1 Ответ

0 голосов
/ 08 апреля 2020

Я обнаружил, что режим клиента не поддерживается в EMR, что означает, что драйвер забирает ресурсы у основных узлов. Итак, чтобы ответить на мой вопрос, мне нужно увеличить настроенное количество vcores и уменьшить объем необходимой памяти для каждой задачи. Или я могу просто увеличить количество узлов ядра.

...