Hiveクエリを実行するためにSpark2 Thriftを使用します。複数のHiveクエリを同時に実行する場合のThriftドライバOutOfMemory
スレリフトはHDP 2.6の一部として提供され、スパークバージョンは2.1.0.2.6.0.3-8です。
複数のクエリを同時に実行するほど、ドライバでOOMが発生する速度が速くなります。これらのクエリには、JOINとUNIONも含まれています。
jstatからはメモリリークはないようですが、ドライバにどのくらいのメモリが与えられても、それは十分ではないようです。同時に実行されるクエリが多いほど、高速なThriftドライバはクラッシュするまで完全なGCを実行し始めます。これは、完全なGCが(使用されているので)古いメモリをクリーンアップできないためです。
OOMはエグゼキュータでは発生せず、ドライバでのみ発生します。
誰もがThrift over sparkでこの問題に遭遇しますか?もしそうなら、複数のクエリを同時に実行しているときに、ThriftドライバをOOMでクラッシュさせないように構成する方法はありますか?
リサイクルスパークドライバ:
- spark.driver.memory = 15グラム
リサイクルスパークエグゼキュータ:
spark.executor.memory = 10グラム
NUMコア/usr/hdp/current/spark2-thriftserver/conf/spark-thrift-sparkconf.confから= 7つの
これらは我々が使用する構成であります
構成パラメータ:
spark.broadcast.blockSizeの32メートル
spark.driver.extraLibraryPath /私たちR/HDP /現在/ Hadoopのクライアント/ネイティブ/ libにします。/ usr/HDP /現在/ Hadoopのクライアント/ libに/ネイティブ/ Linuxの-amd64-64
spark.driver.maxResultSize 0
spark.dynamicAllocation.enabled真
spark.dynamicAllocation.executorIdleTimeoutの45S
spark.dynamicAllocation.initialExecutors 2
spark.dynamicAllocation.maxExecutors 15
spark.dynamicAllocation.minExecutors 0
spark.dynamicAllocation。/// spark2履歴/
spark.eventLog.enabled真
spark.executor.extraLibraryPathは/ usr/HDP /現在/ Hadoopの:
spark.eventLog.dir HDFS 1S schedulerBacklogTimeout -client/libに/ネイティブ:は/ usr/HDP /現在/ Hadoopのクライアント/ libに/ネイティブ/ Linuxの-amd64-64
spark.executor.memory 10グラム
spark.files.maxPartitionBytes 26843 5456
spark.files.openCostInBytes 33554432
spark.hadoop.cacheConf偽
spark.history.fs.logDirectory HDFS:/// spark2履歴/
スパーク.history.provider org.apache.spark.deploy.history.FsHistoryProvider
spark.kryoserializer.buffer.max 2000m
spark.master糸-クライアント
spark.memory.offHeap.size 104857600
spark.scheduler.allocation.fileは/ usr
を真spark.memory.offHeap.enabled /hdp/current/spark2-thriftserver/conf/spark-thrift-fairscheduler.xml
spark.scheduler.modeのFAIR
spark.shuffle.service.enabled真
spark.sql.autoBroadcastJoinThreshold 1073741824
spark.sql.shuffle.partitions 100
spark.storage.memoryMapThresholdの8メートル
「Spark over Thrift」と言えば、より適切な用語になります。 – JensG