Spark SQL
Spark SQL Introduction
- Spark SQL
- Spark SQL是Apache Spark中用來處理結構化數據的子模組。
- 不僅僅侷限於處理SQL,還可以支持Hive、Parquet等外部數據源的操作與轉換。
- 在Spark程式中直接使用SQL語句或DataFrame API。
- 使用通用的方法訪問不同的外部數據源,如Hive, Avro, Parquet, ORC等,並且支持不同數據源間的Join操作。
- 透過存取MetaStore對既有的Hive進行存取。
- 支持JDBC與ODBC的訪問方式。
Spark SQL Working with Hive
- Hive Tables
- Spark SQL支援直接從Hive直接讀寫數據。
- Spark SQL中沒有包含Hive的依賴庫,但只要能在classpath內找到(設置$HIVE_HOME環境變量),那麼Spark SQL可以自動載入依賴庫。
- Hive的依賴庫必須在所有Spark的worker節點存在,Spark SQL才能透過Hive的序列化與反序列化操作(serialization and deserialization)進行Hive的數據存取。
- 若生產環境中是跑在YARN的環境上,則配置hive-site.xml即可,透過指定YARN的conf目錄,可以自動找到core-site.xml與hdfs-site.xml。
- Spark SQL在生產環境不需要安裝Hive,只要透過hive-site.xml指定MataStore的相關訊息,讓Spark SQL可以存取到MetaStore即可。
Preparing for Working with Hive
- 啟動HDFS
- Hive的數據存放在HDFS之上,所以要啟動HDFS
- 將hive-site.xml複製到$SPARK_HOME/conf中
- 讓Spark SQL得知MetaStore的存取方式
- 確認MySQL運作正常
- Hive的MetaData是存放在MetaStore中,而MetaStore是存放在MySQL當中,
- 指定MySQL的Driver給Spark SQL
- 透過 –jars指定
|
|
- Create Hive Table
|
|
- spark-shell
- 透過–jars指定MySQL Driver
- 直接存取Hive寫入的數據
|
|
- 在Web UI中顯示對應的作業
- 右上角顯示為Spark shell提交的作業
- spark-sql
- 與spark-shell的參數無異
|
|
在Web UI中顯示對應的作業
- 右上角顯示為SparkSQL提交的作業
cache table
- 對table進行cache操作,接下來的操作會直接從cache中讀取,降低讀取的數據量。
|
|
執行cache後,在Web UI中的Storage頁面顯示對應的資訊
執行select後,在Web UI中顯示對應的作業
- 可以察覺讀入的數據為728B,與cache的大小相同。
- Spark SQL中的cache操作為eager的,與Spark Core中的cache操作不同,Spark Core中的cache操作為lazy的。
- uncache table
- 執行uncache後,Web UI中的Storage頁面的對應資訊也會消失
|
|