2021年大数据Spark(三十三):SparkSQL分布式SQL引擎
目錄
分布式SQL引擎
Hive的SQL交互方式
ThriftServer JDBC/ODBC Server
開啟sparksql的thriftserver
使用beeline 客戶端連接
JDBC/ODBC?客戶端
分布式SQL引擎
Hive的SQL交互方式
回顧一下,如何使用Hive進行數據分析的,提供哪些方式交互分析???
?方式一:交互式命令行(CLI)
- bin/hive,編寫SQL語句及DDL語句
?方式二:啟動服務HiveServer2(Hive ThriftServer2)
- 將Hive當做一個服務啟動(類似MySQL數據庫,啟動一個服務),端口為10000
- 1)? ?交互式命令行,bin/beeline,CDH 版本HIVE建議使用此種方式,CLI方式過時
- 2)JDBC/ODBC方式,類似MySQL中JDBC/ODBC方式
SparkSQL模塊從Hive框架衍生發展而來,所以Hive提供的所有功能(數據分析交互式方式)都支持,文檔:http://spark.apache.org/docs/2.4.5/sql-distributed-sql-engine.html。
?
ThriftServer JDBC/ODBC Server
開啟sparksql的thriftserver
Spark Thrift Server將Spark Applicaiton當做一個服務運行,提供Beeline客戶端和JDBC方式訪問,與Hive中HiveServer2服務一樣的。
在企業中使用PySpark和SQL分析數據,尤其針對數據分析行業。
?
?
在$SPARK_HOME目錄下的sbin目錄,有相關的服務啟動命令:
node1上執行
/export/server/spark/sbin/start-thriftserver.sh \--hiveconf hive.server2.thrift.port=10000 \--hiveconf hive.server2.thrift.bind.host=node1 \--master local[2]
停止使用:在實際大數據分析項目中,使用SparkSQL時,往往啟動一個ThriftServer服務,分配較多資源(Executor數目和內存、CPU),不同的用戶啟動beeline客戶端連接,編寫SQL語句分析數據。
/export/server/spark/sbin/stop-thriftserver.sh
?
使用beeline 客戶端連接
使用SparkSQL的beeline客戶端命令行連接ThriftServer,啟動命令如下:
/export/server/spark/bin/beeline!connect jdbc:hive2://node1:10000root123456
show database;編寫SQL語句執行分析:
show tables;
select * from person;
監控WEB UI界面:
http://node1:4040/jobs/
?
JDBC/ODBC?客戶端
參考文檔:https://cwiki.apache.org/confluence/display/Hive/HiveServer2+Clients#HiveServer2Clients-JDBC
?
SparkSQL中提供類似JDBC/ODBC方式,連接Spark ThriftServer服務,執行SQL語句,首先添加Maven依賴庫:
<dependency><groupId>org.apache.spark</groupId><artifactId>spark-hive-thriftserver_2.11</artifactId><version>${spark.version}</version></dependency>
范例演示:采用JDBC方式讀取Hive中db_hive.emp表的數據。
package cn.itcast.sqlimport java.sql.{Connection, DriverManager, PreparedStatement, ResultSet}/*** SparkSQL 啟動ThriftServer服務,通過JDBC方式訪問數據分析查詢*/
object SparkThriftJDBC {def main(args: Array[String]): Unit = {// 定義相關實例對象,未進行初始化var conn: Connection = nullvar ps: PreparedStatement = nullvar rs: ResultSet = nulltry {// TODO:?a. 加載驅動類Class.forName("org.apache.hive.jdbc.HiveDriver")// TODO: b. 獲取連接Connectionconn = DriverManager.getConnection("jdbc:hive2://node1:10000/default","root","123456")// TODO: c. 構建查詢語句val sqlStr: String ="""|select * from person""".stripMarginps = conn.prepareStatement(sqlStr)// TODO: d. 執行查詢,獲取結果rs = ps.executeQuery()// 打印查詢結果while (rs.next()) {println(s"id = ${rs.getInt(1)}, name = ${rs.getString(2)}, age = ${rs.getInt(3)}}")}} catch {case e: Exception => e.printStackTrace()} finally {if (null != rs) rs.close()if (null != ps) ps.close()if (null != conn) conn.close()}}
}
總結
以上是生活随笔為你收集整理的2021年大数据Spark(三十三):SparkSQL分布式SQL引擎的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2021年大数据Spark(三十二):S
- 下一篇: 2021年大数据Spark(三十五):S