执行程序内存与Java堆大小内存

时间:2018-10-04 10:01:18

标签: java apache-spark jvm

我的集群大小是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堆内存或执行器内存分配了内存?

1 个答案:

答案 0 :(得分:0)

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

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