SparkSession - Spark SQL 的 入口
SparkSession - Spark SQL 的 入口
翻譯自:https://jaceklaskowski.gitbooks.io/mastering-apache-spark/content/spark-sql-SparkSession.html
概述
SparkSession 是 Spark SQL 的入口。使用 Dataset 或者 Datafram 編寫 Spark SQL 應用的時候,第一個要建立的對象就是 SparkSession。
Note:在 Spark 2.0 中, SparkSession 合并了 SQLContext 和 HiveContext。
你可以通過 SparkSession.builder 來建立一個 SparkSession 的執行個體,并通過 stop 函數來停止 SparkSession。
import org.apache.spark.sql.SparkSession
val spark: SparkSession = SparkSession.builder
.appName("My Spark Application") // optional and will be autogenerated if not specified
.master("local[*]") // avoid hardcoding the deployment environment
.enableHiveSupport() // self-explanatory, isn\'t it?
.config("spark.sql.warehouse.dir", "target/spark-warehouse")
.getOrCreate
你可以在一個 Spark 應用中使用多個 SparkSession, 這樣子就可以通過 SparSession 将多個關系實體隔離開來(可以參考 catalog 屬性)。
scala> spark.catalog.listTables.show
+------------------+--------+-----------+---------+-----------+
| name|database|description|tableType|isTemporary|
+------------------+--------+-----------+---------+-----------+
|my_permanent_table| default| null| MANAGED| false|
| strs| null| null|TEMPORARY| true|
+------------------+--------+-----------+---------+-----------+
在 SparkSession 的内部, 包含了SparkContext, SharedState,SessionState 幾個對象。下表中介紹了每個對象的大體功能:
Name | Type | Description |
---|---|---|
sparkContext | SparkContext | spark功能的主要入口點。可以通過 sparkConext在叢集上建立RDD, accumulators 和 broadcast variables |
existingSharedState | Option[SharedState] | 一個内部類負責儲存不同session的共享狀态 |
parentSessionState | Option[SessionState] | 複制父session的狀态 |
下圖是 SparkSession 的類和方法, 這些方法包含了建立 DataSet, DataFrame, Streaming 等等。
Method | Description |
---|---|
builder | "Opens" a builder to get or create a SparkSession instance |
version | Returns the current version of Spark. |
implicits | Use import spark.implicits._ to import the implicits conversions and create Datasets from (almost arbitrary) Scala objects. |
emptyDataset[T] | Creates an empty Dataset[T]. |
range | Creates a Dataset[Long]. |
sql | Executes a SQL query (and returns a DataFrame). |
udf | Access to user-defined functions (UDFs). |
table | Creates a DataFrame from a table. |
catalog | Access to the catalog of the entities of structured queries |
read | Access to DataFrameReader to read a DataFrame from external files and storage systems. |
conf | Access to the current runtime configuration. |
readStream | Access to DataStreamReader to read streaming datasets. |
streams | Access to StreamingQueryManager to manage structured streaming queries. |
newSession | Creates a new SparkSession. |
stop | Stops the SparkSession. |
Builder
Builder 是 SparkSession 的構造器。 通過 Builder, 可以添加各種配置。
Builder 的方法如下:
Method | Description |
---|---|
getOrCreate | 擷取或者建立一個 sparkSession |
enableHiveSupport | 增加支援 hive Support |
appName | 設定 application 的名字 |
config | 設定各種配置 |
import org.apache.spark.sql.SparkSession
val spark: SparkSession = SparkSession.builder
.appName("My Spark Application") // optional and will be autogenerated if not specified
.master("local[*]") // avoid hardcoding the deployment environment
.enableHiveSupport() // self-explanatory, isn\'t it?
.getOrCreate
ShareState
ShareState 是 SparkSession 的一個内部類,負責儲存多個有效session之間的共享狀态。下表介紹了ShareState的屬性。
Name | Type | Description |
---|---|---|
cacheManager | CacheManager | 這個是 SQLContext 的支援類,會自動儲存 query 的查詢結果。這樣子查詢在執行過程中,就可以使用這些查詢結果 |
externalCatalog | ExternalCatalog | 儲存外部系統的 catalog |
globalTempViewManager | GlobalTempViewManager | 一個線程安全的類,用來管理 global temp view, 并提供 create , update , remove 的等原子操作,來管理這些 view |
jarClassLoader | NonClosableMutableURLClassLoader | 加載使用者添加的 jar 包 |
listener | SQLListener | 一個監聽類 |
sparkContext | SparkContext | Spark 的核心入口類 |
warehousePath | String | MetaStore 的位址,可以通過 spark.sql.warehouse.dir 或者 hive-site.xml 中的 hive.metastore.warehouse.dir 來指定, Spark 會覆寫 hive 的參數 |
ShareState 會使用一個 sparkContext 作為構造參數。如果可以在 CLASSPATH 中找到 hive-site.xml,ShareState 會将它加入到 sparkContext 的 hadoop configuration 中。
通過設定
log4j.logger.org.apache.spark.sql.internal.SharedState=INFO
可以看到相應的日志。