gpt4 book ai didi

out-of-memory - 同时运行多个 Hive 查询时 Thrift 驱动程序 OutOfMemory

转载 作者:行者123 更新时间:2023-12-04 03:40:36 29 4
gpt4 key购买 nike

我们使用 Spark2 Thrift 来运行 Hive 查询。

Thrift 是 HDP 2.6 的一部分,我们的 spark 版本是 2.1.0.2.6.0.3-8。

我们同时运行的查询越多,我们在驱动程序中遇到 OOM 的速度就越快。这些查询还包含 JOIN 和 UNION。

从 jstat 看似乎没有内存泄漏,但是无论给驱动程序多少内存,似乎永远都不够用。同时运行的查询越多,Thrift 驱动程序开始执行 full GC 的速度就越快,直到它崩溃,因为 full GC 无法清理旧内存(因为它正在被使用)。

OOM 永远不会发生在执行器中,只会发生在驱动程序中。

有没有人在 spark 上使用 Thrift 并遇到这个问题?如果是的话——如何配置 Thrift 驱动程序使其在同时运行多个查询时不会因 OOM 而崩溃?

这些是我们使用的配置:

Thrift spark driver:

  • spark.driver.memory=15g

Thrift spark 执行者:

  • spark.executor.memory=10g

  • 核心数 = 7

来自/usr/hdp/current/spark2-thriftserver/conf/spark-thrift-sparkconf.conf 的配置参数:

  • spark.broadcast.blockSize 32m

  • 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 45s

  • spark.dynamicAllocation.initialExecutors 2

  • spark.dynamicAllocation.maxExecutors 15

  • spark.dynamicAllocation.minExecutors 0

  • spark.dynamicAllocation.schedulerBacklogTimeout 1s

  • 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.log目录hdfs:///spark2-history/

  • spark.history.provider org.apache.spark.deploy.history.FsHistoryProvider

  • spark.kryoserializer.buffer.max 2000m

  • spark.master yarn 客户端

  • 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 8m

最佳答案

尝试将调度程序模式更改为 FIFO。

此外,不要忘记内存中有 2 个不同的区域:- 贮存- 执行

存储将默认使用 60% 的驱动程序内存,因此如果您从不缓存数据,请减少它以在需要时提供更多内存(他们说它会自动完成,但是......)。

如果可能,尝试将 spark shuffle 分区减少到 100,然后再减少 10。

尝试 offheap(从未测试过但可以提供帮助)。

关于out-of-memory - 同时运行多个 Hive 查询时 Thrift 驱动程序 OutOfMemory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46703105/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com