我的集群大小是3个节点,每个节点分别有def default_date_value(date)
september = '01-09-2018'.to_date
october = '01-10-2018'.to_date
if date >= october
800_000
elsif date >= september
500_000
else
400_000
end
end
monthly_target_current = default_date_value(start_date_current_week)
monthly_target_prev_1 = default_date_value(start_date_last_week)
monthly_target_prev_2 = default_date_value(start_date_week_last_2_weeks)
和8 GB RAM
。我通过以下方式增加执行程序的内存来激发火花:
2 core
因此具有3gig RAM的4个执行程序将启动,每个内核具有一个任务。
我在这里执行的代码如下:
//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个web-api时,每个调用返回一种方法要进行序列化的大约1 gigs数据,我仍然遇到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)
问题。
我知道api是同步调用,因此它将在某个位置获取和存储传入数据。该位置在哪里,是否为节点的jvm堆内存或执行器内存分配了内存?
答案 0 :(得分:0)
将shuffle.partition
增加到1000或更多,它应该可以解决问题。
您也可以尝试使用spark.default.parallelism
。