2015-02-26 2 views
2

Мы используем функциональные возможности SQL-сервера Spark SQL для совместной работы и анализа некоторых локальных файлов данных перед их загрузкой в ​​другом месте. Хотя мы довольны функциональностью, мы хотели бы настроить конфигурацию, чтобы выжать дополнительную производительность.Оптимальные конфигурации Spark SQL для процесса с одним узлом?

У нас нет кластера, но у вас, вероятно, будет 5 отдельных узлов, все потоковые файлы из S3, разгладя их (они не полагаются на какие-либо другие внешние файлы) отдельно и загружают их. К сожалению, мы используем Java api.

Это конфигурации, с которыми я экспериментирую, и любая помощь была бы потрясающей.

(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) 

ответ

1

Вы можете установить следующее свойство, а также которые будут убедиться, что партии получают обрезают на основе своей статистики столбцов, когда запрос вызывается: -

spark.sql.inMemoryColumnarStorage.partitionPruning true 

Примечание - Это имя свойства что касается Spark 1.2. В версии 1.1 я помню, что имя свойства немного отличается. Если вы используете 1.1, проверьте его.

+0

Спасибо! Это действительно ускорило мой процесс примерно на 30-50%. Есть ли ресурс, который углубляется в то, что делает обрезка? Еще раз спасибо! – JeffLL

+0

Не уверен в ресурсе, но вы можете проверить исходный код Искры, конкретно следуя классу и другим вращающимся классам: - https://github.com/apache/spark/blob/branch-1.2/sql/core/src/main/scala/ орг/Apache/искровой/SQL/столбчатый/InMemoryColumnarTableScan.scala # L297 – DexterMorgan