全部產品
Search
文件中心

Object Storage Service:非EMR叢集接入OSS-HDFS服務快速入門

更新時間:Jan 17, 2026

OSS-HDFS服務(JindoFS服務)完全相容HDFS介面,同時支援目錄層級的操作。JindoSDK為Apache Hadoop的計算分析應用(例如MapReduce、Hive、Spark、Flink等)提供了訪問HDFS服務的能力。本文介紹如何通過在ECS執行個體中部署JindoSDK,然後完成OSS-HDFS服務快速入門常見操作。

說明

如果您使用的是阿里雲EMR叢集,請通過EMR叢集的方式接入OSS-HDFS服務。具體操作,請參見EMR叢集接入OSS-HDFS服務快速入門

前提條件

操作步驟

  1. 串連ECS執行個體。具體操作,請參見串連ECS執行個體

  2. 下載並解壓JindoSDK JAR包。下載地址,請參見GitHub

  3. 執行以下命令,解壓JindoSDK JAR包。

    以下以解壓jindosdk-x.x.x-linux.tar.gz為例,如使用其他版本的JindoSDK,請替換為對應的JAR包名稱。

    tar zxvf jindosdk-x.x.x-linux.tar.gz
    說明

    x.x.x表示JindoSDK JAR包版本號碼。

  4. 配置環境變數。

    1. 配置JINDOSDK_HOME

      以安裝包內容解壓在/usr/lib/jindosdk-x.x.x-linux目錄為例:

      export JINDOSDK_HOME=/usr/lib/jindosdk-x.x.x-linux
    2. 配置HADOOP_CLASSPATH

      export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:${JINDOSDK_HOME}/lib/*
      重要

      請將安裝目錄和環境變數部署到所有所需節點上。

  5. 配置OSS-HDFS服務實作類別及AccessKey。

    1. 執行以下命令,進入Hadoop的core-site.xml設定檔。

      vim /usr/local/hadoop/etc/hadoop/core-site.xml
    2. 在Hadoop的core-site.xml中,配置JindoSDK DLS實作類別。

      <configuration>
          <property>
              <name>fs.AbstractFileSystem.oss.impl</name>
              <value>com.aliyun.jindodata.oss.JindoOSS</value>
          </property>
      
          <property>
              <name>fs.oss.impl</name>
              <value>com.aliyun.jindodata.oss.JindoOssFileSystem</value>
          </property>
      </configuration>
    3. 在Hadoop的core-site.xml檔案中,配置阿里雲帳號的存取金鑰,或者滿足許可權要求的RAM使用者的存取金鑰。

      關於RAM使用者在該情境下需要滿足的許可權說明,請參見授權RAM使用者通過非EMR叢集接入OSS-HDFS服務

      <configuration>
          <property>
              <name>fs.oss.accessKeyId</name>
              <value>xxx</value>
          </property>
      
          <property>
              <name>fs.oss.accessKeySecret</name>
              <value>xxx</value>
          </property>
      </configuration>
  6. 配置OSS-HDFS服務Endpoint。

    使用OSS-HDFS服務訪問OSS Bucket時需要配置Endpoint。推薦訪問路徑格式為oss://<Bucket>.<Endpoint>/<Object>,例如oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/exampleobject.txt。配置完成後,JindoSDK會根據訪問路徑中的Endpoint訪問對應的OSS-HDFS服務介面。

  7. 通過HDFS Shell命令完成OSS-HDFS服務常見操作。

    • 上傳檔案

      將本地根目錄下的examplefile.txt檔案上傳至examplebucket,樣本如下:

      hdfs dfs -put examplefile.txt oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/
    • 下載檔案

      將examplebucket下的exampleobject.txt下載到本地根目錄檔案夾/tmp,樣本如下:

      hdfs dfs -get oss://examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/exampleobject.txt  /tmp/

    更多操作,請參見通過Hadoop Shell命令訪問

附錄一:效能調優

您可以結合實際業務需求,將以下配置項添加到Hadoop的core-site.xml中。僅JindoSDK 4.0及以上版本支援以下配置項。

<configuration>

    <property>
          <!-- 用戶端寫入的臨時檔案目錄,可配置多個,每個臨時檔案目錄需以逗號隔開。多使用者環境需配置可讀寫權限 -->
        <name>fs.oss.tmp.data.dirs</name>
        <value>/tmp/</value>
    </property>

    <property>
          <!-- 訪問OSS失敗重試次數 -->
        <name>fs.oss.retry.count</name>
        <value>5</value>
    </property>

    <property>
          <!-- 請求OSS逾時時間(毫秒) -->
        <name>fs.oss.timeout.millisecond</name>
        <value>30000</value>
    </property>

    <property>
          <!-- 串連OSS逾時時間(毫秒) -->
        <name>fs.oss.connection.timeout.millisecond</name>
        <value>3000</value>
    </property>

    <property>
          <!-- OSS單個檔案並發上傳線程數 -->
        <name>fs.oss.upload.thread.concurrency</name>
        <value>5</value>
    </property>

    <property>
          <!-- OSS並發上傳任務隊列大小 -->
        <name>fs.oss.upload.queue.size</name>
        <value>5</value>
    </property>

    <property>
          <!-- 進程內OSS最大並發上傳任務數 -->
        <name>fs.oss.upload.max.pending.tasks.per.stream</name>
        <value>16</value>
    </property>

    <property>
          <!-- OSS並發下載任務隊列大小 -->
        <name>fs.oss.download.queue.size</name>
        <value>5</value>
    </property>

    <property>
          <!-- 進程內OSS最大並發下載任務數 -->
        <name>fs.oss.download.thread.concurrency</name>
        <value>16</value>
    </property>

    <property>
          <!-- 預讀OSS的buffer大小 -->
        <name>fs.oss.read.readahead.buffer.size</name>
        <value>1048576</value>
    </property>

    <property>
          <!-- 同時預讀OSS的buffer個數 -->
        <name>fs.oss.read.readahead.buffer.count</name>
        <value>4</value>
    </property>

</configuration>