apache spark Executor内存与Java堆大小内存
我的集群大小是3个节点,每个节点都有8 GB RAM
和2 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 楼答案
将
shuffle.partition
增加到1000或更多,应该可以解决问题您还可以尝试使用
spark.default.parallelism