學習緻謝
https://www.bilibili.com/video/BV1Xz4y1m7cv?p=66
說明
Hive的SQL互動方式
方式1∶互動式指令行(CLI)
· bin/hive
,編寫SQL語句及DDL語句
方式2: 啟動服務HiveServer2 (Hive ThriftServer2)
·将Hive當做一個服務啟動(類似MySQL資料庫,啟動一個服務),端口為10000
·互動式指令行,
bin/beeline
,CDH 版本HIVE建議使用此種方式,CLI方式過時
· 2JDBC/ODBC方式,類似MySQL中JDBC/ODBC方式
同樣的SparkSQL也支援這樣的通路方式
1.SparkSQL的指令行
2.在某一台機器啟動SparkSQL的ThriftServer,然後可以在其他機器使用beeline通路
使用beeline用戶端連接配接
0.hive的中繼資料庫服務metastore保持啟動狀态 --node2
nohup./export/server/hive/bin/hive --service metastore &
1.啟動SparkSQL的ThriftServer----類似于HiveServer------node2啟動
/export/server/ spark /sbin/start-thriftserver.sh \
--hiveconf hive.server2.thrift.port=10000 \
--hiveconf hive.server2.thrift. bind.host=node2 \
--master loca1 [2]
http://node2:4040/jobs/
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAnYldHL0FWby9mZvwFN4ETMfdHLkVGepZ2XtxSZ6l2clJ3LcV2Zh1Wa9M3clN2byBXLzN3btgHL9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsQTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5iM2cDNyYDNjRjYyMTOxIjNzYzXyAjNxUTMyAzLcFTMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
2.在其他機器使用beeline連接配接sparkSql的thirftService
/export/server/spark/bin/beeline
!connect jdbc:hive2://node2:10000
root
123456
3.執行sql
show databases;
show tables;
select * from person;
使用代碼通路
0.導入依賴
<dependency>
<groupId>org.apache.spark</groupId>
<artifactid>spark-hive-thriftserver_2.12</artifactId>
<version>$ispark.version}</version>
</dependency>
package sql
import java.sql.{DriverManager, PreparedStatement, ResultSet}
/**
* Author itcast
* Desc 示範jdbc通路SparkSQL的ThrifrServer
* */
object Demo10_ThirftServer{
def main(args: Array[String]): Unit = {
//0.加載驅動
Class.forName("org.apache.hive.jdbc.HiveDriver")
//1.擷取連接配接
val conn = DriverManager.getConnection(
"jdbc:hive://node2:10000/default", //看上去像是在使用Hive的server2,本質上使用Spark的ThrifServer
"root",
"123456"
)
//2.編寫sql
val sql =
"""select id,name,age from person"""
//3.擷取預編譯語句對象
val ps: PreparedStatement = conn.prepareStatement(sql)
//4.執行sql
val rs: ResultSet = ps.executeQuery()
//5.擷取結果
while (rs.next()){
val id: Int = rs.getInt("id")
val name: String = rs.getString("name")
val age: Int = rs.getInt("age")
println(s"id=${id},name=${name},age=${age}")
}
//6.關閉資源
if (conn!=null)conn.close()
if (ps!=null)ps.close()
if (rs!=null)rs.close()
}
}