全部產品
Search
文件中心

E-MapReduce:Hive串連方式

更新時間:Mar 13, 2025

本文為您介紹在E-MapReduce中如何使用Hive用戶端、Beeline、JDBC三種方式串連Hive。

前提條件

  • 已建立選擇了Hive服務的叢集(例如,DataLake或Custom),並且已開啟Master節點(主節點)的掛載公網開關,以便遠程登入該叢集。建立叢集具體操作,請參見建立叢集

    • 普通叢集:未啟用Kerberos 身份認證服務高可用的叢集。

    • 高安全叢集:在建立叢集時開啟Kerberos 身份認證開關,即為高安全叢集。

    • 高可用叢集:建立叢集時開啟服務高可用開關,即為高可用叢集。請注意,建立高可用叢集時,還需選擇Zookeeper服務。

  • 已登入叢集主節點,詳情請參見登入叢集

注意事項

  • master-1-1<Master節點的公網IP地址>:主節點(Master節點)的節點名稱和公網IP。您可以在EMR控制台目的地組群的節點管理頁面擷取,具體操作步驟請參見登入叢集

    通常,主節點名稱為master-1-1;如果您的叢集為Hadoop叢集,則節點名稱應為emr-header-1。

    image

  • HiveServer2預設不校正使用者名稱和密碼,如果您需要使用者名稱和密碼認證,可以開啟LDAP認證,詳情請參見使用LDAP認證

操作步驟

普通叢集

通過Hive用戶端串連

  1. 執行以下命令,串連Hive。

    hive
  2. 可選: 執行quit;exit;,可以退出Hive。

通過Beeline用戶端串連

  1. 執行以下命令,串連Hive。

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

通過JDBC方式串連

重要

在執行本操作之前,請確保您已安裝Java環境及Java編程工具,並已正確配置相關環境變數。

  1. pom.xml檔案中設定項目依賴(hadoop-common和hive-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-common和hive-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();
            }
    
            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-common和hive-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用戶端串連

  1. 執行以下命令,進入Kerberos的admin.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-user和admin-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. 執行以下命令,建立使用者名稱為test的Principal。

    本文樣本密碼設定為123456。

    addprinc -pw 123456 test

    當返回資訊中包含如下資訊時,表示建立成功。

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

    需要記錄使用者名稱和密碼,在建立TGT(Ticket Granting Ticket)時會用到。

    執行quit命令,可以退出Kerberos的admin.local工具。

  3. 登入您需要運行Hive Client的機器,執行以下命令,建立並切換至test使用者。

    useradd test
    su test
  4. 執行以下命令,建立TGT。

    kinit

    斷行符號後輸入test使用者的密碼,本文樣本密碼為123456。

  5. 直接使用hive命令訪問Hive Client。

    hive

通過Beeline用戶端串連

  1. 執行以下命令,進入Kerberos的admin.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-user和admin-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. 執行以下命令,建立使用者名稱為test的Principal。

    本文樣本密碼設定為123456。

    addprinc -pw 123456 test

    當返回資訊中包含如下資訊時,表示建立成功。

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

    需要記錄使用者名稱和密碼,在建立TGT(Ticket Granting Ticket)時會用到。

    執行quit命令,可以退出Kerberos的admin.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負載平衡