下面对本示例的关键代码进行解析。
1)首先,加载HiveServer2的JDBC驱动:
Class.forName("org.apache.hive.jdbc.HiveDriver");
在使用Class.forName()加载hiveserver2的驱动org.apache.hive.jdbc.HiveDriver时,会执行HiveDriver中的静态代码段,创建一个HiveDriver实例,然后调用DriverManag-er.registerDriver()注册。
2)建立指定驱动的URL连接:
●url:驱动连接URL。
●user:是授权访问的用户名。
●password:授权访问的密码。
3)连接URL。
①当HiveServer2使用HTTP模式运行时,JDBC连接URL格式如下:
jdbc:hive2://<host>:<port>/<db>;transportMode=http;httpPath=<http_endpoint>
其中,<http_endpoint>默认值是:cliservice,需要跟hive-site.xml中的配置保持一致。<port>端口的默认值是:10001。
②当HiveServer2使用Binary模式运行时,JDBC连接URL格式如下:
jdbc:hive2://<host>:<port>/<db>(www.xing528.com)
其中,<port>端口的默认值是:10000。
stmt.execute("use hive");
在代码中,通过use DatabaseName语句即可实现动态选定数据库。
5)组织SQL语句。
组织SQL语句:从people表中查询age大于等于30的记录。这种写法可以防范SQL注入,不用对传入的数据做任何过滤,而如果使用普通的statement实例就有SQL注入风险。而且PreparedStatement实例包含已编译的SQL语句,其执行速度要快于Statement对象。
6)执行SQL语句。
resultSet=preparedStatement.executeQuery();
7)遍历查询结果对象。
8)本示例并不需要SparkContext?
在本示例中,为什么不需要SparkContext呢?我们通常用Java来操作Spark SQL,肯定有类似下面的代码:
原因是:我们只是把SQL查询语句指令发给Thrift Server,然后Thrift Server把SQL查询语句交给了Spark SQL处理,所以就跟普通的Spark SQL程序不一样。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。