全部产品
Search
文档中心

开源大数据平台E-MapReduce:Hive连接方式

更新时间:Oct 30, 2023

本文为您介绍在E-MapReduce集群提交Hive SQL的三种方式。

前提条件

已创建集群,且选择了Hive服务,详情请参见创建集群

注意事项

本文示例中需替换的参数:

  • <主节点的节点名称>:您可以在EMR控制台目标集群的节点管理页面获取,具体操作步骤请参见登录集群

  • cluster-xxx@EMR.xxx.COM中的xxx:您可以在主节点上通过命令hostname获取,获取到的数字即为xxx

  • HiveServer2默认不校验用户名和密码,如果您需要用户名和密码认证时,可以开启LDAP认证,详情请参见使用LDAP认证

方式一:通过Hive客户端连接Hive

普通集群

hive

高安全集群

  1. 执行如下命令进行认证。

  2. kinit -kt /etc/ecm/hive-conf/hive.keytab hive/<主节点的节点名称>.cluster-xxx@EMR.xxx.COM

    您也可以通过用户管理功能创建用户,在连接Beeline前使用kinit 用户名并输入密码,即可通过新建用户使用Beeline客户端。创建用户详情请参见管理用户

    1. 执行如下命令进行认证。

      kinit 用户名
    2. 根据提示输入用户的密码。

  3. 连接Hive。

  4. hive

方式二:通过Beeline客户端连接HiveServer2

普通集群

beeline -u jdbc:hive2://<主节点的节点名称>:10000

根据您的集群类型,对应命令如下:

  • DataLake集群

    beeline -u jdbc:hive2://master-1-1:10000
  • Hadoop集群

    beeline -u jdbc:hive2://emr-header-1:10000

高可用集群

根据您集群的类型,对应命令如下:

  • DataLake集群

    • 设置serviceDiscoveryMode为zooKeeper的方式

      beeline -u 'jdbc:hive2://master-1-1:2181,master-1-2:2181,master-1-3:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2'
    • 设置serviceDiscoveryMode为multiServers的方式

      beeline -u 'jdbc:hive2://master-1-1:10000,master-1-2:10000,master-1-3:10000/default;serviceDiscoveryMode=multiServers'
  • Hadoop集群

    • 设置serviceDiscoveryMode为zooKeeper的方式

      beeline -u 'jdbc:hive2://emr-header-1:2181,emr-header-2:2181,emr-header-3:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2'
    • 设置serviceDiscoveryMode为multiServers的方式

      beeline -u 'jdbc:hive2://emr-header-1:10000,emr-header-2:10000,emr-header-3:10000/default;serviceDiscoveryMode=multiServers'

高安全集群

  1. 执行如下命令进行认证。

    kinit -kt /etc/ecm/hive-conf/hive.keytab hive/<主节点的节点名称>.cluster-xxx@EMR.xxx.COM

    您也可以通过用户管理功能创建用户,在连接Beeline前使用kinit 用户名并输入密码,即可通过新建用户使用Beeline客户端。创建用户详情请参见管理用户

    1. 执行如下命令进行认证。

      kinit 用户名
    2. 根据提示输入用户的密码。

  2. 连接Beeline。

    beeline -u "jdbc:hive2://<主节点的节点名称>:10000/;principal=hive/<主节点的节点名称>.cluster-xxx@EMR.xxx.COM"
    说明

    jdbc链接串需要用双引号括起来。

方式三:通过Java连接HiveServer2

重要

在执行本操作前,确保您已安装Java环境和Java编程工具,并且已配置环境变量。

  1. 在pom.xml文件中配置项目依赖(hadoop-commonhive-jdbc)。本示例新增的项目依赖如下所示。

    <dependencies>
            <dependency>
                <groupId>org.apache.hive</groupId>
                <artifactId>hive-jdbc</artifactId>
                <version>2.3.9</version>
            </dependency>
            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-common</artifactId>
                <version>2.8.5</version>
            </dependency>
    </dependencies>
  2. 编写代码,连接HiveServer2并操作Hive表数据。示例代码如下所示。

    import java.sql.*;
    
    public class App
    {
        private static String driverName = "org.apache.hive.jdbc.HiveDriver";
    
        public static void main(String[] args) throws SQLException {
    
            try {
                Class.forName(driverName);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
    
            // 1. 代码打包后,运行JAR包的环境需要在hosts文件中把master-1-1
            //    映射到E-MapReduce集群的公网IP地址(或内网IP地址)
            // 2. 更多JDBC连接串路径可以参考“方式二:通过Beeline客户端连接HiveServer2”
            Connection con = DriverManager.getConnection(
                "jdbc:hive2://master-1-1:10000", "root", "");
    
            Statement stmt = con.createStatement();
    
            String sql = "select * from sample_tbl limit 10";
            ResultSet res = stmt.executeQuery(sql);
    
            while (res.next()) {
                System.out.println(res.getString(1) + "\t" + res.getString(2));
            }
    
        }
    }
  3. 打包项目工程(即生成JAR包),并上传JAR包至运行环境。

    重要

    JAR包的运行需要依赖hadoop-commonhive-jdbc。如果运行环境的环境变量中未包含这两个依赖包,则您需要下载依赖包并配置环境变量,或者直接一起打包这两个依赖包。运行JAR包时,如果缺少这两个依赖包,则会提示以下错误:

    • 缺失hadoop-common:提示java.lang.NoClassDefFoundError: org/apache/hadoop/conf/Configuration

    • 缺失hive-jdbc:提示java.lang.ClassNotFoundException: org.apache.hive.jdbc.HiveDriver

    本示例生成的JAR包为emr-hiveserver2-1.0.jar,上传到E-MapReduce集群的Master节点。

  4. 测试JAR包是否可以正常运行。

    重要

    运行JAR包的服务器与E-MapReduce集群需要在同一个VPC和安全组下,并且网络可达。如果两者的VPC不同或网络环境不同,则需要通过公网地址访问,或先使用网络产品打通两者的网络,再通过内网访问。网络连通性测试方法:

    • 公网:telnet master-1-1的公网IP地址 10000

    • 内网:telnet master-1-1的内网IP地址 10000

    java -jar emr-hiveserver2-1.0.jar