Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 由于GC开销限制,简单spark作业失败_Scala_Apache Spark_Apache Spark Standalone - Fatal编程技术网

Scala 由于GC开销限制,简单spark作业失败

Scala 由于GC开销限制,简单spark作业失败,scala,apache-spark,apache-spark-standalone,Scala,Apache Spark,Apache Spark Standalone,我在本地机器上创建了一个独立的spark(2.1.1)群集 每台机器9芯/80G(总共27芯/240G Ram) 我有一个spark的工作示例,它把从1到x的所有数字相加 代码如下: package com.example import org.apache.spark.sql.SparkSession object ExampleMain { def main(args: Array[String]): Unit = { val spark = SparkSessio

我在本地机器上创建了一个独立的spark(2.1.1)群集 每台机器9芯/80G(总共27芯/240G Ram)

我有一个spark的工作示例,它把从1到x的所有数字相加 代码如下:

package com.example

import org.apache.spark.sql.SparkSession

object ExampleMain {

    def main(args: Array[String]): Unit = {
      val spark = SparkSession.builder
          .master("spark://192.168.1.2:7077")
          .config("spark.driver.maxResultSize" ,"3g")
          .appName("ExampleApp")
          .getOrCreate()
      val sc = spark.SparkContext
      val rdd = sc.parallelize(Lisst.range(1, 1000))
      val sum = rdd.reduce((a,b) => a+b)
      println(sum)
      done
    }

    def done = {
      println("\n\n")
      println("-------- DONE --------")
    }
}
当运行上面的代码时,我会在几秒钟后得到结果 所以我把代码拉长,将所有数字相加,从1到1B(1000000000),然后我就达到了GC开销限制

我读到spark应该将内存溢出到硬盘上,如果没有足够的内存,我已经尝试过使用我的集群配置,但没有帮助

Driver memory = 6G
Number of workers = 24
Cores per worker = 1
Memory per worker = 10
我不是一名开发人员,也不了解Scala,但我想找到一个解决方案,在没有GC问题的情况下运行这段代码

根据@Philantrover请求,我正在添加spark submit命令

/opt/spark-2.1.1/bin/spark-submit \
--class "com.example.ExampleMain" \
--master spark://192.168.1.2:6066 \
--deploy-mode cluster \
/mnt/spark-share/example_2.11-1.0.jar
此外,我的spark/conf如下所示:

  • 从属文件包含我的节点(包括主节点)的3个IP地址
  • spark默认值包括:
    • 星火大师spark://192.168.1.2:7077
    • spark.driver.memory 10g
  • spark-env.sh包含:
    • SPARK\u LOCAL\u DIRS=所有节点之间的共享文件夹
    • SPARK_执行器_内存=10G
    • SPARK\u驱动器\u内存=10G
    • 火花_工人_芯=1
    • SPARK\u WORKER\u内存=10G
    • SPARK\u WORKER\u实例=8
    • SPARK\u WORKER\u DIR=所有节点之间的共享文件夹
    • SPARK\u WORKER\u OPTS=“-Dspark.WORKER.cleanup.enabled=true”

谢谢

我想问题是您创建了一个
列表
,驱动程序上有10亿个条目,这是一个巨大的数据结构(4GB)。以编程方式创建Dataset/RDD有一种更有效的方法:

val rdd = spark.range(1000000000L).rdd

您可以将您的
spark submit
命令添加到问题中吗?@philantrover添加了spark submit+my spark配置尝试将
--conf“spark.driver.maxrultsize=3G”
添加到您的spark submit而不是您的程序中。我还没有使用Spark独立集群,但我认为驱动程序会在执行程序中的
conf.set(..)
之前启动。我可能错了。您是否尝试使用
val rdd=spark.range(1000000000L).rdd
创建rdd?我认为创建一个包含10亿个条目的scala列表是这里的问题…@philantrovert-配置没有帮助,21分钟后作业失败