# 性能調優
對于某些工作負載,可以在通過在內存中緩存數據或者打開一些實驗選項來提高性能。
## 在內存中緩存數據
Spark SQL可以通過調用`sqlContext.cacheTable("tableName")`方法來緩存使用柱狀格式的表。然后,Spark將會僅僅瀏覽需要的列并且自動地壓縮數據以減少內存的使用以及垃圾回收的
壓力。你可以通過調用`sqlContext.uncacheTable("tableName")`方法在內存中刪除表。
注意,如果你調用`schemaRDD.cache()`而不是`sqlContext.cacheTable(...)`,表將不會用柱狀格式來緩存。在這種情況下,`sqlContext.cacheTable(...)`是強烈推薦的用法。
可以在SQLContext上使用setConf方法或者在用SQL時運行`SET key=value`命令來配置內存緩存。
Property Name | Default | Meaning
--- | --- | ---
spark.sql.inMemoryColumnarStorage.compressed | true | 當設置為true時,Spark SQL將為基于數據統計信息的每列自動選擇一個壓縮算法。
spark.sql.inMemoryColumnarStorage.batchSize | 10000 | 柱狀緩存的批數據大小。更大的批數據可以提高內存的利用率以及壓縮效率,但有OOMs的風險
## 其它的配置選項
以下的選項也可以用來調整查詢執行的性能。有可能這些選項會在以后的版本中棄用,這是因為更多的優化會自動執行。
Property Name | Default | Meaning
--- | --- | ---
spark.sql.autoBroadcastJoinThreshold | 10485760(10m) | 配置一個表的最大大小(byte)。當執行join操作時,這個表將會廣播到所有的worker節點。可以將值設置為-1來禁用廣播。注意,目前的統計數據只支持Hive Metastore表,命令`ANALYZE TABLE <tableName> COMPUTE STATISTICS noscan`已經在這個表中運行。
spark.sql.codegen | false | 當為true時,特定查詢中的表達式求值的代碼將會在運行時動態生成。對于一些擁有復雜表達式的查詢,此選項可導致顯著速度提升。然而,對于簡單的查詢,這個選項會減慢查詢的執行
spark.sql.shuffle.partitions | 200 | 配置join或者聚合操作shuffle數據時分區的數量
- Introduction
- 快速上手
- Spark Shell
- 獨立應用程序
- 開始翻滾吧!
- RDD編程基礎
- 基礎介紹
- 外部數據集
- RDD 操作
- 轉換Transformations
- map與flatMap解析
- 動作Actions
- RDD持久化
- RDD容錯機制
- 傳遞函數到 Spark
- 使用鍵值對
- RDD依賴關系與DAG
- 共享變量
- Spark Streaming
- 一個快速的例子
- 基本概念
- 關聯
- 初始化StreamingContext
- 離散流
- 輸入DStreams
- DStream中的轉換
- DStream的輸出操作
- 緩存或持久化
- Checkpointing
- 部署應用程序
- 監控應用程序
- 性能調優
- 減少批數據的執行時間
- 設置正確的批容量
- 內存調優
- 容錯語義
- Spark SQL
- 概述
- SparkSQLvsHiveSQL
- 數據源
- RDDs
- parquet文件
- JSON數據集
- Hive表
- 數據源例子
- join操作
- 聚合操作
- 性能調優
- 其他
- Spark SQL數據類型
- 其它SQL接口
- 編寫語言集成(Language-Integrated)的相關查詢
- GraphX編程指南
- 開始
- 屬性圖
- 圖操作符
- Pregel API
- 圖構造者
- 部署
- 頂點和邊RDDs
- 圖算法
- 例子
- 更多文檔
- 提交應用程序
- 獨立運行Spark
- 在yarn上運行Spark
- Spark配置
- RDD 持久化