sparklyr

时间:2018-05-31 17:22:17

标签: apache-spark jvm sparklyr

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

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

我最近能够做到这一点没有任何问题,但我最近得到了一个更大的集群,现在我有内存问题。

首先,我得到了莫名其妙的记忆力&#39;我处理过程中的错误。这发生了几次然后我开始得到内存无法创建新线程&#39;错误。我在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
  - Red Hat Linux

1 个答案:

答案 0 :(得分: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)上设置资源。后者将其置于火花环境以及闪光应用的其余部分。