亚马逊EMR服务器上的slave节点应该launched/started吗?

Should slave nodes be launched/started separately on Amazon EMR server?

我在尝试 java.lang.OutofMemorySpace:Java heap space while fetching 120 million rows from database in pyspark 后刚刚启动了 Amazon Elastic MapReduce 服务器,其中我有 1 个主节点和 2 个从节点 运行,每个节点都有 4 个内核和 8G RAM。

我正在尝试从 MySQL 数据库(包含大约 1.2 亿行)加载大量数据集。查询加载正常,但是当我执行 df.show() 操作或尝试对 spark 数据帧执行操作时,出现错误,例如 -

  1. org.apache.spark.SparkException: Job 0 cancelled because SparkContext was shut down
  2. Task 0 in stage 0.0 failed 1 times; aborting job
  3. java.lang.OutOfMemoryError: GC overhead limit exceeded

我的问题是 -

  1. 当我通过 SSH 连接到 Amazon EMR 服务器并执行 htop 时,我看到 8GB 中的 5GB 已被使用。这是为什么?
  2. 在Amazon EMR门户上,我可以看到主从服务器是运行。我不确定是否正在使用从属服务器,或者它是否只是主服务器在做所有的工作。我是否必须单独启动或 "start" 2 个从节点,或者 Spark 会自动执行此操作?如果是,我该怎么做?

如果你是 运行 spark as standalone mode (local[*]) from master 那么它将只使用主节点。
您如何提交 Spark 作业?
提交spark作业时使用yarn cluster或client模式,高效利用资源
阅读更多关于

主节点运行所有其他服务,如 hive、mysql 等。这些服务可能 如果不使用独立模式,占用 5GB 内存。

在 yarn UI (http://<master-public-dns>:8088) 中,您可以更详细地查看其他容器 运行。

您可以检查您的火花驱动器和执行器在哪里旋转,
在火花 UI http://<master-public-dns>:18080.
Select 你的工作并转到 Executor 部分,在那里你会找到每个执行程序的机器 ip。

在 EMR 中启用神经节或转到 CloudWatch ec2 指标以检查每台机器的利用率。

Spark 不会启动或终止节点。
如果您想根据作业负载扩展集群,请将自动扩展策略应用于 CORE 或 TASK 实例组。
但至少你总是需要 1 个 CORE 节点 运行.