全部產品
Search
文件中心

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

更新時間:Aug 13, 2024

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

說明

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

前提條件

  • 阿里雲帳號預設擁有通過非EMR叢集的方式接入OSS-HDFS服務並執行常見操作的許可權。如果您希望通過RAM使用者接入OSS-HDFS服務,RAM使用者需要具備對應的許可權要求,詳情請參見授權RAM使用者通過非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服務介面。

    您還可以通過其他方式配置OSS-HDFS服務Endpoint,且不同方式配置的Endpoint存在生效優先順序。更多資訊,請參見EMR叢集接入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命令訪問

附錄一:配置Endpoint的其他方式

除上述提到的在訪問路徑中指定Endpoint的方式以外,您還可以通過以下兩種方式配置OSS-HDFS服務的Endpoint:

  • Bucket層級的Endpoint

    如果使用oss://<Bucket>/<Object>格式的訪問路徑,即訪問路徑中未設定Endpoint。此時,您可以在Hadoop的設定檔core-site.xml中設定Bucket層級的Endpoint,從而指向OSS-HDFS服務的Endpoint。

    <configuration>
        <property>
            <!-- 以下examplebucket為開通HDFS服務的Bucket名稱,其他Bucket請根據實際情況替換。 -->
            <name>fs.oss.bucket.examplebucket.endpoint</name>
            <!-- 以下以杭州地區為例,其他地區請根據實際情況替換。 -->
            <value>cn-hangzhou.oss-dls.aliyuncs.com</value>
        </property>
    </configuration>
  • 全域預設Endpoint

    如果使用oss://<Bucket>/<Object>格式的訪問路徑,且訪問路徑中未設定Bucket層級的Endpoint,則預設使用全域Endpoint的方式訪問OSS-HDFS服務。在Hadoop的設定檔core-site.xml中設定全域預設Endpoint的方式如下:

    <configuration>
        <property>
            <name>fs.oss.endpoint</name>
            <!-- 以下以杭州地區為例,其他地區請根據實際情況替換。 -->
            <value>cn-hangzhou.oss-dls.aliyuncs.com</value>
        </property>
    </configuration>
說明

通過不同方式配置Endpoint後,Endpoint生效優先順序為訪問路徑中的Endpoint>Bucket層級的Endpoint>全域預設Endpoint

附錄二:效能調優

您可以結合實際業務需求,將以下配置項添加到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>