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