第二种是通过添加 :spark.driver.extraClassPath /intsmaze/lib2/mysql-connector-java-5.1.26-bin.jar 这种方式也可以实现添加多个依赖 jar, 比较方便.
第三种是在运行时添加 --jars /intsmaze/lib2/mysql-connector-java-5.1.26-bin.jar.
启动 thrift
在 spark 根目录下执行:./sbin/start-thriftserver.sh 开启 thrift 服务器.
./start-thriftserver.sh --jars /home/hadoop/mysql-connector-java-5.1.35-bin.jar --master yarn
start-thriftserver.sh 和 spark-submit 的用法类似, 可以接受所有 spark-submit 的参数, 并且还可以接受 --hiveconf 参数. 不添加任何参数表示以 local 方式运行, 默认的监听端口为 10000
用 beeline 测试
在 spark 根目录下执行:
./bin/beeline
连接 JDBC/ODBC server
beeline> !connect jdbc:hive2://localhost:10000
连接后会提示输入用户名和密码, 用户名可以填当前登陆的 linux 用户名, 密码为空即可.
在 java 代码中用 jdbc 连接
接下来打开 eclipse 用 jdbc 连接 hiveserver2, 连接 hive 的步骤同样如此.
在 pom.xml 添加以下依赖:
- <dependency>
- <groupId>org.apache.hive</groupId>
- <artifactId>hive-jdbc</artifactId>
- <version>1.2.1</version>
- </dependency>
- <dependency>
- <groupId>org.apache.hadoop</groupId>
- <artifactId>hadoop-common</artifactId>
- <version>2.4.1</version>
- </dependency>
- <dependency>
- <groupId>jdk.tools</groupId>
- <artifactId>jdk.tools</artifactId>
- <version>1.6</version>
- <scope>system</scope>
- <systemPath>${JAVA_HOME}/lib/tools.jar</systemPath>
- </dependency>
驱动: org.apache.hive.jdbc.HiveDriver
url:jdbc:hive2://192.168.19.131:10000/default
用户名: hadoop (启动 thriftserver 的 linux 用户名)
密码:""(默认密码为空)
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.sql.Statement;
- public class Test1 {
- public static void main(String[] args) throws SQLException {
- String url = "jdbc:hive2://192.168.19.131:10000/default";
- try {
- Class.forName("org.apache.hive.jdbc.HiveDriver");
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- }
- Connection conn = DriverManager.getConnection(url,"hadoop","");
- Statement stmt = conn.createStatement();
- String sql = "SELECT * FROM personlimit 10";
- ResultSet res = stmt.executeQuery(sql);
- while(res.next()){
- System.out.println("id:"+res.getInt(1)+"\tname:"+res.getString(2)+"\tage:" + res.getInt(3));
- }
- }
- }
这种方式, 可以在 yarn 的管理界面看到, 会长起一个任务, 该任务负责跑 sql 语句, 但是不能并行跑 sql 语句, 就是同时为两个用户输入的查询语句同时跑, 必须等一个跑完了再跑第二个.
spark sql 可视化
第一种方案:
将 spark sql 代码打包, sql 语句和结果存储位置作为参数, java 代码收集这些参数后, 组装为命令, 调用脚本来向集群提交 jar 包.
第二种方案:
根据 Spark 官网所述, Spark SQL 实现了 Thrift JDBC/ODBC server
最后, 这篇文章很久了, 一直编辑没有发布, 我现在已经一年不搞 spark 了, 专注 java 核心技术的研究.
来源: https://www.cnblogs.com/intsmaze/p/6618841.html