このトピックでは、MaxComputeのSparkからObject Storage Service (OSS) にアクセスする方法について説明します。
OSSエンドポイントの設定
機能をデバッグするときは、OSSが存在するリージョンのパブリックエンドポイントを使用します。 本番環境でジョブを送信するときに、OSSが存在するリージョンの内部エンドポイントを使用します。 詳細については、「リージョン、エンドポイント、オープンポート」をご参照ください。
OSSアクセス方法の設定
アカウントのAccessKey IDとAccessKey secretを使用してOSSにアクセスします。
spark.hadoop.fs.oss.accessKeyId = xxxxxx spark.hadoop.fs.oss.accessKeySecret = xxxxxx spark.hadoop.fs.oss.endpoint = oss-xxxxxx-internal.aliyuncs.comSecurity Token Service (STS) トークンを使用してOSSにアクセスします。
アカウントのAccessKey IDとAccessKey secretを使用してOSSにアクセスする場合は、プレーンテキストのAccessKey IDとAccessKey secretを設定する必要があります。 これはセキュリティ上のリスクを招く。 STSトークンを使用してOSSにアクセスすることを推奨します。
[クラウドリソースアクセス権限付与] ページに移動し、[詳細を表示] をクリックします。 その後、MaxComputeプロジェクトは、STSトークンを使用して、現在のAlibaba CloudアカウントのOSSリソースにアクセスできます。
説明MaxComputeプロジェクトの所有者が、アクセスするOSSリソースを所有するAlibaba Cloudアカウントである場合にのみ、この方法を使用してMaxComputeプロジェクトにOSSリソースへのアクセスを許可できます。
MaxComputeのSparkが担当するロールのAlibaba Cloudリソース名 (ARN) を取得します。
左側のナビゲーションウィンドウで、[アイデンティティ]> [ロール] を選択します。
[ロール] ページで、AliyunODPSDefaultRoleを検索します。
検索結果で、[ロール名] 列の [AliyunODPSDefaultRole] をクリックします。 表示されるページで、[基本情報] セクションの [ARN] の値を取得します。 値は
acs:ram:: xxxxxxxxxxxxxxxxx: role/aliyunodpsdefaultrole形式です。
MaxComputeのSparkの設定に次の内容を追加します。
# Configure Spark on MaxCompute to access OSS resources by using an STS token. spark.hadoop.fs.oss.credentials.provider=org.apache.hadoop.fs.aliyun.oss.AliyunStsTokenCredentialsProvider # Configure the ARN of the role that Spark on MaxCompute assumes. spark.hadoop.fs.oss.ststoken.roleArn=acs:ram::xxxxxxxxxxxxxxx:role/aliyunodpsdefaultrole # Configure the internal endpoint that is used to access OSS resources over a VPC. spark.hadoop.fs.oss.endpoint=oss-cn-hangzhou-internal.aliyuncs.com
ホワイトリストの構成
ほとんどの場合、MaxComputeのSparkは、ホワイトリストを設定する必要なしにOSSリソースにアクセスできます。
特殊な場合 (たとえば、大量のデータがOSSバケットから読み取られたり、OSSバケットに書き込まれたりする場合) 、MaxComputeのSparkはOSSリソースへのアクセスに失敗する可能性があります。 この場合は、次の設定を追加します。
spark.hadoop.odps.cupid.trusted.services.access.list=[your_bucket_name].oss-xxxxxx-internal.aliyuncs.comこの設定は、yarn-clusterモードでジョブを送信する場合にのみ使用できます。 設定ファイルまたはCLIツールのコマンドに設定を追加する必要があります。
JindoSDKを使用したOSSへのアクセス
spark.hadoop.fs.AbstractFileSystem.oss.implおよびspark.hadoop.fs.oss.implパラメーターをSparkConfオブジェクトに追加します。 サンプルコード:
val conf = new SparkConf()
.setAppName("jindo-sdk-demo")
.set("spark.hadoop.fs.AbstractFileSystem.oss.impl", "com.aliyun.emr.fs.oss.OSS")
.set("spark.hadoop.fs.oss.impl", "com.aliyun.emr.fs.oss.JindoOssFileSystem")spark.hadoop.fs.oss.implパラメーターを設定する必要があります。 それ以外の場合、「No FileSystem for scheme: oss」というエラーメッセージが返されます。