第73课:Spark SQL Thrift Server实战

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/someby/article/details/83957028

内容:

    1.SparkSQL Thrift解析与测试
    2.SparkSQL Thrift Server JDBC编程

一、SparkSQL Thrift解析与测试

    ThriftServer是一个JDBC/ODBC接口,用户可以通过JDBC/ODBC连接ThriftServer来访问SparkSQL的数据。ThriftServer在启动的时候,会启动了一个sparkSQL的应用程序,而通过JDBC/ODBC连接进来的客户端共同分享这个sparkSQL应用程序的资源,也就是说不同的用户之间可以共享数据;
    ThriftServer启动时还开启一个侦听器,等待JDBC客户端的连接和提交查询。所以,在配置ThriftServer的时候,至少要配置ThriftServer的主机名和端口,如果要使用hive数据的话,还要提供hive metastore的uris。

二、SparkSQL Thrift Server JDBC编程

package SparkSQL;

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.sql.SQLContext;

import java.sql.*;

/**
 * FileName: SparkSQLJDBCToThriftServer
 * Author:   hadoop
 * Email:    [email protected]
 * Date:     18-11-11 上午8:37
 * Description:
 * 实战演示Java通过JDBC访问Thrift Server,进而访问SparkSQL,这是企业级开发中常用的方式
 */
public class SparkSQLJDBCToThriftServer {
    public static void main(String[] args) {
        try {
            Class.forName("org.apache.hive.jdbc.HiveDriver");
            String sql = "select name from people where age = ?";
            Connection connection = null;
            ResultSet resultSet = null;
            try {
                connection = DriverManager.getConnection("jdbc:hive2://Master:10001/default?hive.server2.transport.mode=http;hive.server2.thrift.http.path=cliservice", "root", "");
                PreparedStatement preparedStatement = connection.prepareStatement(sql);
                preparedStatement.setInt(1, 30);
                resultSet = preparedStatement.executeQuery();
                while (resultSet.next()) {
                    System.out.println(resultSet.getString(1)); //此处的数据建议保存到Parquet等
                }

            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                try {
                    resultSet.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
                try {
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }


        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

猜你喜欢

转载自blog.csdn.net/someby/article/details/83957028