Tous les produits
Search
Centre de documentation

E-MapReduce:Connect Spark to OSS

Dernière mise à jour :Aug 09, 2026

EMR intègre Spark à Object Storage Service (OSS), ce qui vous permet de lire et d'écrire des données OSS avec Spark RDD (Scala), PySpark ou Spark SQL. EMR vous permet de lire des données depuis OSS et d'y écrire sans spécifier de paire AccessKey, ou en spécifiant explicitement une paire AccessKey.

Choisir une méthode d'accès

Méthode Quand l'utiliser
Accès sans mot de passe (recommandé) Votre cluster EMR prend en charge l'accès sans mot de passe à OSS. Aucune gestion d'identifiants n'est requise.
AccessKey explicite Vous devez utiliser une paire AccessKey spécifique, ou votre cluster ne prend pas en charge l'accès sans mot de passe.

Prérequis

  • Un cluster EMR avec Spark installé

  • Un accès SSH au nœud maître. Pour plus de détails, consultez Connexion au nœud maître d'un cluster

  • Un compartiment OSS contenant les données à lire, ou un chemin OSS accessible en écriture pour la sortie

Accéder à OSS sans spécifier de paire AccessKey

Par défaut, les clusters EMR utilisent l'accès sans mot de passe à OSS. Les exemples suivants utilisent le schéma d'URI oss:// pour lire et écrire dans OSS.

Utiliser Spark Shell (Scala)

  1. Connectez-vous au nœud maître via SSH.

  2. Démarrez Spark Shell :

    spark-shell
  3. Exécutez le code suivant. Remplacez <yourBucket> par le nom de votre compartiment OSS.

    scala> val pathIn = "oss://<yourBucket>/path/to/read"
    scala> val inputData = sc.textFile(pathIn)
    scala> val cnt = inputData.count
    cnt: Long = ...
    scala> println(s"count: $cnt")
    scala> val outputPath = "oss://<yourBucket>/path/to/write"
    scala> val outputData = inputData.map(e => s"$e has been processed.")
    scala> outputData.saveAsTextFile(outputPath)

    Ce code lit toutes les lignes du chemin d'entrée, les compte, ajoute un suffixe à chaque ligne et écrit le résultat dans le chemin de sortie. Pour voir l'exemple complet, consultez SparkOssDemo.scala sur GitHub.

Utiliser PySpark

  1. Connectez-vous au nœud maître via SSH.

  2. Démarrez PySpark :

    pyspark
  3. Exécutez le code suivant. Remplacez <yourBucket> par le nom de votre compartiment OSS.

    >>> pathIn = "oss://<yourBucket>/path/to/read"
    >>> df = spark.read.text(pathIn)
    >>> cnt = df.count()
    >>> print(cnt)
    >>> outputPath = "oss://<yourBucket>/path/to/write"
    >>> df.write.format("parquet").mode("overwrite").save(outputPath)

    Ce code lit le chemin d'entrée sous forme de DataFrame texte, affiche le nombre de lignes et écrit le résultat au format Parquet dans le chemin de sortie.

Utiliser Spark SQL

  1. Connectez-vous au nœud maître via SSH.

  2. Démarrez l'interface CLI Spark SQL :

    spark-sql
  3. Créez une base de données stockée dans OSS, créez une table CSV et insérez une ligne :

    Paramètre Description
    delimiter Caractère utilisé pour séparer les champs dans le fichier CSV.
    header Définissez sur true si la première ligne contient les noms de colonnes ; sinon, définissez sur false.
    CREATE DATABASE test_db LOCATION "oss://<yourBucket>/test_db";
    USE test_db;
    CREATE TABLE student (id INT, name STRING, age INT)
        USING CSV OPTIONS ("delimiter"=";", "header"="true");
    INSERT INTO student VALUES(1, "ab", 12);
    SELECT * FROM student;

    Remplacez <yourBucket> par le nom de votre compartiment OSS. L'instruction SELECT renvoie :

    1    ab    12
  4. Pour vérifier le résultat, consultez le fichier CSV dans OSS. Le fichier utilise des points-virgules comme délimiteurs, avec la première ligne servant d'en-tête :

    id;name;age
    1;ab;12

Accéder à OSS en spécifiant une paire AccessKey

Utilisez cette méthode lorsque l'accès sans mot de passe n'est pas disponible, ou lorsque vous devez vous authentifier avec une paire AccessKey spécifique.

Étape 1 : Supprimer la configuration sans mot de passe

Supprimez le paramètre fs.oss.credentials.provider du fichier core-site.xml du service Hadoop-Common.

Étape 2 : Vérifier que l'accès sans mot de passe est supprimé

Exécutez la commande suivante :

hadoop fs -ls oss://<yourBucket>/test_db

Si la suppression a réussi, vous obtenez le message suivant :

ls: ERROR: not found login secrets, please configure the accessKeyId and accessKeySecret.

Étape 3 : Ajouter les paramètres AccessKey à core-site.xml

Dans le fichier core-site.xml du service Hadoop-Common, ajoutez les paramètres suivants :

Clé Valeur d'exemple Description
fs.oss.accessKeyId LTAI5tM85Z4sc**** Votre ID AccessKey
fs.oss.accessKeySecret HF7P1L8PS6Eqf**** Votre secret AccessKey

Étape 4 : Vérifier la configuration AccessKey

Exécutez la commande suivante :

hadoop fs -ls oss://<yourBucket>/test_db

Si la paire AccessKey est correctement configurée, la sortie liste le chemin OSS :

drwxrwxrwx   - root root          0 2025-02-24 11:45 oss://<yourBucket>/test_db/student

Étape 5 : Redémarrer les services Spark

Redémarrez tous les services liés à Spark. Une fois qu'ils sont opérationnels, utilisez Spark Shell, PySpark ou Spark SQL pour lire et écrire dans OSS.

FAQ

Comment lire depuis un compartiment et écrire dans un autre lorsque leurs identifiants diffèrent ?

Configurez un fournisseur d'identifiants au niveau du compartiment en utilisant le paramètre fs.oss.bucket.<BucketName>.credentials.provider, où <BucketName> correspond au nom du compartiment que vous souhaitez configurer. Pour plus de détails, consultez Configurer un fournisseur d'identifiants pour OSS ou OSS-HDFS par compartiment.

Comment accéder à un compartiment situé dans une autre région ?

Utilisez le format oss://<BucketName>.<public endpoint of the bucket>/ pour spécifier le point de terminaison public du compartiment. L'accès interrégional engendre des frais de transfert de données et peut affecter la stabilité.

Comment utiliser les SDK Amazon S3 pour accéder à OSS ?

OSS propose des opérations API compatibles avec Amazon S3. Après avoir migré vos données d'Amazon S3 vers OSS, mettez à jour la configuration de votre client pour qu'elle pointe vers les points de terminaison OSS. Pour plus de détails, consultez Utiliser les SDK Amazon S3 pour accéder à OSS.