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...