Cette rubrique explique comment accéder à Object Storage Service (OSS) depuis Spark sur MaxCompute.
Configurer un endpoint OSS
Pour le débogage, utilisez l'endpoint public de la région où se trouve OSS. Pour la soumission de tâches en production, utilisez l'endpoint interne de cette même région. Pour plus d'informations, consultez la section Régions et endpoints.
Configurer une méthode d'accès à OSS
-
Accédez à OSS à l'aide de l'AccessKey ID et de l'AccessKey Secret d'un compte.
spark.hadoop.fs.oss.accessKeyId = xxxxxx spark.hadoop.fs.oss.accessKeySecret = xxxxxx spark.hadoop.fs.oss.endpoint = oss-xxxxxx-internal.aliyuncs.com -
Accédez à OSS à l'aide d'un jeton Security Token Service (STS).
L'utilisation de l'AccessKey ID et de l'AccessKey Secret d'un compte impose de configurer ces identifiants en clair, ce qui présente des risques de sécurité. Nous vous recommandons d'utiliser un jeton STS pour accéder à OSS.
-
Accédez à la page RAM Quick Authorization et cliquez sur Authorize. Le projet MaxCompute peut alors accéder aux ressources OSS du compte Alibaba Cloud actuel via un jeton STS.
RemarqueCette méthode d'autorisation n'est possible que si le propriétaire du projet MaxCompute est le compte Alibaba Cloud détenteur des ressources OSS cibles.
-
Récupérez l'Alibaba Cloud Resource Name (ARN) du rôle assumé par Spark sur MaxCompute.
Connectez-vous à la console Resource Access Management (RAM).
Dans le volet de navigation de gauche, choisissez Identities > Roles.
Sur la page Roles, recherchez AliyunODPSDefaultRole.
Dans les résultats, cliquez sur AliyunODPSDefaultRole dans la colonne Role Name. Sur la page affichée, récupérez la valeur du champ ARN dans la section Basic Information. La valeur suit le format
acs:ram::xxxxxxxxxxxxxxx:role/aliyunodpsdefaultrole.
-
Ajoutez le contenu suivant à la configuration de Spark sur MaxCompute :
# 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
-
Configurer une liste d'autorisation
Dans la plupart des cas, Spark sur MaxCompute accède aux ressources OSS sans nécessiter de configuration de liste d'autorisation.
Dans certains cas particuliers (par exemple, lors de lectures ou d'écritures massives dans des buckets OSS), l'accès aux ressources OSS par Spark sur MaxCompute peut échouer. Ajoutez alors la configuration suivante :
spark.hadoop.odps.cupid.trusted.services.access.list=[your_bucket_name].oss-xxxxxx-internal.aliyuncs.com
Cette configuration s'applique uniquement aux tâches soumises en mode yarn-cluster. Vous devez l'ajouter au fichier de configuration ou via une commande de l'outil CLI.
Utiliser JindoSDK pour accéder à OSS
Ajoutez les paramètres spark.hadoop.fs.AbstractFileSystem.oss.impl et spark.hadoop.fs.oss.impl à l'objet SparkConf. Exemple de code :
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")
La configuration du paramètre spark.hadoop.fs.oss.impl est obligatoire. À défaut, le message d'erreur "No FileSystem for scheme: oss" s'affiche.