Spark SQL Thrift Server
Introduce
- Spark SQLs當中提到的Standard Connectivity就是指Thrift Server。
- Thrift Server提供JDBC/ODBC的接口,讓用戶透過JDBC/ODBC連接到Thrift Server,然後透過Spark SQL的訪問或處理數據。
- Thrift Server啟動後,會啟動一個Spark SQL應用程式,所有通過JDBC/ODBC連接進來的客戶端皆共享這個Spark SQL應用程式的資源;換句話說,不同客戶端之間是共享數據的。
Compared with Spark Application
- spark-shell與spark-sql都是Spark Application,每次提交作業都要申請各自的資源,作業之間資源獨立。
- Thrift Server無論連入多少個客戶端都是一個Spark Application,且只要申請一次資源,而且客戶端之間的數據可以共享。
Start Spark SQL Thrift Server
|
|
Spark Web UI
- 連接到http://[ip]:4040 可以查看Thrift Server的頁面
- 右上角顯示此為Thrift JDBC/ODBC Server Application
SQL Driver Related Error
- 若–jars沒有配置或配置錯誤MySQL Driver,Log中會顯示下列錯誤的訊息1234Caused by: org.datanucleus.exceptions.NucleusException:Attempt to invoke the "BONECP" plugin to create a ConnectionPool gave an error :The specified datastore driver ("com.mysql.jdbc.Driver") was not found in the CLASSPATH.Please check your CLASSPATH specification, and the name of the driver.
Use Beeline as Client
- 使用Spark自帶的Beeline作為客戶端連上Thrift Server
|
|
Spark Web UI
- select語句對應的Spark Web的Jobs頁面
- select語句對應的Spark Web的SQL頁面
- 內容與explain extended select * from emp相同
- Spark Web的JDBC/ODBC Server頁面
- Session Statistics中User對應beeline命令的-n參數
- SQL Statistics中的JobID對應Jobs頁面
Access Thrift Server via Scala
pom.xml
需在專案的pom.xml中加入以下依賴
12345<dependency><groupId>org.apache.hive</groupId><artifactId>hive-jdbc</artifactId><version>1.2.2</version></dependency>若version與環境的version不符合,會得到以下錯誤
123456789101112Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hive/service/cli/thrift/TCLIService$Ifaceat org.apache.hive.jdbc.HiveDriver.connect(HiveDriver.java:105)at java.sql.DriverManager.getConnection(DriverManager.java:664)at java.sql.DriverManager.getConnection(DriverManager.java:247)at com.test.demo.ThriftServerDemo$.main(ThriftServerDemo.scala:9)at com.test.demo.ThriftServerDemo.main(ThriftServerDemo.scala)Caused by: java.lang.ClassNotFoundException: org.apache.hive.service.cli.thrift.TCLIService$Ifaceat java.net.URLClassLoader.findClass(URLClassLoader.java:381)at java.lang.ClassLoader.loadClass(ClassLoader.java:424)at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)at java.lang.ClassLoader.loadClass(ClassLoader.java:357)... 5 more
Scala Code
|
|
Spark Web UI
- scala專案對應的Spark Web的Jobs頁面
- Job Id為1的job對應scala專案
- scala專案對應的Spark Web的SQL頁面
- 內容與explain extended select empno, ename, deptno from emp limit 5相同
- Spark Web的JDBC/ODBC Server頁面
- scala專案作為第二個客戶端連入
- Session Statistics中User對應DriverManager.getConnection的第二個參數
- SQL Statistics中的JobID對應Jobs頁面