すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:EMR以外のクラスターをOSS-HDFSに接続する

最終更新日:Aug 28, 2024

OSS-HDFS (JindoFS) は、Hadoop分散ファイルシステム (HDFS) API操作と完全に互換性があり、ディレクトリレベルの操作をサポートします。 JindoSDKでは、MapReduce、Hive、Spark、FlinkなどのApache Hadoopベースのコンピューティングおよび分析アプリケーションがHDFSにアクセスできます。 このトピックでは、Elastic Compute Service (ECS) インスタンスにJindoSDKをデプロイし、OSS-HDFSに関連する一般的な操作を実行する方法について説明します。

説明

Alibaba Cloud E-MapReduce (EMR) クラスターを使用する場合、「EMRクラスターをOSS-HDFSに接続する」で説明されている方法を使用して、EMRクラスターをOSS-HDFSに接続します。

前提条件

  • デフォルトでは、Alibaba Cloudアカウントには、EMR以外のクラスターをOSS-HDFSに接続し、OSS-HDFSに関連する一般的な操作を実行する権限があります。 必要な権限が付与されたAlibaba CloudアカウントまたはRAMユーザーが作成されます。 RAMユーザーを使用して非EMRクラスターをOSS-HDFSに接続する場合、RAMユーザーに必要な権限が必要です。

ビデオチュートリアル

次のビデオでは、非EMRクラスターをOSS-HDFSに接続し、一般的な操作を実行する方法の例を示します。

手順

  1. ECS インスタンスに接続します。 詳細については、「インスタンスへの接続」をご参照ください。

  2. JindoSDK JARパッケージをダウンロードして解凍します。 JindoSDKをダウンロードするには、 GitHubを実行します。

  3. 次のコマンドを実行して、JindoSDK JARパッケージを解凍します。

    次のサンプルコードは、jindosdk-x.x.x-linux.tar.gzという名前のJindoSDK JARパッケージを解凍する方法の例を示しています。 別のバージョンのJindoSDKを使用する場合は、パッケージ名を対応する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. 次のコマンドを実行して、core-site.xmlという名前のHadoop構成ファイルに移動します。

      vim /usr/local/hadoop/etc/hadoop/core-site.xml
    2. 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. core-site.xmlファイルで、必要な権限を持つAlibaba CloudアカウントまたはRAMユーザーのAccessKeyペアを設定します。

      <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のエンドポイントを指定します。

    OSS-HDFSを使用してOSSバケットにアクセスする場合は、OSS-HDFSのエンドポイントを指定する必要があります。 oss://<Bucket>.<Endpoint>/<Object> の形式でアクセスパスを設定することを推奨します。 例: oss:// examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/exampleobject.txt アクセスパスを設定した後、JindoSDKはアクセスパスで指定されたエンドポイントに基づいて対応するOSS-HDFS操作を呼び出します。

    他の方法を使用してOSS-HDFSのエンドポイントを設定することもできます。 異なる方法を使用して構成されたエンドポイントの優先度は異なります。 詳細については、「付録1: OSS-HDFSのエンドポイントの設定に使用されるその他の方法」をご参照ください。

  7. HDFS Shellコマンドを実行して、OSS-HDFSに関連する一般的な操作を実行します。

    • ローカルファイルをオブジェクトグループにアップロードします。

      次のコマンドを実行して、ローカルルートディレクトリにあるexamplefile.txtという名前のローカルファイルをexamplebucketという名前のバケットにアップロードします。

      hdfs dfs -put examplefile.txt oss:// examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/
    • オブジェクトのダウンロード

      次のコマンドを実行して、exampleobject.txtという名前のオブジェクトを、examplebucketという名前のバケットからコンピュータの /tmpという名前のルートディレクトリにダウンロードします。

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

    詳細については、「Hadoop Shellコマンドを使用したOSS-HDFSへのアクセス」をご参照ください。

付録1: OSS-HDFSのエンドポイントを設定するために使用されるその他の方法

