撰寫SparkSession物件工具類

后續業務開發程序中,每個子業務(kudu、es、clickhouse等等)都會創建SparkSession物件,以及初始化開發環境,因此將環境初始化操作封裝成工具類,方便后續使用
實作步驟:
- 在公共模塊的scala目錄的common程式包下創建 SparkUtils 單例物件
- 實作方法:創建SparkConf物件
- 實作方法:預定義當前環境的運行模式
- 實作方法:創建獲取SparkSession物件
package cn.it.logistics.common
import org.apache.commons.lang.SystemUtils
import org.apache.spark.SparkConf
import org.apache.spark.sql.SparkSession
/**
* spark操作的工具類
*/
object SparkUtils {
/**
* 創建sparkConf物件
*/
lazy val sparkConf = (appName:String) =>{
val conf: SparkConf = new SparkConf()
//設定應用的名稱
.set("spark.app.name", this.getClass.getSimpleName)
//設定時區
.set("spark.sql.session.timeZone", "Asia/Shanghai")
//設定單個磁區可容納的最大位元組數,默認是128M, 等同于block塊的大小
.set("spark.sql.files.maxPartitionBytes", "134217728")
//設定合并小檔案的閾值,避免每個小檔案占用一個磁區的情況
.set("spark.sql.files.openCostInBytes", "134217728")
//設定join或者shuffle的時候使用的磁區數,默認情況下磁區數是200
.set("spark.sql.shuffle.partitions", "600")
//設定join操作時可以廣播到worker節點的最大位元組大小,可以避免shuffer操作
.set("spark.sql.autoBroadcastJoinThreshold", "67108864")
//回傳sparkConf物件
conf
}
/**
* 預定義可用于window和linux中的運行模式
*/
lazy val autoSettingEnv = (sparkConf:SparkConf) =>{
//本地運行環境
if(SystemUtils.IS_OS_WINDOWS || SystemUtils.IS_OS_MAC){
//本地環境LOCAL_HADOOP_HOME
System.setProperty("hadoop.home.dir", Configuration.LOCAL_HADOOP_HOME)
//設定運行環境和checkpoint路徑
sparkConf.set("spark.master", "local[*]")
.set("spark.sql.streaming.checkpointLocation", Configuration.sparkAppWinCheckpointDir)
.set("spark.sql.warehouse.dir", Configuration.sparkAppWinDataDir)
}else{
//集群運行環境(生產環境)
//生產環境
sparkConf.set("spark.master", "yarn")
.set("spark.sql.streaming.checkpointLocation", Configuration.sparkAppDfsCheckpointDir)
.set("spark.sql.warehouse.dir", Configuration.sparkAppDfsDataDir)
}
//回傳sparkConf物件
sparkConf
}
/**
* 創建sparkSession物件
* @param sparkConf
*/
def getSparkSession(sparkConf: SparkConf) = {
SparkSession.builder().config(sparkConf).getOrCreate()
}
}
- 📢博客主頁:https://lansonli.blog.csdn.net
- 📢歡迎點贊 👍 收藏 ?留言 📝 如有錯誤敬請指正!
- 📢本文由 Lansonli 原創,首發于 CSDN博客🙉
- 📢大資料系列文章會每天更新,停下休息的時候不要忘了別人還在奔跑,希望大家抓緊時間學習,全力奔赴更美好的生活?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/438088.html
標籤:其他
