OSS-HDFS服務支援RootPolicy。通過RootPolicy,您可以為OSS-HDFS服務設定自訂首碼。此功能使得Serverless Spark能夠在無需修改原有訪問hdfs://首碼的任務的情況下,直接操作OSS-HDFS上的資料。
前提條件
配置RootPolicy
若您已為叢集的OSS-HDFS服務配置了RootPolicy,請跳過配置章節,直接閱讀使用RootPolicy。
配置環境變數。
串連ECS執行個體。具體操作,請參見串連ECS執行個體。
下載JindoFS命令列工具。
配置存取金鑰和環境變數。
進入已安裝的Jindofs JAR包下的bin目錄。
以下以
jindofs-sdk-x.x.x-linux為例,x.x.x替換為對應的版本號碼。cd jindofs-sdk-x.x.x-linux/bin/在bin目錄下建立設定檔jindofs.cfg,並配置阿里雲帳號的存取金鑰(包括Accesskey ID和Accesskey Secret),或者滿足許可權要求的RAM使用者的存取金鑰。
[client] fs.oss.accessKeyId = <key> fs.oss.accessKeySecret = <secret>設定環境變數。
說明<JINDOSDK_CONF_DIR>填寫
jindofs.cfg設定檔所在的絕對路徑。export JINDOSDK_CONF_DIR=<JINDOSDK_CONF_DIR>
設定RootPolicy。
您可以通過SetRootPolicy命令為指定Bucket註冊自訂首碼訪問地址,配置命令如下:
./jindofs admin -setRootPolicy oss://<bucket_name>.<dls_endpoint>/ hdfs://<your_ns_name>/以上命令涉及的各項參數說明如下:
參數
說明
bucket_name
填寫已開通OSS-HDFS服務的Bucket名稱。
dls_endpoint
開通OSS-HDFS服務所在地區對應的Endpoint,例如
cn-hangzhou.oss-dls.aliyuncs.com。如果您不希望在每一次使用RootPolicy相關命令時重複添加<dls_endpoint>選項,您可以選擇以下任意方式在Hadoop的
core-site.xml檔案中添加配置項。方式一
<configuration> <property> <name>fs.oss.endpoint</name> <value><dls_endpoint></value> </property> </configuration>方式二
<configuration> <property> <name>fs.oss.bucket.<bucket_name>.endpoint</name> <value><dls_endpoint></value> </property> </configuration>
your_ns_name
自訂訪問OSS-HDFS服務的nsname,支援任意非Null 字元串,例如
test,目前的版本僅支援根目錄。配置Access Policy發現地址和Scheme實作類別。
您需要在Hadoop的core-site.xml檔案中完成以下配置項。
<configuration> <property> <name>fs.accessPolicies.discovery</name> <value>oss://<bucket_name>.<dls_endpoint>/</value> </property> <property> <name>fs.AbstractFileSystem.hdfs.impl</name> <!-- 請根據Hadoop版本選擇fs.AbstractFileSystem.hdfs.impl --> <!-- Hadoop 2.x使用com.aliyun.jindodata.hdfs.v28.HDFS --> <!-- hadoop 3.x使用com.aliyun.jindodata.hdfs.v3.HDFS --> <value>com.aliyun.jindodata.hdfs.v3.HDFS</value> </property> <property> <name>fs.hdfs.impl</name> <!-- 請根據Hadoop版本選擇 fs.hdfs.impl --> <!-- Hadoop 2.x使用 com.aliyun.jindodata.hdfs.v28.JindoDistributedFileSystem --> <!-- Hadoop 3.x使用 com.aliyun.jindodata.hdfs.v3.JindoDistributedFileSystem --> <value>com.aliyun.jindodata.hdfs.v3.JindoDistributedFileSystem</value> </property> </configuration>如果您需要為多個Bucket配置Access Policy發現地址和Scheme實作類別,則多個Bucket之間需使用逗號
,分隔,例如<value>oss://<bucket1_name>.<dls_endpoint>, oss://<bucket2_name>.<dls_endpoint>/</value>。驗證是否已成功配置RootPolicy。
hadoop fs -ls hdfs://<your_ns_name>/返回以下結果,說明已成功配置RootPolicy。
drwxr-x--x - hdfs hadoop 0 2025-06-30 12:27 hdfs://<your_ns_name>/apps drwxrwxrwx - spark hadoop 0 2025-06-30 12:27 hdfs://<your_ns_name>/spark-history drwxrwxrwx - hdfs hadoop 0 2025-06-30 12:27 hdfs://<your_ns_name>/tmp drwxrwxrwx - hdfs hadoop 0 2025-06-30 12:27 hdfs://<your_ns_name>/user使用自訂首碼訪問OSS-HDFS服務。
重啟Hive、Spark等服務後,您可以通過使用自訂首碼訪問OSS-HDFS服務。
(可選)RootPolicy其他用法。
列舉指定Bucket當前註冊的所有首碼地址
您可以通過listAccessPolicies命令列舉指定Bucket當前註冊的所有首碼地址。
./jindofs admin -listAccessPolicies oss://<bucket_name>.<dls_endpoint>/刪除指定Bucket當前註冊的所有首碼地址
您可以通過unsetRootPolicy命令刪除指定Bucket當前註冊的所有首碼地址。
./jindofs admin -unsetRootPolicy oss://<bucket_name>.<dls_endpoint>/ hdfs://<your_ns_name>/
使用RootPolicy
情境一:在Notebook會話中使用
配置Spark配置。
在EMR Serverless Spark頁面,單擊左側導覽列中的會話管理。
在Notebook會話頁面,單擊建立Notebook會話。
在建立Notebook會話頁面,配置以下Spark 配置。
spark.hadoop.fs.accessPolicies.discovery oss://<buckename>.cn-<region>.oss-dls.aliyuncs.com spark.hadoop.fs.AbstractFileSystem.hdfs.impl com.aliyun.jindodata.hdfs.v3.HDFS spark.hadoop.fs.hdfs.impl com.aliyun.jindodata.hdfs.v3.JindoDistributedFileSystem在資料開發Notebook任務中直接使用通過RootPolicy為OSS-HDFS服務設定自訂首碼。
--建表 spark.sql("""CREATE TABLE default.my_orc_table ( id INT, name STRING, age INT ) location 'hdfs://<ns_name>/user/hive/warehouse/ads_user_info_1d_emr/my_orc_table/'""") --插入資料 spark.sql("""INSERT INTO table default.my_orc_table(id, name, age) VALUES (1, 'Alice', 30)"""); --查詢 spark.sql("SELECT * FROM default.my_orc_table").show()說明建表語句中“<ns_name>”需替換成您訪問OSS-HDFS服務的自訂首碼。

