全部產品
Search
文件中心

E-MapReduce:使用Hive在EMR叢集中建立OSS表

更新時間:Mar 28, 2025

本文介紹如何使用Hive在EMR叢集中建立OSS表。

背景資訊

  • 在EMR叢集中,各引擎通常使用叢集角色訪問其他產品的資料以及服務,例如OSS Bucket資料。在訪問之前,請確定叢集角色是否有許可權訪問對應的產品,即如果叢集角色具備相應產品的RAM存取權限,則EMR引擎具備相應的許可權。具體操作,請參見阿里雲帳號角色授權

  • 在EMR叢集中使用的Linux帳號、LDAP帳號、Kerberos身份等資訊與您的RAM在無特別說明的情況下,並無對應關係。其他情境(如果開啟了資料湖中繼資料許可權,則存在同名映射關係。關於對應組件和服務說明的更多內容,請參見DLF-Auth。),可能存在映射關係。

使用Hive建立OSS庫、表以及訪問OSS資料

參照如下樣本,使用Hive建立OSS資料庫以及訪問OSS。

CREATE DATABASE test_db location "oss://test_bucket/test_db"; //在OSS指定Bucket路徑上建立名為test_db的資料庫。test_bucket為樣本路徑,實際使用時替換成真實的路徑。
USE test_db;
CREATE TABLE test_table (id INT, name STRING, age INT);
INSERT INTO test_table values(1,"ab",12);
SELECT * FROM test_table;

CREATE TABLE test_table_1 (id INT, name STRING, age INT) location "oss://test_bucket/test_db/test_table_1"; //在指定的Location上建立名為test_table_1的資料表。test_bucket為樣本路徑,實際使用時替換成真實的路徑。
INSERT INTO test_table_1 values(1,"cd",14);
SELECT * FROM test_table_1;

DROP TABLE test_table_1;
DROP DATABASE test_db;

Hive建立表時指定AccessKey

當前各引擎已不支援在建表語句中指定AccessKey。如果指定AccessKey,引擎執行時將會報錯。您可以去掉OSS Location中的AccessKey,參見使用Hive建立OSS庫、表以及訪問OSS資料中的方式建立表。

hive> CREATE TABLE test_table (id INT, name STRING, age INT) location "oss://[accessKeyId]:[accessKeySecret]@test_bucket.oss-cn-hangzhou-internal.aliyuncs.com/test_db/test_table";

FAILED: SemanticException java.lang.IllegalArgumentException: The Filesystem URI contains login details. This authentication mechanism is no longer supported

叢集顯示指定訪問OSS的AccessKey

更改免密配置

  1. EMR叢集訪問OSS是免密配置的。控制免密訪問的配置項是Hadoop-Common組件core-site.xmlfs.oss.credentials.provider配置項。如果您想要去掉免密,使用AccessKey訪問,需要把這個參數去掉,同時在core-site.xml中添加如下參數。

    <property>
      <name>fs.oss.accessKeyId</name>
      <value>yourAccessKeyID</value>
    </property>
    <property>
      <name>fs.oss.accessKeySecret</name>
      <value>yourAccessKeySecret</value>
    </property>
  2. 在控制台執行如下命令,驗證是否生效。

    //去掉fs.oss.credentials.provider配置後,通過ls命令,發現無法訪問OSS。
    hadoop fs -ls oss://test_bucket/test_db
    ls: ERROR: without login secrets configured.
    
    //加上AccessKey配置之後,可以看到能夠查看OSS檔案目錄。
    hadoop fs -ls oss://test_bucket/test_db
    drwxrwxrwx   - root root          0 2022-11-30 12:51 oss://test_bucket/test_db/student
  3. 重啟HiveServer2以及HiveMetaStore相關服務。