2017-10-12 19 views
0

Nous utilisons Spark2 Thrift pour exécuter des requêtes Hive. Thelft fait partie du HDP 2.6 et notre version étincelle est 2.1.0.2.6.0.3-8.Thrift driver OutOfMemory lors de l'exécution simultanée de plusieurs requêtes Hive

Plus nous exécutons de requêtes simultanément, plus vite nous rencontrons OOM dans le pilote. Ces requêtes contiennent également JOINs et UNIONs. De la jstat, il semble qu'il n'y ait pas de fuite de mémoire, mais peu importe la quantité de mémoire donnée au pilote, il semble que ce ne soit jamais suffisant. Plus les requêtes sont exécutées simultanément, plus le pilote Thrift accélère le GC complet jusqu'à ce qu'il tombe en panne, puisque le GC complet ne peut pas nettoyer l'ancienne mémoire (puisqu'elle est utilisée).

Le MOO n'apparaît jamais dans les exécuteurs, seulement dans le pilote.

Est-ce que quelqu'un travaille avec Thrift over spark et rencontre ce problème? et si oui, comment le pilote Thrift peut-il être configuré pour ne pas planter sur OOM lors de l'exécution simultanée de plusieurs requêtes?

Ce sont les configurations que nous utilisons:

pilote d'allumage Thrift:

  • spark.driver.memory = 15g

exécuteurs étincelle Thrift:

  • spark.executor.memory = 10g

  • noyaux num = 7

params de configuration de /usr/hdp/current/spark2-thriftserver/conf/spark-thrift-sparkconf.conf:

  • spark.broadcast.blockSize 32m

  • spark.driver.extraLibraryPath/nous r/HDP/courant/Hadoop client/lib/native:/usr/HDP/courant/Hadoop client/lib/natif/Linux-amd64-64

  • spark.driver.maxResultSize 0

  • spark.dynamicAllocation.enabled véritables

  • 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-histoire/

  • spark.eventLog.enabled vrai

  • spark.executor.extraLibraryPath/usr/HDP/courant/Hadoop -client/lib/native:/usr/HDP/courant/Hadoop-client/lib/natif/Linux-amd64-64

  • spark.executor.memory 10g

  • spark.files.maxPartitionBytes 26843 5456

  • spark.files.openCostInBytes 33554432

  • de faux

  • spark.history.fs.logDirectory hdfs: /// spark2-histoire/

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

  • spark.kryoserializer.buffer.max 2000m

  • spark.master fil client

  • spark.memory.offHeap.enabled vrai

  • spark.memory.offHeap.size 104857600

  • spark.scheduler.allocation.file/usr /hdp/current/spark2-thriftserver/conf/spark-thrift-fairscheduler.xml

  • spark.scheduler.mode FAIR

  • spark.shuffle.service.enabled vrai

  • spark.sql.autoBroadcastJoinThreshold 1073741824

  • spark.sql.shuffle.partitions 100

  • spark.storage.memoryMapThreshold 8 m

+0

Je suppose que "Spark over Thrift" serait le terme le plus approprié. – JensG

Répondre

0

Essayez de changer le mode du planificateur en FIFO.

Aussi, n'oubliez pas, il y a 2 zones différentes en mémoire: - stockage - exécution

Storage utilisera par défaut 60% de la mémoire du pilote, donc si vous jamais cache de données, le diminuer yo donner plus de mémoire où c'est nécessaire (ils disent que c'est fait automatiquement mais ...). Essayez de réduire la partition Shuffle Shuffle à 100 puis à 10 si possible.

Essayez offheap (jamais testé mais pourrait aider).

+0

pourquoi FIFO mieux que FAIR?Aussi - voulez-vous dire utiliser 10 partitions shuffle au lieu de 100? –

+0

FIFO est mieux pour les ressources (car une seule requête est en cours d'exécution à la fois). J'ai trouvé décroissante partition Spark pour une petite charge de travail peut être mieux, essayez-le, vérifiez sur webUI la taille de la partition, le maximum est 2Go, moins de partitions signifient moins d'opérations shuffle (donc moins d'utilisation des ressources). –

+0

nous avons un environnement multi-utilisateur avec plusieurs requêtes qui devraient s'exécuter simultanément. recommandez-vous dans un tel environnement de passer de FAIR à FIFO? et pour diminuer le nombre de partitions de shuffle de 100 à 10? –