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

E-MapReduce:RootPolicy を介した OSS-HDFS へのアクセス

最終更新日:Nov 09, 2025

OSS-HDFS は RootPolicy をサポートしています。RootPolicy を使用すると、OSS-HDFS にカスタムプレフィックスを設定できます。この機能により、Serverless Spark は、元の hdfs:// プレフィックスを使用するタスクを変更することなく、OSS-HDFS 内のデータで直接操作を実行できます。

準備

  • Serverless Spark ワークスペースを作成済みであること。詳細については、「ワークスペースの作成」をご参照ください。

  • OSS-HDFS が有効になっている EMR on ECS クラスターを作成済みであること。詳細については、「クラスターの作成」をご参照ください。

RootPolicy の設定

説明

クラスターの OSS-HDFS サービスに対して RootPolicy をすでに設定している場合は、設定セクションをスキップして、直接「RootPolicy の使用」をお読みください。

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

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

    2. インストールされている JindoSDK JAR パッケージの bin ディレクトリに移動します。

      cd jindosdk-x.x.x/bin/
      説明

      x.x.x は JindoSDK JAR パッケージのバージョン番号を示します。

    3. jindosdk.cfg という名前の設定ファイルを作成し、次のパラメーターを設定ファイルに追加します。

      [common] 次のデフォルト設定を保持します。
      logger.dir = /tmp/jindo/
      logger.sync = false
      logger.consolelogger = false
      logger.level = 0
      logger.verbose = 0
      logger.cleaner.enable = true
      hadoopConf.enable = false
      
      [jindosdk] 次のパラメーターを指定します。
      <!-- この例では、中国 (杭州) リージョンが使用されています。実際のリージョンを指定してください。 -->
      fs.oss.endpoint = cn-hangzhou.oss-dls.aliyuncs.com
      <! -- OSS-HDFS へのアクセスに使用する AccessKey ID と AccessKey Secret を設定します。 -->
      fs.oss.accessKeyId = yourAccessKeyId    
      fs.oss.accessKeySecret = yourAccessKeySecret                                        
    4. 環境変数を設定します。

      export JINDOSDK_CONF_DIR=<JINDOSDK_CONF_DIR>

      <JINDOSDK_CONF_DIR> を jindosdk.cfg 設定ファイルの絶対パスに設定します。

  2. RootPolicy を設定します。

    次の SetRootPolicy コマンドを実行して、バケットのカスタムプレフィックスを含む登録済みアドレスを指定します。

    jindo admin -setRootPolicy oss://<bucket_name>.<dls_endpoint>/ hdfs://<your_ns_name>/

    次の表に、SetRootPolicy コマンドのパラメーターを説明します。

    パラメーター

    説明

    bucket_name

    OSS-HDFS が有効になっているバケットの名前。

    dls_endpoint

    OSS-HDFS が有効になっているバケットがあるリージョンのエンドポイント。例: cn-hangzhou.oss-dls.aliyuncs.com

    RootPolicy を実行するたびに SetRootPolicy コマンドに <dls_endpoint> パラメーターを繰り返し追加したくない場合は、次のいずれかの方法を使用して、Hadoop の core-site.xml ファイルに設定項目を追加できます。

    • 方法 1:

      <configuration>
          <property>
              <name>fs.oss.endpoint</name>
              <value><dls_endpoint></value>
          </property>
      </configuration>
    • 方法 2:

      <configuration> 
       <property>
              <name>fs.oss.bucket.<bucket_name>.endpoint</name>
              <value><dls_endpoint></value>
          </property>
      </configuration>

    your_ns_name

    OSS-HDFS へのアクセスに使用されるカスタム nsname。test などの空でない文字列がサポートされています。現在のバージョンでは、ルートディレクトリのみがサポートされています。

  3. アクセス ポリシーの検出アドレスとスキーム実装クラスを設定します。

    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>
            <value>com.aliyun.jindodata.hdfs.HDFS</value>
        </property>
        <property>
            <name>fs.hdfs.impl</name>
            <value>com.aliyun.jindodata.hdfs.JindoHdfsFileSystem</value>
        </property>
    </configuration>

    複数のバケットに対してアクセス ポリシーの検出アドレスとスキーム実装クラスを設定する場合は、バケットをコンマ (,) で区切ります。

  4. 次のコマンドを実行して、RootPolicy が正常に設定されているかどうかを確認します。

    hadoop fs -ls hdfs://<your_ns_name>/

    次の結果が返された場合、RootPolicy は正常に設定されています。

    drwxr-x--x   - hdfs  hadoop          0 2023-01-05 12:27 hdfs://<your_ns_name>/apps
    drwxrwxrwx   - spark hadoop          0 2023-01-05 12:27 hdfs://<your_ns_name>/spark-history
    drwxrwxrwx   - hdfs  hadoop          0 2023-01-05 12:27 hdfs://<your_ns_name>/tmp
    drwxrwxrwx   - hdfs  hadoop          0 2023-01-05 12:27 hdfs://<your_ns_name>/user
  5. カスタムプレフィックスを使用して OSS-HDFS にアクセスします。

    Hive や Spark などのサービスを再起動すると、カスタムプレフィックスを使用して OSS-HDFS にアクセスできます。

  6. 任意。他の目的で RootPolicy を使用します。

    • バケットに指定されたカスタムプレフィックスを含むすべての登録済みアドレスを一覧表示する

      次の listAccessPolicies コマンドを実行して、バケットに指定されたカスタムプレフィックスを含むすべての登録済みアドレスを一覧表示します。

      jindo admin -listAccessPolicies oss://<bucket_name>.<dls_endpoint>/
    • バケットに指定されたカスタムプレフィックスを含むすべての登録済みアドレスを削除する:

      次の unsetRootPolicy コマンドを実行して、バケットに指定されたカスタムプレフィックスを含むすべての登録済みアドレスを削除します。

      jindo admin -unsetRootPolicy oss://<bucket_name>.<dls_endpoint>/ hdfs://<your_ns_name>/

