JindoFS SDK を使用して、E-MapReduce (EMR) クラスター外から認証情報なしで EMR の JindoFS ファイルシステムにアクセスできます。
前提条件
EMR クラスター外にある ECS インスタンスで、Hadoop および Java SDK がインストールされていること。
背景情報
JindoFS SDK を使用する前に、環境から jboot.jar や smartdata-aliyun-jfs-*.jar など、Jindo 関連のすべてのパッケージを削除してください。Spark を使用する場合は、/opt/apps/spark-current/jars/ ディレクトリからもこれらのパッケージを削除します。
ステップ 1:インスタンス RAM ロールの作成
-
Alibaba Cloud アカウントで RAM コンソール にログインします。
-
左側のナビゲーションウィンドウで、 を選択します。
-
Create Role をクリックします。信頼できるエンティティの種類として、[Alibaba Cloud サービス] を選択します。
-
[次へ] をクリックします。
-
[Role Name] を入力します。[信頼できるサービスの選択] リストから、クラウドサーバー (ECS) を選択します。
-
[Complete] をクリックします。
ステップ 2:RAM ロールへの権限付与
-
Alibaba Cloud アカウントで RAM コンソール にログインします。
-
(任意)システムポリシーを使用しない場合は、カスタムポリシーを作成できます。詳細については、「Account access control」をご参照ください。
-
左側のナビゲーションウィンドウで、 を選択します。
-
作成したロールの名前をクリックします。
-
**Permissions** タブで、Add Permissions をクリックします。
-
Authorization Scope で、System Policy または Custom Policy を選択します。
たとえば、
AliyunOSSReadOnlyAccessポリシーを使用できます。必要な最小限の権限を持つポリシーを選択してください。 -
アタッチするポリシーを選択します。
-
OK をクリックします。
ステップ 3:RAM ロールのインスタンスへのアタッチ
-
ECS コンソールにログインします。
-
左側のナビゲーションウィンドウで、 を選択します。
-
上部のナビゲーションバーで、ご利用のインスタンスがあるリージョンを選択します。
-
対象の ECS インスタンスを見つけ、Actions 列で、 を選択します。

-
表示されるダイアログボックスで、インスタンス RAM ロールを選択し、OK をクリックします。
ステップ 4:環境変数の設定
ECS インスタンスで次のコマンドを実行し、CLASSPATH 環境変数を設定します。
export CLASSPATH=/path/to/jindofs-x.y.z-sdk.jar
Hadoop 環境では、代わりに次のコマンドを実行します。
HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/path/to/jindofs-x.y.z-sdk.jar
ステップ 5:認証情報不要のアクセスのテスト
-
シェルを使用して OSS にアクセスします。
hdfs dfs -ls oss://<your-bucket-name>/ -
Hadoop FileSystem API を使用して OSS にアクセスします。
標準の Hadoop FileSystem API を使用して OSS にアクセスすることもできます。例:
import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.LocatedFileStatus; import org.apache.hadoop.fs.Path; import org.apache.hadoop.fs.RemoteIterator; import java.net.URI; public class test { public static void main(String[] args) throws Exception { // ossPath を実際の OSS パス(例:oss://your-bucket-name/)に置き換えてください。 String ossPath = "oss://your-bucket-name/"; // SDK は自動的にインスタンスメタデータサービスから認証情報を取得します。 Configuration conf = new Configuration(); FileSystem fs = FileSystem.get(new URI(ossPath), conf); // 指定パス内のファイルを一覧表示します。 RemoteIterator<LocatedFileStatus> iterator = fs.listFiles(new Path(ossPath), false); while (iterator.hasNext()){ LocatedFileStatus fileStatus = iterator.next(); Path fullPath = fileStatus.getPath(); System.out.println(fullPath); } } }