Spark Sql 2.3.0 блоков в плане при запуске внутреннего соединения с большой таблицей (20 000 столбцов) - PullRequest
0 голосов
/ 24 марта 2020

Сталкивались ли вы с подобной проблемой?

  1. Сохранить все выходные столбцы (20000 + столбцы)

Когда я использую небольшую таблицу (2000 строк) внутреннее объединение большой таблицы с несколькими преобразованиями (20 000 столбцов, около 2 200 000 строк), выделение блоков sql в dataFrame.explain в течение нескольких часов, затем запуск задания и выполнение через 5 минут (широковещательное соединение).

Выберите часть столбцов (~ 4000 столбцов)

Работа будет выполняться нормально.

Я проверил план, кажется, все в порядке. Есть ли какие-либо конфигурации, которые мне нужно добавить к работе? Вот план c логики для генерации большой таблицы (более 20 000 столбцов) введите описание изображения здесь

Вот объединение sql:

введите описание изображения здесь

Job Config:

  spark.executor.memory = "8g"
  spark.executor.cores= "2"
  spark.driver.memory= "6g"
  spark.driver.maxResultSize= "4g"
  spark.driver.cores= "2"
  spark.yarn.max.executor.failures= "1500"
  spark.executor.memoryOverhead="2048"
  spark.default.parallelism="1800"
  spark.dynamicAllocation.enabled="true"
  spark.dynamicAllocation.initialExecutors="8"
  spark.dynamicAllocation.maxExecutors="300"
  spark.dynamicAllocation.minExecutors="20"
  spark.shuffle.service.enabled="true"
  spark.sql.caseSensitive="true"
  spark.sql.tungsten.enabled="true"
  spark.sql.constraintPropagation.enabled="true"
  spark.io.compression.codec="snappy"
  spark.speculation="true"
  spark.speculation.interval="10s"
  spark.speculation.multiplier="1.5"
  spark.speculation.quantile="0.9"
  spark.serializer="org.apache.spark.serializer.KryoSerializer"
  spark.kryo.registrator="com.paypal.serializer.KryoRegister"
  spark.kryoserializer.buffer.max="1024m"
  spark.kryo.registrationRequired="false"
  spark.hadoop.avro.mapred.ignore.inputs.without.extension="false"
...