全部產品
Search
文件中心

:Hive串連方式

更新時間:Jul 01, 2024

本文為您介紹在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