Hive学习之路(三):hiveserver2的启动与使用

操作内容简介

    • 一、hiveserver2简介
    • 二、使用hiveserver2服务
        • 1.启动hiveserver2服务
        • 2.启动beeline连接server
        • 3.使用JDBC协议连接server
          • 1.构建Java工程,添加Maven支持
          • 2.创建并编写HiveServerTest类
    • 三、总结

一、hiveserver2简介

Hive在生产上是不需要部署集群的,操作Hive只需要通过它提供的客户端即可,Hive提供了大致三类客户端:

  • hive shell:通过hive shell来操作hive,但是至多只能存在一个hive shell,启动第二个会被阻塞,也就是说hive shell不支持并发操作。
  • WebUI: 通过HUE/Zeppelin来对Hive表进行操作。
  • 基于JDBC等协议:启动hiveserver2,通过jdbc协议可以访问hive,hiveserver2支持高并发。

简而言之,hiveserver2是Hive启动了一个server,客户端可以使用JDBC协议,通过IP+ Port的方式对其进行访问,达到并发访问的目的。

二、使用hiveserver2服务

本次演示使用的Hive版本是:apache-hive-2.1.0,开发工具是IDEA2018

1.启动hiveserver2服务

启动Hive有两条命令:$HIVE_HOME/bin/./hive --service hiveserver2 或者
$HIVE_HOME/bin/./hiveserver2,hiveserver2的服务端口默认是10000,WebUI端口默认是10002,在终端使用命令netstat -anop|grep 10000netstat -anop|grep 10002
在这里插入图片描述
发现两个端口均处于监听状态,查看WebUI:
Hive学习之路(三):hiveserver2的启动与使用_第1张图片
hiveserver2服务启动成功。

2.启动beeline连接server

在装了相同版本Hive的其他主机(启动hiveserver2的主机也可以)上启动beeline,可以连接到Hive的server上。执行命令:beeline -u jdbc:hive2://hadoop00:10000
Hive学习之路(三):hiveserver2的启动与使用_第2张图片
查看WebUI,可看到有一个连接已经连上了server:
Hive学习之路(三):hiveserver2的启动与使用_第3张图片
然后就可以使用beeline完成在hive shell中相同的操作了。

3.使用JDBC协议连接server

1.构建Java工程,添加Maven支持

完整的Maven依赖如下:

 <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>

        <dependency>
            <groupId>org.apache.hive</groupId>
            <artifactId>hive-jdbc</artifactId>
            <version>2.1.0</version>
        </dependency>
</dependencies>
2.创建并编写HiveServerTest类

完整的 HiveServerTest 代码如下:

/**
 *
 * 使用JDBC协议连接HiveServer测试类
 */
public class HiveServerTest {

    //连接
    private Connection connection = null;
    private PreparedStatement ps = null;
    private ResultSet rs = null;

    /**
     * 测试前准备工作
     */
    @Before
    public void before(){
        try {
            //Hive的JDBC驱动
            String classDriver = "org.apache.hive.jdbc.HiveDriver";
            //连接串,接数据库名mydb,数据库写你的数据库
            String url = "jdbc:hive2://hadoop00:10000/mydb";
            //加载驱动
            Class.forName(classDriver);
            //获得连接
            connection = DriverManager.getConnection(url);
         }catch (Exception e){
            e.printStackTrace();
        }
    }

    /**
     * 查询表中的数据
     */
    @Test
    public void testSelect(){
        try {
        	//表和数据需要提前准备好
            String sql = "select * from student";
            //执行SQL语句
            ps = connection.prepareStatement(sql);
            //得到结果集
            rs = ps.executeQuery();
            //遍历结果集
            while (rs.next()){
                System.out.println(rs.getInt(1) + " " + rs.getString(2)
                + " " + rs.getString(3));
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    /**
     * 测试结束后关闭连接
     */
    @After
    public void after(){
        try {
            if (ps != null)
                ps.close();
            if (rs != null)
                rs.close();
            connection.close();
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

执行单元测试testSelect,结果如下:
Hive学习之路(三):hiveserver2的启动与使用_第4张图片
这里只是演示了查询Hive表的操作,会发现,代码和操作MysQL的代码一模一样,仅仅只是驱动不一样,这得益于Java的多态,MySQL和Hive都实现了JDBC的借口,所以在方法的调用层面上,二者是完全一样的!还有表的其他操作比如删除,排序等等也以操作MySQL的一致,这里不作介绍。
用过查看WebUI,可以看到我们执行的操作:
Hive学习之路(三):hiveserver2的启动与使用_第5张图片

三、总结

Hive的hiveserver2服务本质上是实现了JDBC的接口,所以我们可以以各种方式使用JDBC连接它,在终端可以使用beeline,连接Hive的server,用法和hive shell一致而编程则可以加载Hive的JDBC驱动,使用操作其他关系型数据库的那套方法操作Hive,下一节则开始介绍Hive的内置函数,并使用Hive完成WordCount,详情请移步 Hive学习之路(四):Hive内置函数介绍与实现WordCount。感谢您的阅读,如有错误请不吝赐教!

你可能感兴趣的:(Hadoop生态,大数据生态)