アクセスパスでエンドポイントを設定するために使用される前述の方法とは別に、次の方法を使用してエンドポイントを設定できます。

  • バケットレベルのエンドポイントの使用

    oss://<Bucket>/<Object> 形式のアクセスパスを使用する場合、エンドポイントは設定されません。 この場合、core-site.xmlファイルでバケットレベルのエンドポイントを設定して、OSS-HDFSのエンドポイントを指定できます。

    <configuration>
        <property>
            <!-- In this example, examplebucket is used as the name of the bucket for which OSS-HDFS is enabled. Specify your actual bucket name.   -->
            <name>fs.oss.bucket.examplebucket.endpoint</name>
            <!-- In this example, the endpoint of the China (Hangzhou) region is used. Specify your actual endpoint.   -->
            <value>cn-hangzhou.oss-dls.aliyuncs.com</value>
        </property>
    </configuration>
  • デフォルトのOSSエンドポイントを使用する

    oss://<Bucket>/<Object> 形式のアクセスパスを使用し、アクセスパスにバケットレベルのエンドポイントを指定しない場合、デフォルトのOSSエンドポイントがOSS-HDFSへのアクセスに使用されます。 次のコードを実行して、core-site.xmlという名前のHadoop設定ファイルでデフォルトのOSSエンドポイントを設定します。

    <configuration>
        <property>
            <name>fs.oss.endpoint</name>
            <!-- In this example, the endpoint of the China (Hangzhou) region is used. Specify your actual endpoint.   -->
            <value>cn-hangzhou.oss-dls.aliyuncs.com</value>
        </property>
    </configuration>
説明

さまざまな方法で設定された次のエンドポイントは、優先度の高い順に配置されます。アクセスパスで指定されたエンドポイント> バケットレベルのエンドポイント> デフォルトのOSSエンドポイント

付録2: パフォーマンスのチューニング

要件に基づいて、次の設定項目をcore-site.xmlファイルに追加できます。 JindoSDK 4.0以降のみがこれらの設定項目をサポートしています。

<configuration>

    <property>
          <!-- Specify the directories to which the client writes temporary files. You can configure multiple directories that are separated by commas (,). Read and write permissions must be granted in environments that involve multiple users. -->
        <name>fs.oss.tmp.data.dirs</name>
        <value>/tmp/</value>
    </property>

    <property>
          <!-- Specify the number of retries for failed access to OSS. -->
        <name>fs.oss.retry.count</name>
        <value>5</value>
    </property>

    <property>
          <!-- Specify the timeout period of OSS access requests. Unit: milliseconds. -->
        <name>fs.oss.timeout.millisecond</name>
        <value>30000</value>
    </property>

    <property>
          <!-- Specify the timeout period of OSS connections. Unit: milliseconds. -->
        <name>fs.oss.connection.timeout.millisecond</name>
        <value>3000</value>
    </property>

    <property>
          <!-- Specify the number of concurrent threads that can be used to upload a single object to OSS. -->
        <name>fs.oss.upload.thread.concurrency</name>
        <value>5</value>
    </property>

    <property>
          <!-- Specify the number of concurrent tasks that can be initiated to upload objects to OSS. -->
        <name>fs.oss.upload.queue.size</name>
        <value>5</value>
    </property>

    <property>
          <!-- Specify the maximum number of concurrent tasks that are initiated to upload objects to OSS in a process. -->
        <name>fs.oss.upload.max.pending.tasks.per.stream</name>
        <value>16</value>
    </property>

    <property>
          <!-- Specify the number of concurrent tasks that can be initiated to download objects from OSS. -->
        <name>fs.oss.download.queue.size</name>
        <value>5</value>
    </property>

    <property>
          <!-- Specify the maximum number of concurrent tasks that can be initiated to download objects from OSS in a process. -->
        <name>fs.oss.download.thread.concurrency</name>
        <value>16</value>
    </property>

    <property>
          <!-- Specify the size of the buffer that can be used to prefetch data from OSS. -->
        <name>fs.oss.read.readahead.buffer.size</name>
        <value>1048576</value>
    </property>

    <property>
          <!-- Specify the number of buffers that can be used to prefetch data from OSS at the same time. -->
        <name>fs.oss.read.readahead.buffer.count</name>
        <value>4</value>
    </property>

</configuration>