【问题标题】:Should slave nodes be launched/started separately on Amazon EMR server?从节点是否应该在 Amazon EMR 服务器上单独启动/启动?
【发布时间】:2020-10-05 17:11:53
【问题描述】:

在尝试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 门户上,我可以看到主服务器和从服务器正在运行。我不确定是否正在使用从属服务器,或者它是否只是主服务器在完成所有工作。我必须单独启动或“启动”两个从节点还是 Spark 会自动执行此操作?如果是,我该怎么做?

【问题讨论】:

  • 分享更多关于你的代码的细节,以及你如何提交你的代码 spark-submit 或其他?您还可以在 YARN UI 中获取更多详细信息
  • 我没有使用 spark-submit。手动运行我的代码的每一行。使用 spark-submit 有什么不同吗?
  • 它允许你提交代码到集群,你需要在这里分享你的代码,我认为上下文没有被初始化
  • EMR中有Zeppelin服务,试试看
  • 将进行编辑。 〜在描述中添加了一个编辑〜@Rahul

标签: apache-spark pyspark amazon-emr


【解决方案1】:

如果您从 master 以独立模式 (local[*]) 运行 spark,那么它将仅使用 master 节点。
您如何提交 Spark 作业?
在提交 Spark 作业的同时使用 yarn 集群或客户端模式,以有效利用资源。
阅读更多关于YARN cluster vs client

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

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

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

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

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

【讨论】:

  • 您如何提交 Spark 作业? - 我目前正在手动运行代码中的每一行。
  • 手动通过 pyspark shell 对吧?如果您使用 spark-shell 或 pyspark shell,您的 spark 驱动程序将在主节点上创建。但是所有其他执行器也可以在 CORE 节点上运行。在这种情况下,您的驱动程序进程将使用一些内存。请检查执行器正在运行的 SparkUI。
猜你喜欢
  • 2018-04-05
  • 2012-08-23
  • 1970-01-01
  • 1970-01-01
  • 2017-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多