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

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

最終更新日:May 06, 2024

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

前提条件

ビデオチュートリアル

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

手順

  1. 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は、JARパッケージのバージョン番号を示します。

  4. 環境変数を設定します。

    1. 設定JINDOSDK_HOME.

      次のサンプルコードは、パッケージを /usr/lib/jindosdk-x.x.x-linuxディレクトリに解凍する方法の例を示しています。

      エクスポート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. 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ファイルでOSS-HDFSが有効になっているバケットへのアクセスに使用するAccessKey IDとAccessKey secretを設定します。

      <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を使用してObject Storage Service (OSS) のバケットにアクセスする場合は、エンドポイントを設定する必要があります。 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/
    • ディレクトリの作成

      次のコマンドを実行して、examplebucketという名前のバケットにdir/ という名前のディレクトリを作成します。

      hdfs dfs -mkdir oss:// examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/dir/
    • オブジェクトまたはディレクトリの照会

      次のコマンドを実行して、examplebucketという名前のバケット内のオブジェクトまたはディレクトリを照会します。

      hdfs dfs -ls oss:// examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/
    • オブジェクトまたはディレクトリのサイズを照会する

      次のコマンドを実行して、examplebucketという名前のバケット内のすべてのオブジェクトまたはディレクトリのサイズを照会します。

      hdfs dfs -du oss:// examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/
    • オブジェクトのコンテンツを照会する

      次のコマンドを実行して、examplebucketという名前のバケット内のlocalfile.txtという名前のオブジェクトのコンテンツを照会します。

      hdfs dfs -cat oss:// examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/localfile.txt
      重要

      照会されたオブジェクトのコンテンツは、プレーンテキストで画面に表示されます。 コンテンツがエンコードされている場合は、HDFS API for Javaを使用してコンテンツを読み取り、デコードします。

    • オブジェクトまたはディレクトリのコピー

      次のコマンドを実行して、examplebucketという名前のバケット内のsubdir1という名前のルートディレクトリを、同じバケット内のsubdir2という名前のディレクトリにコピーします。 さらに、subdir1ルートディレクトリの位置、subdir1ルートディレクトリ内のオブジェクト、およびsubdir1ルートディレクトリ内のサブディレクトリの構造および内容は変更されない。

      hdfs dfs -cp oss:// examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/subdir1 oss:// examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/subdir2/subdir1
    • オブジェクトまたはディレクトリの移動

      次のコマンドを実行して、examplebucketという名前のバケット内のsrcdirという名前のルートディレクトリと、ルートディレクトリ内のオブジェクトおよびサブディレクトリをdestdirという名前の別のルートディレクトリに移動します。

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

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

      hdfs dfs -get oss:// examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/exampleobject.txt /tmp/
    • オブジェクトまたはディレクトリの削除

      次のコマンドを実行して、destfolder/ という名前のディレクトリとそのディレクトリ内のすべてのオブジェクトをexamplebucketという名前のバケットから削除します。

      hdfs dfs -rm -r oss:// examplebucket.cn-hangzhou.oss-dls.aliyuncs.com/destfolder/

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

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

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

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

    <configuration>
        <property>
            <!-- この例では、OSS-HDFSが有効になっているバケットの名前としてexamplebucketが使用されます。 実際のバケット名を指定します。  -->
            <name>fs.oss.bucket.examplebucket.endpoint</name>
            <!-- この例では、中国 (杭州) リージョンが使用されています。 実際のリージョンを指定します。  -->
            <valu e>cn-hangzhou.oss-dls.aliyuncs.com</value>
        </property>
    </configuration> 
  • デフォルトのOSSエンドポイントを使用する

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

    <configuration>
        <property>
            <name>fs.oss.endpoint</name>
            <!-- この例では、中国 (杭州) リージョンが使用されています。 実際のリージョンを指定します。  -->
            <valu e>cn-hangzhou.oss-dls.aliyuncs.com</value>
        </property>
    </configuration> 
説明

複数のメソッドを使用してエンドポイントを設定する場合、設定は次の優先順位で有効になります。アクセスパスで指定されたエンドポイント> バケットレベルのエンドポイント> デフォルトのOSSエンドポイント

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

要件に基づいて、次の設定項目を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にアクセスするためのタイムアウト期間。 単位:ミリ秒。 -->
        <nam e>fs.oss.timeout.mil lissecond </name>
        <value>30000</value>
    </property>

    <property>
          <!-- OSSに接続するためのタイムアウト期間。 単位:ミリ秒。 -->
        <nam e>fs.oss.connection.timeout.mil lissecond </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からデータをプリフェッチするために使用されるバッファのサイズ。 -->
        <name>fs.oss.read.readahead.buffer.size</name>
        <value>1048576</value>
    </property>

    <property>
          <!-- OSSから同時にデータをプリフェッチするために使用されるバッファの数。 -->
        <name>fs.oss.read.readahead.buffer.count</name>
        <value>4</value>
    </property>

</configuration>