мы используем Spark2 Thrift для выполнения запросов Hive.
Thrift входит в состав HDP 2.6, а наша искровая версия — 2.1.0.2.6.0.3-8.
Чем больше запросов мы выполняем одновременно, тем быстрее мы сталкиваемся с OOM в драйвере. Эти запросы также содержат JOIN и UNION.
из jstat кажется, что утечки памяти нет, однако независимо от того, сколько памяти выделено драйверу, кажется, что ее никогда не бывает достаточно. Чем больше запросов выполняется одновременно, тем быстрее драйвер Thrift начинает выполнять полную сборку мусора до тех пор, пока не выйдет из строя, поскольку полная сборка мусора не может очистить старую память (поскольку она используется).
OOM никогда не возникает в исполнителях, только в драйвере.
Кто-нибудь работает с Thrift через искру и сталкивается с этой проблемой? и если да, то как можно настроить драйвер Thrift, чтобы он не вылетал на OOM при одновременном выполнении нескольких запросов?
Вот конфигурации, которые мы используем:
Драйвер бережливости:
- spark.driver.memory=15g
Бережливые исполнители:
spark.executor.memory=10g
количество ядер = 7
параметры конфигурации из /usr/hdp/current/spark2-thriftserver/conf/spark-thrift-sparkconf.conf:
spark.broadcast.blockРазмер 32 м
spark.driver.extraLibraryPath /usr/hdp/current/hadoop-client/lib/native:/usr/hdp/current/hadoop-client/lib/native/Linux-amd64-64
spark.driver.maxResultSize 0
spark.dynamicAllocation.enabled true
spark.dynamicAllocation.executorIdleTimeout 45 с
spark.dynamicAllocation.initialExecutors 2
spark.dynamicAllocation.maxExecutors 15
spark.dynamicAllocation.minExecutors 0
spark.dynamicAllocation.schedulerBacklogTimeout 1 с
spark.eventLog.dir hdfs:///spark2-history/
spark.eventLog.enabled true
spark.executor.extraLibraryPath /usr/hdp/current/hadoop-client/lib/native:/usr/hdp/current/hadoop-client/lib/native/Linux-amd64-64
spark.executor.memory 10g
spark.files.maxPartitionBytes 268435456
spark.files.openCostInBytes 33554432
spark.hadoop.cacheConf false
spark.history.fs.logDirectory hdfs:///spark2-history/
spark.history.provider org.apache.spark.deploy.history.FsHistoryProvider
spark.kryoserializer.buffer.max 2000m
клиент пряжи spark.master
spark.memory.offHeap.enabled true
spark.memory.offHeap.size 104857600
spark.scheduler.allocation.file /usr/hdp/current/spark2-thriftserver/conf/spark-thrift-fairscheduler.xml
spark.scheduler.mode ЧЕСТНЫЙ
spark.shuffle.service.enabled true
spark.sql.autoBroadcastJoinThreshold 1073741824
spark.sql.shuffle.partitions 100
spark.storage.memoryMapThreshold 8 м