Notebook的!hadoop fs命令暫不支援RootPolicy。
情境二:在SQL會話中使用
配置Spark配置。
在EMR Serverless Spark頁面,單擊左側導覽列中的會話管理。
在SQL會話頁面,單擊建立SQL會話。
在建立SQL會話頁面,配置以下Spark 配置。
spark.hadoop.fs.accessPolicies.discovery oss://<buckename>.cn-<region>.oss-dls.aliyuncs.com spark.hadoop.fs.AbstractFileSystem.hdfs.impl com.aliyun.jindodata.hdfs.v3.HDFS spark.hadoop.fs.hdfs.impl com.aliyun.jindodata.hdfs.v3.JindoDistributedFileSystem在資料開發SparkSQL任務中直接使用通過RootPolicy為OSS-HDFS服務設定自訂首碼。
--建表 CREATE TABLE default.my_orc_table1 ( id INT, name STRING, age INT ) location "hdfs://<ns_name>/user/hive/warehouse/ads_user_info_1d_emr/my_orc_table1/"; --插入資料 INSERT INTO table default.my_orc_table1(id, name, age) VALUES (1, 'Alice', 30); --查詢 select * from default.my_orc_table1;說明建表語句中“<ns_name>”需替換成您訪問OSS-HDFS服務的自訂首碼。

情境三:在批任務中使用
上傳檔案。本文示範樣本SQL檔案test.sql。
在EMR Serverless Spark頁面,單擊左側導覽列中的檔案管理。
在託管檔案目錄頁面,單擊上傳檔案。
在上傳檔案對話方塊中,單擊待上傳檔案地區選取項目本地檔案,或者直接拖拽目標檔案到待上傳檔案地區。
配置Spark配置。
在EMR Serverless Spark頁面,單擊左側導覽列中的資料開發。
在開發目錄頁簽下,單擊
(建立)表徵圖。在彈出的對話方塊中,輸入名稱,選擇批任務類型下的SQL任務,然後單擊確定。
在任務配置頁面,配置以下Spark 配置。
spark.hadoop.fs.accessPolicies.discovery oss://<buckename>.cn-<region>.oss-dls.aliyuncs.com spark.hadoop.fs.AbstractFileSystem.hdfs.impl com.aliyun.jindodata.hdfs.v3.HDFS spark.hadoop.fs.hdfs.impl com.aliyun.jindodata.hdfs.v3.JindoDistributedFileSystem
在資料開發頁面單擊運行,單擊運行,結果如下。
