2015-02-26 2 views
2

Nous utilisons la fonctionnalité SQL de Spark SQL pour joindre et analyser des fichiers de données locaux avant de les télécharger ailleurs. Bien que nous soyons satisfaits de la fonctionnalité, nous aimerions modifier les configurations pour obtenir des performances supplémentaires.Spark SQL configurations optimales pour un processus de noeud unique?

Nous n'avons pas de cluster, mais nous aurons probablement 5 nœuds individuels qui diffusent tous les fichiers depuis S3, en les analysant séparément (ils ne s'appuient sur aucun autre fichier externe) séparément et en les téléchargeant. Malheureusement, nous utilisons l'API Java.

Ce sont les configs que j'expérimente, et n'importe quelle aide serait impressionnante.

(Every RDD is being cached) 
spark.sql.inMemoryColumnarStorage.compressed true 
spark.sql.inMemoryColumnarStorage.batchSize 20000(doubled) 
spark.sql.autoBroadcastJoinThreshold 10485760 
spark.sql.shuffle.partitions 10(since its a local process, reducing from 200) 

Répondre

1

Vous pouvez définir la propriété suivante ainsi qui fera en sorte que les lots s'élagués en fonction de ses colonnes statistiques lorsqu'une requête est tirée: -

spark.sql.inMemoryColumnarStorage.partitionPruning true 

Remarque - C'est le nom de la propriété en ce qui concerne Spark 1.2. Pour 1.1, je me souviens que le nom de la propriété est un peu différent. Veuillez vérifier la même chose si vous utilisez 1.1.

+0

Merci! Cela a vraiment accéléré mon processus d'environ 30 ~ 50%. Y at-il une ressource qui approfondit ce que l'élagage fait? Merci encore! – JeffLL

+0

Vous ne savez pas à propos de la ressource, mais vous pouvez vérifier le code source de Spark spécifiquement après la classe et les autres classes renouvelables: - https://github.com/apache/spark/blob/branch-1.2/sql/core/src/main/scala/ org/apache/spark/sql/colonne/InMemoryColumnarTableScan.scala # L297 – DexterMorgan