このトピックでは、JindoFS SDK を使用する場合に、ECS インスタンス (EMR クラスタ内のインスタンスではない) からパスワード不要モードで JindoFileSystem (JindoFS) にアクセスする方法について説明します。
前提条件
1. EMR 用以外の ECS インスタンスがあります。 2. Hadoop エコシステムが使用されています。 3. Java 用の JindoFS SDK が取得されています。
背景情報
JindoFS SDK を使用する前に、jboot.jar や smartdata-aliyun-jfs-*.jar など、環境から Jindo 関連のパッケージを削除する必要があります。Spark を使用するには、/opt/apps/spark-current/jars/ ディレクトリにあるパッケージも削除する必要があります。
前提条件
Alibaba Cloudアカウントで [RAMコンソール] にログオンします。
左側のナビゲーションペインで、 を選択します。
RAMロール ページで、[ロールの作成] をクリックします。[ロールの作成] パネルで、信頼できるエンティティの種類として [alibaba Cloud サービス] を選択します。
[次へ] をクリックします。
[RAMロール名] フィールドにロール名を入力し、Elastic Compute Service[信頼できるサービスの選択] ドロップダウンリストから を選択します。
[OK] をクリックします。
背景情報
Alibaba Cloudアカウントで [RAMコンソール] にログオンします。
オプション。システム権限を使用しない場合は、カスタム権限を作成できます。詳細については、RAMを使用したアクセス制御の実装 の「(オプション) カスタム認証ポリシーの作成」セクションをご参照ください。
左側のナビゲーションペインで、 を選択します。
作成された RAM ロールを見つけ、[ロール名] をクリックします。
[詳細な権限] をクリックします。
表示されたパネルで、[タイプ] に [システムポリシー] または [カスタムポリシー] を選択します。
たとえば、AliyunOSSReadOnlyAccess などです。具体的なビジネスニーズに基づいて適切なポリシーを選択してください。
ポリシー名を入力します。
[OK] をクリックします。
手順 1:インスタンス RAM ロールを作成する
ECSコンソールにログオンします。
左側のナビゲーションペインで、 を選択します。
上部のナビゲーションバーで、リージョンを選択します。
バインド先の ECS インスタンスを見つけ、[アクション] 列で を選択します。
[RAM ロールのバインド/バインド解除] ダイアログボックスで、RAM ロールを選択し、[OK] をクリックします。
手順 4:ECS で環境変数を構成する
次のいずれかのコマンドを実行して、ECS で環境変数を構成します。
export CLASSPATH=/xx/xx/jindofs-2.5.0-sdk.jar
および
HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/xx/xx/jindofs-2.5.0-sdk.jar
手順 5:パスワードなしモードで JindoFS にアクセスする
Shell を使用して OSS にアクセスします。
hdfs dfs -ls/-mkdir/-put/....... oss://<ossPath>
Hadoop の FileSystem インターフェースを使用して 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 { // FileSystem オブジェクトを取得します。 FileSystem fs = FileSystem.get(new URI("ossPath"), new Configuration()); // ファイルのリストを取得します。 RemoteIterator<LocatedFileStatus> iterator = fs.listFiles(new Path("ossPath"), false); while (iterator.hasNext()){ LocatedFileStatus fileStatus = iterator.next(); Path fullPath = fileStatus.getPath(); System.out.println(fullPath); } } }