Hive的开发

一 Hive的Thrift服务

Hive具有一个可选的组件叫做HiveServer或者HiveThrift,其允许通过指定的端口访问Hive,Thrift是一个软件框架,其用于跨语言的服务开发.关于Thrift,可以通过链接http://thrift.apache.org获取更详细的介绍.Thrift允许客户端使用包括Java C++ Ruby和其他语言,通过编程的方式远程访问Hive.

访问Hive的最常用的方式就是通过CLI进行访问,不过CLI的设计使其不便于通过编程的方式进行访问.CLI是胖客户端,其需要本地具有所有的Hive组件,包括配置,同时还需要一个Hadoop客户端及其配置.同时,其可作为HDFS客户端,Mapreduce客户端以及JDBC客户端进行使用.

1 启动Thrift Server

如果想启动Hiveserver,可以在后台启动执行这个Hive服务:

  1. hadoop@hadoopmaster:~$ hiveserver2 start &

检查HiveServer是否启动成功的最快捷方法就是使用netstat 命令查看10000端口是否打开并监听连接:

  1. $netstat -nl|grep 10000

正如前面所提到过的,HiveServer使用Thrift提供服务,Thrift提供了一个接口语言.通过这些接口,Thrift编译器可以产生创建网络RPC的多种语言的客户端的代码.

二 一个简单的链接例子

1 Maven地址

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <groupId>com.hithinksoft.com</groupId>
  7. <artifactId>chu888chu888</artifactId>
  8. <version>1.0-SNAPSHOT</version>
  9. <dependencies>
  10. <!-- https://mvnrepository.com/artifact/org.apache.hive/hive-jdbc -->
  11. <dependency>
  12. <groupId>org.apache.hive</groupId>
  13. <artifactId>hive-jdbc</artifactId>
  14. <version>2.1.0</version>
  15. </dependency>
  16. </dependencies>
  17. <repositories>
  18. <repository>
  19. <id>jboss</id>
  20. <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
  21. </repository>
  22. </repositories>
  23. </project>

例子

  1. import java.sql.*;
  2. /**
  3. * Created by chuguangming on 16/7/26.
  4. */
  5. public class testHive {
  6. /**
  7. * @param args
  8. * @throws SQLException
  9. */
  10. public static void main(String[] args) throws ClassNotFoundException {
  11. Class.forName("org.apache.hive.jdbc.HiveDriver");
  12. try{
  13. Connection con = DriverManager.getConnection("jdbc:hive2://hadoopmaster:10000/default","hive","hive");
  14. PreparedStatement sta = con.prepareStatement("select * from u_data_partitioned_table");
  15. ResultSet result = sta.executeQuery();
  16. while(result.next()){
  17. System.out.println(result.getString(1));
  18. }
  19. } catch(SQLException e) {
  20. e.printStackTrace();
  21. }
  22. }
  23. }