本文介紹如何使用Hive在EMR叢集中建立OSS表。
背景資訊
使用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
更改免密配置
EMR叢集訪問OSS是免密配置的。控制免密訪問的配置項是Hadoop-Common組件core-site.xml中fs.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>在控制台執行如下命令,驗證是否生效。
//去掉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重啟HiveServer2以及HiveMetaStore相關服務。