有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

apache spark Executor内存与Java堆大小内存

我的集群大小是3个节点,每个节点都有8 GB RAM2 core。我以以下方式为spark增加执行器内存:

//creating spark session
    val spark = SparkSession
      .builder()
      .appName(s"${this.getClass.getSimpleName}")
      .config("spark.sql.shuffle.partitions", "9")
      .config("spark.executor.memory", "3g")
      .config("spark.executor.cores", "1")
      .master("local[*]")
      .getOrCreate()

因此,4个执行器(每个执行器有3G RAM)将启动,每个核心有一个任务

我在这里执行的代码如下:

val seq2 = List((125,0),(125,125),(125,250),(125,375))

val urls = spark.sparkContext.parallelize(seq2).toDF()

val actual_data = urls.map(x => HTTPRequestParallel.ds(x.getInt(0).toString,x.getInt(1).toString,t0)).persist(StorageLevel.MEMORY_AND_DISK)

val dataframe = spark.read.option("header","true").json(actual_data)

当我并行调用4个web api,每次调用返回大约1 Gig的数据,并在一个方法中序列化时,我仍然会遇到java heap memory问题

据我所知,api是同步调用,所以它将在某处获取和存储传入数据。那个位置在哪里,是节点的jvm堆内存还是分配的执行器内存


共 (1) 个答案

  1. # 1 楼答案

    shuffle.partition增加到1000或更多,应该可以解决问题

    您还可以尝试使用spark.default.parallelism