我在Spark running和sparklyr上有一些奇怪的问题。
我目前在一台R生产服务器上,通过spark://<my server>:7077
以客户端模式连接到my Spark Cluster,然后从MS SQL server拉取数据。
我最近可以做到这一点,没有任何问题,但我最近得到了一个更大的集群,现在有内存问题。
首先,我在处理过程中遇到了莫名其妙的“内存不足”错误。这种情况发生了几次,然后我开始得到“内存不足,无法创建新线程”的错误。我在R生产服务器和Spark服务器上检查了我正在使用的线程数与我的用户的最大线程数,但我没有接近最大线程数。
我重新启动了我的主节点,现在得到:
# There is insufficient memory for the Java Runtime Environment to continue.
# Cannot create GC thread. Out of system resources.
到底怎么回事??
以下是我的规格:
Spark独立运行,通过root
user.Spark版本2.2.1 Spark版本0.6.2 via Linux运行
发布于 2018-06-09 02:56:38
我偶然发现了这一点。事实证明,当你在客户端模式下的外部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应用程序的其余部分中设置它。
https://stackoverflow.com/questions/50629658
复制相似问题