Spark SQL關(guān)于性能調(diào)優(yōu)選項詳解
Spark_SQL性能調(diào)優(yōu)
眾所周知,正確的參數(shù)配置對提升Spark的使用效率具有極大助力,幫助相關(guān)數(shù)據(jù)開發(fā)、分析人員更高效地使用Spark進行離線批處理和SQL報表分析等作業(yè)。
性能調(diào)優(yōu)選項
| 選型 | 默認(rèn)值 | 用途 |
|---|---|---|
| spark.sql.codegen | false | 設(shè)為 true 時,Spark SQL 會把每條查詢詞語在運行時編譯為 Java 二進制代碼。這可以提高大型查詢的性能,但在進行小規(guī)模查詢時會變慢 |
| spark.sql.inMemoryColumnarStorage.compressed | false | 自動對內(nèi)存中的列式存儲進行壓縮 |
| spark.sql.inMemoryColumnarStorage.batchSize | 1000 | 列示緩存時的每個批處理的大小。把這個值調(diào)大可能會導(dǎo)致內(nèi)存不夠的異常 |
| spark.sql.parquet.compression.codec | snappy | 使用哪種壓縮編碼器??蛇x的選項包括 uncompressed/snappy/gzip/lzo |
幾種壓縮選項的特點
spark.sql.parquet.compressed.codec 默認(rèn)值為snappy 這個參數(shù)代表使用哪種壓縮編碼器。可選的選項包括uncompressed/snappy/gzip/lzo
uncompressed這個顧名思義就是不用壓縮的意思
| 格式 | 可分割 | 平均壓縮速度 | 文本文件壓縮效率 | Hadoop壓縮編解碼器 | 純java實現(xiàn) | 原生 | 備注 |
|---|---|---|---|---|---|---|---|
| snappy | 否 | 非???/td> | 低 | org.apache.hadoop.io.compress.SnappyCodec | 否 | 是 | Snapp有純java的移植版,但是在Spark/Hadoop中不能用 |
| gzip | 否 | 快 | 高 | org.apache.hadoop.io.compress.GzipCodec | 是 | 是 | |
| lzo | 否 | 非常快 | 中等 | org.apache.hadoop.io.compress.LzoCodec | 是 | 是 | 需要在每個節(jié)點上安裝LZO |
可選的調(diào)優(yōu)選項
| Property Name | Default | Meaning |
|---|---|---|
| spark.sql.files.maxPartitionBytes | 128 MB | 讀取文件時打包到單個分區(qū)的最大字節(jié)數(shù) |
| spark.sql.files.openCostInBytes | 4 MB | 打開一個文件的估計成本,取決于有多少字節(jié)可以被同時掃描,當(dāng)多個文件放入一個 partition 時使用此方法。最好時過度估計,這樣帶有小文件的 partition 就會比帶有大文件的 partition 快 |
| spark.sql.broadcastTimeout | 300 | 廣播連接中等待時的超時時間(以秒為單位) |
| spark.sql.autoBroadcastJoinThreshold | 10 MB | 配置一個表的最大大小,以便在執(zhí)行連接向所有節(jié)點廣播,將該值設(shè)置為 -1 的話廣播將會被禁用 |
| spark.sql.shuffle.partitions | 200 | 配置 partition 的使用數(shù)量當(dāng) shuffle 數(shù)據(jù)或聚合數(shù)據(jù)時 |
代碼示例
初始化設(shè)置Spark Application配置
構(gòu)建SparkSession實例對象
import org.apache.commons.lang3.SystemUtils
import org.apache.spark.SparkConf
import org.apache.spark.sql.streaming.OutputMode
import org.apache.spark.sql.{DataFrame, SparkSession}
object PerformanceTuneDemo {
def main(args: Array[String]): Unit = {
// 構(gòu)建SparkSession實例對象,設(shè)置相關(guān)屬性參數(shù)值
val sparkConf = new SparkConf()
.setAppName(this.getClass.getSimpleName.stripSuffix("$"))
.set("spark.sql.session.timeZone", "Asia/Shanghai")
.set("spark.sql.files.maxPartitionBytes", "134217728")
.set("spark.sql.files.openCostInBytes", "134217728")
.set("spark.sql.shuffle.partitions", "3")
.set("spark.sql.autoBroadcastJoinThreshold", "67108864")
// 構(gòu)建SparkSession實例對象
val spark: SparkSession = SparkSession.builder()
.config(sparkConf)
.getOrCreate()
}
}
到此這篇關(guān)于Spark SQL關(guān)于性能調(diào)優(yōu)選項詳解的文章就介紹到這了,更多相關(guān)Spark SQL性能調(diào)優(yōu)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot連接Hive實現(xiàn)自助取數(shù)的示例
這篇文章主要介紹了SpringBoot連接Hive實現(xiàn)自助取數(shù)的示例,幫助大家更好的理解和使用springboot框架,感興趣的朋友可以了解下2020-12-12
Java Jedis NOAUTH Authentication required問題解決方法
這篇文章主要介紹了Java Jedis NOAUTH Authentication required問題解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-07-07
淺談Java中實現(xiàn)深拷貝的兩種方式—clone() & Serialized
這篇文章主要介紹了Java中實現(xiàn)深拷貝的兩種方式—clone() & Serialized,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03
SpringBoot中使用Zookeeper實現(xiàn)分布式鎖的案例
本文主要介紹了SpringBoot中使用Zookeeper實現(xiàn)分布式鎖的案例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-01-01
Java String方法獲取字符出現(xiàn)次數(shù)及字符最大相同部分示例
這篇文章主要介紹了Java String方法獲取字符出現(xiàn)次數(shù)及字符最大相同部分,涉及java字符串的遍歷、比較、計算等相關(guān)操作技巧,需要的朋友可以參考下2017-09-09
Java中使用內(nèi)存映射實現(xiàn)大文件上傳實例
這篇文章主要介紹了Java中使用內(nèi)存映射實現(xiàn)大文件上傳實例,本文對比測試了FileInputStream 或者FileOutputStream 抑或RandomAccessFile的頻繁讀寫操作,最后總結(jié)出映射到內(nèi)存后進行讀寫以提高速度,需要的朋友可以參考下2015-01-01
Java設(shè)計模式之工廠模式(Factory模式)介紹
這篇文章主要介紹了Java設(shè)計模式之工廠模式(Factory模式)介紹,本文講解了為何使用工廠模式、工廠方法、抽象工廠、Java工廠模式舉例等內(nèi)容,需要的朋友可以參考下2015-03-03
Java封裝數(shù)組實現(xiàn)在數(shù)組中查詢元素和修改元素操作示例
這篇文章主要介紹了Java封裝數(shù)組實現(xiàn)在數(shù)組中查詢元素和修改元素操作,結(jié)合實例形式分析了java針對數(shù)組元素查詢、修改的封裝操作實現(xiàn)技巧,需要的朋友可以參考下2020-03-03
@Autowired注解注入的xxxMapper報錯問題及解決
這篇文章主要介紹了@Autowired注解注入的xxxMapper報錯問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11

