十六 SparkSQL常用效能優化

2021-08-21 22:06:35 字數 2236 閱讀 1659

1.在資料統計的時候選擇高效能計算元。

例如dataframe使用foreachpartitions將資料寫入資料庫,不要每個record都去拿一次資料庫連線。通常寫法是每個partition拿一次資料庫連線。

/**

* 將統計結果寫入mysql中

* **優化:

* 在進行資料庫操作的時候,不要每個record都去操作一次資料庫

* 通常寫法是每個partition操作一次資料庫

**/try )

statdao.insertdayvideotopn(list)

})}catch

2.寫資料庫的時候,關閉自動提交,不要每條提交一次,自己手動每個批次提交一次。

var connection:connection = null

var pstmt : preparedstatement = null

try//執行批量處理

pstmt.executebatch()

connection.commit() //手工提交

}catch finally

3.復用已有的資料。然後傳到三個統計方法中使用。

不要在每個統計方法都去做一次相同的過濾。

val logdf = spark.read.format("parquet")

.load("file:///f:\\mc\\sparksql\\data\\afterclean")

val day = "20170511"

/*** **優化:復用已有資料

* 先把該資料拿出來,然後直接傳到每個具體的統計方法中

* 不要在每個具體的統計方法中都執行一次同樣的過濾

** 用$列名得到列值,需要隱式轉換 import spark.implicits._

* */

import spark.implicits._

val dayvideodf = logdf.filter($"day" ===day&&$"cmstype"==="video")

/*** 將這個在後文中會復用多次的dataframe快取到記憶體中

* 這樣後文在復用的時候會快很多

** default storage level (`memory_and_disk`).

* */

dayvideodf.cache()

statdao.deletadatabyday(day)

videoaccesstopnstatdfapi(spark,dayvideodf)

cityaccesstopnstat(spark,dayvideodf)

videotrafficstopnstat(spark,dayvideodf)

//清除快取

dayvideodf.unpersist(true)

列式/行式儲存簡介

這裡建議選擇用parquet格式,之前公司中用的也是這種格式。

hadoop壓縮實現分析

spark中選擇用哪個方式壓縮檔案

1.並行度:spark.sql.shuffle.partitions

乙個partitions相當於乙個task。這是配置當shuffle資料去join或者聚合的時候的partitions的數量。200一般情況下在生產上是不夠的,需要做相應的調整。

調整並行度的方式

bin/spark-submit --class ***.***.xx --name *** --master local[2] --conf spark.sql.shuffle.partitions=230 ***.jar

2.不必要的情況下,關閉分割槽字段型別自動推導

SparkSQL常用效能優化

一 優化 1.在資料統計的時候選擇高效能計算元。例如dataframe使用foreachpartitions將資料寫入資料庫,不要每個record都去拿一次資料庫連線。通常寫法是每個partition拿一次資料庫連線。將統計結果寫入mysql中 優化 在進行資料庫操作的時候,不要每個record都去...

一些常用的Spark SQL調優技巧

一些常用的spark sql調優技巧 使用快取表 在sparksql中,當我們建立表時,我們可以通過呼叫spark.catalog.cachetable tablename 或者dataframe.cache 的方式將表快取起來。這樣spark sql將僅掃瞄所需的列,並自動調整壓縮以最小化記憶體使...

Spark SQL 常用操作

packagesqltext importorg.apache.spark.importorg.apache.spark.sql.sqlcontext importorg.apache.spark.sql.dataframe importorg.apache.spark.sql.types.impo...