实现原理:
客户端(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分布式引擎
*/
publicclass 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 IDNameCoresMemory 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就能看到各个阶段的任务执行情况。
版权声明:本文为qq_31598113原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。