Amazon EMR仅使用一个核心节点,但是我有两个核心节点

问题描述 投票:0回答:1

我正在尝试使用EMR进行爬网。目标服务器可以识别客户端IP,因此我想为每个核心节点运行一个执行程序。目前,我有一个主节点和两个核心节点。核心节点的类型为c4.large,每个节点有两个vcore。因此,我需要更改设置。 (默认设置将在一个核心节点上运行两个执行程序。)

这是我的集群的配置。

[{"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))

它仅使用一个核心节点。在核心节点上依次执行两个映射任务。使用的核心节点是随机选择的,因此我想两个核心节点都可以使用。

如何在两个核心节点上并行运行两个任务?

pyspark amazon-emr
1个回答
0
投票

我发现EMR不支持客户端模式,这意味着驱动程序占用了核心节点的资源。因此,要回答我的问题,我需要增加配置的vcore数量,并减少每个任务所需的内存。或者,我可以增加核心节点的数量。

© www.soinside.com 2019 - 2024. All rights reserved.