Hive连接方式

更新时间:2025-02-08 06:46:45

本文为您介绍在E-MapReduce中如何使用Hive客户端、Beeline、JDBC三种方式连接Hive。

前提条件

  • 已创建选择了Hive服务的集群(例如,DataLakeCustom),并且已打开Master节点(主节点)的挂载公网开关,以便远程登录该集群。创建集群具体操作,请参见创建集群

    • 普通集群:未启用Kerberos 身份认证服务高可用的集群。

    • 高安全集群:在创建集群时打开Kerberos 身份认证开关,即为高安全集群。

    • 高可用集群:创建集群时打开服务高可用开关,即为高可用集群。请注意,创建高可用集群时,还需选择Zookeeper服务。

  • 已登录集群主节点,详情请参见登录集群

注意事项

  • master-1-1<Master节点的公网IP地址>:主节点(Master节点)的节点名称和公网IP。您可以在EMR控制台目标集群的节点管理页面获取,具体操作步骤请参见登录集群

    通常,主节点名称为master-1-1;如果您的集群为Hadoop集群,则节点名称应为emr-header-1。

    image

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

操作步骤

普通集群

通过Hive客户端连接
通过Beeline客户端连接
通过JDBC方式连接
  1. 执行以下命令,连接Hive。

    hive
  2. 可选: 执行quit;exit;,可以退出Hive。

  1. 执行以下命令,连接Hive。

    beeline -u jdbc:hive2://master-1-1:10000
  2. 可选: 执行!quit!exit,可以退出Beeline。

重要

在执行本操作之前,请确保您已安装Java环境及Java编程工具,并已正确配置相关环境变量。

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

    <dependencies>
            <dependency>
                <groupId>org.apache.hive</groupId>
                <artifactId>hive-jdbc</artifactId>
                <version>3.1.3</version>
            </dependency>
            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-common</artifactId>
                <version>3.2.1</version>
            </dependency>
    </dependencies>

    请确保hadoop-commonhive-jdbc的版本信息与EMR集群中Hadoop-CommonHive的软件信息保持一致。软件信息可以在EMR控制台目标集群基础信息页签的软件信息区域查看。

  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();
            }
    
            // 更多JDBC连接串路径可以参考“通过Beeline客户端连接”
            Connection con = DriverManager.getConnection(
                "jdbc:hive2://<Master节点的公网IP地址>: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));
            }
    
        }
    }
    说明

    使用该方式需要开放10000端口,详情请参见管理安全组

  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,需将该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

高安全集群