RootPolicy の使用

シナリオ 1: Notebook セッションで RootPolicy を使用する

  1. Spark 設定を構成します。

    1. [EMR Serverless Spark] ページで、左側のナビゲーションウィンドウにある [セッションマネージャー] をクリックします。

    2. [Notebook セッション] ページで、[Notebook セッションの作成] をクリックします。

    3. [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
  2. データ開発 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()
    説明

    CREATE TABLE 文の "<ns_name>" を、OSS-HDFS にアクセスするためのカスタムプレフィックスに置き換えます。

    image

説明

Notebook の !hadoop fs コマンドは、現在 RootPolicy をサポートしていません。

シナリオ 2: SQL セッションでの使用

  1. Spark 設定を構成します。

    1. [EMR Serverless Spark] ページで、左側のナビゲーションウィンドウにある [セッションマネージャー] をクリックします。

    2. [SQL セッション] ページで、[SQL セッションの作成] をクリックします。

    3. [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
  2. データ開発 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;
    説明

    CREATE TABLE 文の "<ns_name>" を、OSS-HDFS にアクセスするためのカスタムプレフィックスに置き換えます。

    image

シナリオ 3: バッチジョブで RootPolicy を使用する

  1. ファイルをアップロードします。この記事では、サンプル SQL ファイル test.sql を示します。

    1. [EMR Serverless Spark] ページで、左側のナビゲーションウィンドウにある [ファイル管理] をクリックします。

    2. [管理対象ファイルディレクトリ] ページで、[ファイルのアップロード] をクリックします。

    3. [ファイルのアップロード] ダイアログボックスで、ファイルアップロードエリアをクリックしてローカルファイルを選択するか、ターゲットファイルをファイルアップロードエリアに直接ドラッグアンドドロップします。

  2. Spark 設定を構成します。

    1. [EMR Serverless Spark] ページで、左側のナビゲーションウィンドウにある [データ開発] をクリックします。

    2. [開発ディレクトリ] タブで、image (作成) アイコンをクリックします。

    3. 表示されるダイアログボックスで、[名前] を入力し、[バッチジョブ] タイプで SQL タスクを選択して、[OK] をクリックします。

    4. [タスク設定] ページで、次の [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
  3. データ開発ページで、[実行] をクリックします。結果は以下のとおりです。image

よくある質問

!Hadoop fs コマンドが、RootPolicy によって設定されたカスタムプレフィックスを使用するとエラーを報告する。

  • 問題: Notebook タスクで !hadoop fs -ls hdfs://<ns_name>/ コマンドを実行すると、次のエラーメッセージが表示されます。

    init failed, Caused by error 30004: Invalid argument: Neither fs.hdfs.test.dfs.ha.namenodes nor dfs.ha.namenodes.test is configured for HA namenodes
    ERROR: code=1002, message=ERROR: failed to init filesystem.
  • 原因: 現在、Notebook の !hadoop fs コマンドは RootPolicy をサポートしていません。

  • 解決策: Notebook の !hadoop fs コマンドについては、元の OSS-HDFS アドレスを使用することをお勧めします。