分布式sparkSQL引擎应用:从远程通过thriftServer连接spark集群处理hive中的数据

来源:互联网 发布:淘宝华元宠物东西真吗 编辑:程序博客网 时间:2024/06/10 21:18

实现原理:

客户端(java程序)与thriftServer连接,thriftServer再代理客户端转换成spark的操作流程,再加载hive的数据到spark的worker节点,并运行Map-Reduce作业。这里只是个小案例,和大家一起来探讨一下原理。


步骤:

分发三个配置文件hdfs-site.xml、core-site.xml、hive-site.xml到所有worker节点 ==> 
  在有关的库下创建hive的数据表 ==> 
加载数据到hive表中 ==>
启动hdfs(如果有数据存放在hadoop集群的数据节点) ==>
启动spark集群(建议启动模式:完全分布式)==> 
启动thriftserver服务器 ==>
运行java代码。


[centos@h201 sbin]$ netstat -nao | grep 1000
tcp6       0      0 :::10000                :::*                    LISTEN      off (0.00/0/0)
【pom.xml加依赖包:hive-jdbc 2.1.0】

data.txt 内容:
1,tom,12
2,tomas,13
3,tomas Lee,14
4,tony kidkid,15


【/Users/tonykidkid/programjava/SparkDemo/SparkDemo1/src/main/scala_java/ThriftClient.java】示例源码如下——


import java.sql.*;


/**
 * 通过此客户端程序访问sparkSQL分布式引擎
 */

public class ThriftClient {
    public static void main(String[] args) {
        try {
            Class.forName( "org.apache.hive.jdbc.HiveDriver" );
            Connection conn = DriverManager.getConnection( "jdbc:hive2://h201:10000" );
            Statement st = conn.createStatement();
            ResultSet rs = st.executeQuery( "SELECT count(1) FROM mydb.tt WHERE age > 13" );
            while(rs.next()){
                int count = rs.getInt( 1 );
                System.out.println( count );
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
【控制台输出结果如下】
2


到web页面查看:
http://172.16.112.201:8080 ==> Running Applications
查看到:
Application ID NameCoresMemory per NodeSubmitted TimeUserStateDuration
app-20170501050836-0000 (kill) Thrift JDBC/ODBC Server31024.0 MB2017/05/01 05:08:36centosRUNNING37 min


点击 ApplicationID ==> 点击 Application Detail UI ==>
从Completed Jobs表格看到Description内容就是java源码里面的SQL语句,
继续点击Description里的链接,进到Details for Job页面 ==>
点击DAG Visualization就能看到各个阶段的任务执行情况。

0 0
原创粉丝点击