通过Hive客户端连接
通过Beeline客户端连接
  1. 执行以下命令,进入Kerberosadmin.local工具。

    • 如果您是使用root用户,登录KDC(Kerberos的服务端程序)所在的master-1-1节点,则可以执行以下命令,直接进入admin工具。

      kadmin.local

      当返回信息中包含如下信息时,表示已进入admin.local命令行。

      Authenticating as principal hadoop/admin@EMR.C-85D4B8D74296****.COM with password.
      kadmin.local:
    • 如果您登录的是其他节点或者使用Gateway时,则可以通过填写admin-useradmin-password进入admin工具。

      kadmin -p <admin-user> -w <admin-password>
      说明

      如果您使用的是EMR自建的KDC,则参数:

      • <admin-user>:固定值为root/admin

      • <admin-password>:您可以在E-MapReduce控制台,Kerberos服务的配置页面,获取admin_pwd的参数值。

      当返回信息中包含如下信息时,表示已进入admin命令行。

      Authenticating as principal root/admin with password.
      kadmin:
  2. 执行以下命令,创建用户名为testPrincipal。

    本文示例密码设置为123456。

    addprinc -pw 123456 test

    当返回信息中包含如下信息时,表示创建成功。

    Principal "test@EMR.C-85D4B8D74296****.COM" created.
    说明

    需要记录用户名和密码,在创建TGT(Ticket Granting Ticket)时会用到。

    执行quit命令,可以退出Kerberosadmin.local工具。

  3. 登录您需要运行Hive Client的机器,执行以下命令,创建并切换至test用户。

    useradd test
    su test
  4. 执行以下命令,创建TGT。

    kinit

    回车后输入test用户的密码,本文示例密码为123456。

  5. 直接使用hive命令访问Hive Client。

    hive
  1. 执行以下命令,进入Kerberosadmin.local工具。

    • 如果您是使用root用户,登录KDC(Kerberos的服务端程序)所在的master-1-1节点,则可以执行以下命令,直接进入admin工具。

      kadmin.local

      当返回信息中包含如下信息时,表示已进入admin.local命令行。

      Authenticating as principal hadoop/admin@EMR.C-85D4B8D74296****.COM with password.
      kadmin.local:
    • 如果您登录的是其他节点或者使用Gateway时,则可以通过填写admin-useradmin-password进入admin工具。

      kadmin -p <admin-user> -w <admin-password>
      说明

      如果您使用的是EMR自建的KDC,则参数:

      • <admin-user>:固定值为root/admin

      • <admin-password>:您可以在E-MapReduce控制台,Kerberos服务的配置页面,获取admin_pwd的参数值。

      当返回信息中包含如下信息时,表示已进入admin命令行。

      Authenticating as principal root/admin with password.
      kadmin:
  2. 执行以下命令,创建用户名为testPrincipal。

    本文示例密码设置为123456。

    addprinc -pw 123456 test

    当返回信息中包含如下信息时,表示创建成功。

    Principal "test@EMR.C-85D4B8D74296****.COM" created.
    说明

    需要记录用户名和密码,在创建TGT(Ticket Granting Ticket)时会用到。

    执行quit命令,可以退出Kerberosadmin.local工具。

  3. 登录您需要运行Hive Client的机器,执行以下命令,创建并切换至test用户。

    useradd test
    su test
  4. 执行以下命令,创建TGT。

    kinit

    回车后输入test用户的密码,本文示例密码为123456。

  5. 执行以下命令,访问Hive Client。

    beeline -u "jdbc:hive2://master-1-1.c-56187feb57f0****.cn-hangzhou.emr.aliyuncs.com:10000/;principal=hive/_HOST@EMR.c-56187feb57f0****.COM"

    其中,以下信息需要您按照实际情况替换:

    • master-1-1.c-56187feb57f0****.cn-hangzhou.emr.aliyuncs.com:完整的主机名(包括域名)。您可以通过在HiveServer2服务的节点(通常是master-1-1节点)执行hostname -f命令获取。

    • EMR.c-56187feb57f0****.COM:realm名称。您可以在EMR控制台Kerberos服务的配置页签,搜索并查看realm参数,参数值即为该realm名称。

      image

高可用集群

通过Beeline客户端连接

根据您所选择的服务发现模式(zooKeepermultiServers),使用以下相应的命令来配置Beeline连接。

  • 使用zooKeeper模式

    beeline -u 'jdbc:hive2://master-1-1:2181,master-1-2:2181,master-1-3:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2'
  • 使用multiServers模式

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

常见问题

连接Hive时出现端口不通的错误,应该如何处理?

当您遇到连接Hive时端口不通的问题,通常可以从以下两个方面进行排查:

  • 确认HiveServer2服务是否正在运行。

    HiveServer2节点上执行以下命令,检查指定端口(默认为10000)是否有服务进程。

    netstat -tulnp | grep 10000

    确保输出结果中有HiveServer2相关的服务进程。如果没有相关进程,请检查HiveServer2服务的启动日志,确保其正确启动。

  • 查看安全组是否开放10000端口。

    EMR控制台目标集群基础信息页面,单击集群安全组后面的链接。在安全组详情页面确认是否开放了10000端口,如果未开放,请开放10000端口,详情请参见管理安全组

如果同时启用了高可用和高安全,该如何连接Hive?

在同时启用高可用和高安全的情况下,首先您需要获取Kerberos凭证(即创建Kerberos Principal并获取TGT的过程),然后使用JDBC连接方式连接到Hive,详情请参见HiveServer2负载均衡

  • 本页导读 (1)
  • 前提条件
  • 注意事项
  • 操作步骤
  • 普通集群
  • 高安全集群
  • 高可用集群
  • 常见问题
AI助理

点击开启售前

在线咨询服务

你好,我是AI助理

可以解答问题、推荐解决方案等