Вот моя конфигурация кластера :
Главные узлы: 1 (16 ВЦП, 64 ГБ памяти)
Рабочие узлы: 2 (всего 64 ВЦП, 256ГБ памяти)
Вот запрос Hive Я пытаюсь запустить на Оболочка Spark SQL :
select a.*,b.name as name from (
small_tbl b
join
(select *
from large_tbl where date = '2019-01-01') a
on a.id = b.id);
Вот план выполнения запроса , как показано в интерфейсе Spark:
![enter image description here](https://i.stack.imgur.com/TdKgX.jpg)
Свойства конфигурации, заданные при запуске оболочки, следующие:
spark-sql --conf spark.driver.maxResultSize=30g \
--conf spark.broadcast.compress=true \
--conf spark.rdd.compress=true \
--conf spark.memory.offHeap.enabled=true \
--conf spark.memory.offHeap.size=304857600 \
--conf spark.dynamicAllocation.enabled=false \
--conf spark.executor.instances=12 \
--conf spark.executor.memory=16g
--conf spark.executor.cores=5 \
--conf spark.driver.memory=32g \
--conf spark.yarn.executor.memoryOverhead=512 \
--conf spark.executor.extrajavaoptions=-Xms20g \
--conf spark.executor.heartbeatInterval=30s \
--conf spark.shuffle.io.preferDirectBufs=true \
--conf spark.memory.fraction=0.5
Я испробовал большинство предложенных решений здесь и здесь , что очевидно в наборе свойстввыше. Насколько я знаю, не стоит увеличивать свойство maxResultSize на стороне драйвера, поскольку наборы данных могут выходить за пределы объема памяти драйвера, и драйвер не должен использоваться для хранения данных в таком масштабе.
Я успешно выполнил запрос на движке Tez, который занял около 4 минут, тогда как Spark занимает более 15 минут и внезапно завершает работу из-за недостатка места в куче.
Я твердо верюдолжен быть способ ускорить выполнение запроса в Spark. Пожалуйста, предложите мне решение, которое работает для такого рода запросов.