【问题标题】:Spark Memory Issues with sparklyrsparklyr 的 Spark 内存问题
【发布时间】:2018-11-10 18:47:44
【问题描述】:

我在使用 sparklyr 运行 Spark 时遇到了一些奇怪的问题。

我目前在 R 生产服务器上,通过 spark://<my server>:7077 以客户端模式连接到我的 Spark 集群,然后从 MS SQL Server 中提取数据。

我最近能够毫无问题地执行此操作,但我最近获得了一个更大的集群,现在遇到了内存问题。

首先,我在处理过程中遇到了莫名其妙的“内存不足”错误。这发生了几次,然后我开始出现“内存不足无法创建新线程”错误。我在 R 生产服务器和 Spark 服务器上检查了我使用的线程数与我的用户的最大值相比,我没有接近最大值。

我重新启动了我的主节点,现在得到:

# There is insufficient memory for the Java Runtime Environment to continue.
# Cannot create GC thread. Out of system resources.

这到底是怎么回事?

这是我的规格:
- 通过 root 用户运行的 Spark Standalone。
- Spark 版本 2.2.1
- Sparklyr 版本 0.6.2
- 红帽 Linux

【问题讨论】:

    标签: apache-spark jvm sparklyr


    【解决方案1】:

    我偶然发现了这一点。事实证明,当您在客户端模式下在外部 Spark 集群上运行操作时,它仍然在本地运行 Spark。我认为本地 Spark 没有分配足够的内存,这导致了错误。我的解决方法很简单:

    而不是通过以下方式分配内存:

    spark_conf = spark_config()
    spark_conf$`spark.driver.memory` <- "8G"
    spark_conf$`spark.executor.memory` <- "12G"
    

    我用过:

    spark_conf = spark_config()
    spark_conf$`sparklyr.shell.driver-memory` <- "8G"
    spark_conf$`sparklyr.shell.executor-memory` <- "12G"
    

    前者会直接在集群上设置资源(spark context)。后者将其设置在 spark 上下文以及 sparklyr 应用程序的其余部分中。

    【讨论】:

      猜你喜欢
      • 2018-02-01
      • 2018-10-14
      • 2018-08-19
      • 2017-11-18
      • 1970-01-01
      • 1970-01-01
      • 2019-03-17
      • 2018-12-21
      • 1970-01-01
      相关资源
      最近更新 更多