Spark est un moteur d'analytique unifié pour le big data, réputé pour ses hautes performances, sa simplicité d'utilisation et sa polyvalence. Il prend en charge des calculs complexes en mémoire, ce qui le rend idéal pour la création d'applications d'analyse de données à grande échelle et à faible latence. DataWorks vous permet d'utiliser des nœuds EMR Spark pour développer et planifier périodiquement des tâches Spark. Cette rubrique explique comment configurer et utiliser les nœuds EMR Spark et fournit des exemples d'application.
Prérequis
-
Avant de commencer le développement de nœuds, si vous avez besoin d'un environnement de composants personnalisé, créez une image personnalisée basée sur l'image officielle
dataworks_emr_base_task_pod, puis utilisez-la dans Data Studio. Pour plus d'informations, consultez les rubriques Créer une image personnalisée et Utiliser des images dans le développement de données.Par exemple, vous pouvez remplacer les packages JAR Spark ou ajouter des dépendances à des
libraries,filesouJAR packagesspécifiques lors de la création d'une image personnalisée. Créez un cluster Alibaba Cloud EMR et enregistrez-le dans DataWorks. Pour plus d'informations, consultez la rubrique Nouveau Data Studio : Attacher une ressource de calcul EMR .
-
(Facultatif, pour les utilisateurs RAM) L'utilisateur Resource Access Management (RAM) chargé du développement des tâches doit être ajouté à l'espace de travail et recevoir le rôle Development ou Workspace Administrator (ce rôle inclut des autorisations étendues et doit être accordé avec prudence). Pour plus d'informations, consultez la rubrique Ajouter des membres à l'espace de travail .
Si vous utilisez un compte root, ignorez cette étape.
Si vos tâches nécessitent un environnement de développement spécifique, vous pouvez construire une image personnalisée. Pour plus d'informations, consultez la rubrique relative aux images personnalisées .
Limitations
Les nœuds EMR Shell peuvent s'exécuter uniquement sur un groupe de ressources serverless (recommandé) ou sur un groupe de ressources exclusif pour la planification. L'utilisation d'une image personnalisée pour le développement de données nécessite un groupe de ressources serverless.
-
Pour gérer les métadonnées d'un cluster DataLake ou personnalisé dans DataWorks, vous devez d'abord configurer EMR-HOOK sur le cluster. Pour plus d'informations, consultez la rubrique Configurer EMR-HOOK pour Spark SQL .
RemarqueSans configuration d'EMR-HOOK sur le cluster, DataWorks ne peut pas afficher les métadonnées en temps réel, générer des journaux d'audit, afficher la lignée des données ni effectuer des tâches de gouvernance liées à EMR.
Bien que les clusters EMR on ACK Spark ne prennent pas en charge l'affichage de la lignée des données, les clusters EMR Serverless Spark le permettent.
Les clusters EMR on ACK Spark et les clusters EMR Serverless Spark prennent uniquement en charge la référence aux ressources OSS via OSS REF et le téléchargement de ressources vers OSS, mais pas le téléchargement de ressources vers HDFS.
Les clusters DataLake et les clusters personnalisés prennent en charge la référence aux ressources OSS via OSS REF, le téléchargement de ressources vers OSS et le téléchargement de ressources vers HDFS.
Notes
Si vous avez activé le contrôle d'accès Ranger pour Spark dans le cluster EMR associé à l'espace de travail actuel :
Les tâches Spark qui utilisent l'image par défaut prennent automatiquement en charge cette fonctionnalité.
Pour exécuter une tâche Spark avec une image personnalisée, soumettez un ticket au support technique pour demander une mise à niveau de l'image.
Développer une tâche Spark et obtenir le package JAR
Avant de pouvoir planifier des tâches EMR Spark avec DataWorks, vous devez développer la tâche dans EMR et compiler le code dans un package JAR. Pour plus d'informations sur le développement de tâches EMR Spark, consultez la rubrique Présentation de Spark .
Vous devrez ensuite télécharger le package JAR dans DataWorks pour planifier des tâches EMR Spark récurrentes.
Procédure
-
Développez la tâche sur la page d'édition du nœud EMR Spark.
Développement d'une tâche Spark
Choisissez une option en fonction de votre scénario :
Option 1 : Téléchargement et référence
DataWorks vous permet de télécharger des ressources depuis votre machine locale vers DataStudio, puis de les référencer. Après avoir compilé la tâche EMR Spark, vous devez obtenir le package jar compilé. La méthode de stockage recommandée pour le package jar dépend de sa taille.
Téléchargez le package jar et créez-le en tant que ressource EMR DataWorks, puis soumettez-la. Vous pouvez également le stocker directement dans HDFS sur le cluster EMR. Les clusters EMR on ACK et EMR Serverless Spark ne prennent pas en charge le téléchargement de ressources vers HDFS.
JAR < 500 Mo
-
Créez une ressource EMR JAR.
Si un package jar est inférieur à 500 Mo, vous pouvez le télécharger depuis votre machine locale en tant que ressource EMR JAR DataWorks. Cela permet une gestion visuelle facile dans la console DataWorks. Après avoir créé la ressource, soumettez-la. Pour plus d'informations, consultez Créer et utiliser des ressources EMR.
Téléchargez le package jar dans le répertoire de stockage des ressources JAR en utilisant la méthode de téléchargement Local. Pour plus d'informations, consultez Gestion des ressources.
Cliquez sur Click Upload pour télécharger la ressource JAR.
Sélectionnez un Storage Path, des Data Sources et un Resource Group.
Cliquez sur Save.
-
Référencez la ressource EMR JAR.
Ouvrez le nœud EMR Spark créé et accédez à la page d'édition du code.
Dans la section Gestion des ressources du volet de navigation de gauche, recherchez la ressource que vous souhaitez référencer, cliquez dessus avec le bouton droit de la souris et sélectionnez Insert Resource Path.
-
Après avoir sélectionné la référence, une instruction de référence est automatiquement ajoutée à l'éditeur de code du nœud EMR Spark. Cela indique que la référence a bien été établie.
##@resource_reference{"spark-examples_2.12-1.0.0-SNAPSHOT-shaded.jar"} spark-examples_2.12-1.0.0-SNAPSHOT-shaded.jarDans ce code,
spark-examples_2.12-1.0.0-SNAPSHOT-shaded.jarest le nom de la ressource EMR JAR que vous avez téléchargée. -
Modifiez le code du nœud EMR Spark pour inclure la commande spark-submit. L'exemple suivant illustre cette opération.
RemarqueL'éditeur de nœuds EMR Spark ne prend pas en charge les commentaires. Écrivez le code de la tâche comme indiqué dans l'exemple suivant, sans commentaires. Sinon, l'exécution du nœud échouera.
##@resource_reference{"spark-examples_2.11-2.4.0.jar"} spark-submit --class org.apache.spark.examples.SparkPi --master yarn spark-examples_2.11-2.4.0.jar 100Remarqueorg.apache.spark.examples.SparkPi: La classe principale du package jar compilé.spark-examples_2.11-2.4.0.jar: Le nom de la ressource EMR JAR que vous avez téléchargée.Vous pouvez utiliser les valeurs d'exemple pour les autres paramètres. Vous pouvez également exécuter la commande
spark-submit --helppour afficher les informations d'utilisation et modifier la commande spark-submit selon vos besoins.Pour utiliser des paramètres simplifiés pour la commande spark-submit dans un nœud Spark, vous devez les ajouter à votre code, par exemple
--executor-memory 2G.Les nœuds Spark ne prennent en charge que la soumission de tâches à YARN en mode cluster.
Pour les tâches soumises avec spark-submit, définissez le mode de déploiement sur le mode cluster, et non sur le mode client.
JAR >= 500 Mo
-
Créez une ressource EMR JAR.
Si un package jar est égal ou supérieur à 500 Mo, vous ne pouvez pas le télécharger depuis votre machine locale en tant que ressource DataWorks. Nous vous recommandons de stocker le package jar directement dans HDFS sur le cluster EMR et d'enregistrer son chemin de stockage. Vous pouvez ensuite référencer ce chemin lors de la planification de la tâche Spark dans DataWorks.
Téléchargez le package jar dans le répertoire de stockage des ressources JAR en utilisant la méthode de téléchargement Local. Pour plus d'informations, consultez Gestion des ressources.
Cliquez sur Click Upload pour télécharger la ressource JAR.
Sélectionnez un Storage Path, des Data Sources et un Resource Group.
Cliquez sur Save.
-
Référencez la ressource EMR JAR.
Si le package jar est stocké dans HDFS, vous pouvez le référencer en spécifiant son chemin dans le code du nœud EMR Spark.
Double-cliquez sur le nœud EMR Spark créé pour ouvrir sa page d'éditeur de code.
-
Écrivez la commande spark-submit. L'exemple suivant illustre cette opération.
spark-submit --master yarn --deploy-mode cluster --name SparkPi --driver-memory 4G --driver-cores 1 --num-executors 5 --executor-memory 4G --executor-cores 1 --class org.apache.spark.examples.JavaSparkPi hdfs:///tmp/jars/spark-examples_2.11-2.4.8.jar 100Remarquehdfs:///tmp/jars/spark-examples_2.11-2.4.8.jar : Le chemin réel du package jar dans HDFS.
org.apache.spark.examples.JavaSparkPi : La classe principale du package jar compilé.
Configurez les autres paramètres en fonction des paramètres de votre cluster EMR. Vous pouvez également exécuter la commande
spark-submit --helppour afficher les informations d'utilisation de spark-submit et modifier la commande selon vos besoins.Pour utiliser des paramètres simplifiés pour la commande spark-submit dans un nœud Spark, vous devez les ajouter à votre code, par exemple
--executor-memory 2G.Les nœuds Spark ne prennent en charge que la soumission de tâches à YARN en mode cluster.
Pour les tâches soumises avec spark-submit, définissez le mode de déploiement sur le mode cluster, et non sur le mode client.
Option 2 : Référence d'une ressource OSS
Vous pouvez référencer directement les ressources OSS depuis le nœud actuel en utilisant OSS REF. Lors de l'exécution d'un nœud EMR, DataWorks charge automatiquement les ressources OSS spécifiées dans le code pour une utilisation locale. Cette méthode est couramment utilisée dans les scénarios où les tâches EMR nécessitent des dépendances JAR ou dépendent de scripts.
-
Développez la ressource JAR.
-
Préparez les dépendances de code.
Vous pouvez afficher les dépendances de code requises dans le chemin
/usr/lib/emr/spark-current/jars/sur le nœud maître de votre cluster EMR. L'exemple suivant utilise Spark 3.4.2. Vous devez ouvrir un projet IntelliJ IDEA existant, ajouter des dépendances Project Object Model (POM) et référencer les plug-ins pertinents.Dépendances POM
<dependencies> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_2.12</artifactId> <version>3.4.2</version> </dependency> <!-- Apache Spark SQL --> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-sql_2.12</artifactId> <version>3.4.2</version> </dependency> </dependencies>Plug-ins
<build> <sourceDirectory>src/main/scala</sourceDirectory> <testSourceDirectory>src/test/scala</testSourceDirectory> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.7.0</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>net.alchim31.maven</groupId> <artifactId>scala-maven-plugin</artifactId> <version>3.2.2</version> <configuration> <recompileMode>incremental</recompileMode> </configuration> <executions> <execution> <goals> <goal>compile</goal> <goal>testCompile</goal> </goals> <configuration> <args> <arg>-dependencyfile</arg> <arg>${project.build.directory}/.scala_dependencies</arg> </args> </configuration> </execution> </executions> </plugin> </plugins> </build> -
Exemple de code
package com.aliyun.emr.example.spark import org.apache.spark.sql.SparkSession object SparkMaxComputeDemo { def main(args: Array[String]): Unit = { // Create a SparkSession. val spark = SparkSession.builder() .appName("HelloDataWorks") .getOrCreate() // Print the Spark version. println(s"Spark version: ${spark.version}") } } -
Après avoir modifié le code Scala, générez un package jar.
Le package jar d'exemple est nommé
SparkWorkOSS-1.0-SNAPSHOT-jar-with-dependencies.jar.
-
-
Téléchargez la ressource JAR.
Une fois le développement du code terminé, connectez-vous à la console OSS. Dans le volet de navigation de gauche de la région, cliquez sur Bucket list.
-
Cliquez sur le nom du bucket de destination pour ouvrir la page File Management.
Cette rubrique utilise le bucket
onaliyun-bucket-2à titre d'exemple. -
Cliquez sur Create Directory pour créer un répertoire afin de stocker la ressource JAR.
Définissez le paramètre Catalog Name sur
emr/jarspour créer le répertoire de stockage de la ressource JAR. -
Téléchargez la ressource JAR dans le répertoire de stockage.
Accédez au répertoire et cliquez sur Upload File. Dans la zone Files to Upload, cliquez sur Scan Files, ajoutez le fichier
SparkWorkOSS-1.0-SNAPSHOT-jar-with-dependencies.jarau bucket, puis cliquez sur Upload File.
-
Référencez la ressource JAR.
-
Modifiez le code pour référencer la ressource JAR.
Sur la page d'édition du nœud EMR Spark créé, modifiez le code pour référencer la ressource JAR.
spark-submit --class com.aliyun.emr.example.spark.SparkMaxComputeDemo --master yarn ossref://onaliyun-bucket-2/emr/jars/SparkWorkOSS-1.0-SNAPSHOT-jar-with-dependencies.jarDescription des paramètres :
Paramètre
Description
classLe nom complet de la classe principale à exécuter.
masterLe mode d'exécution de l'application Spark.
Chemin de fichier
ossrefLe format est
ossref://{endpoint}/{bucket}/{object}.-
Endpoint : Le point de terminaison du service OSS. Si ce paramètre est laissé vide, la ressource OSS doit se trouver dans la même région que le cluster EMR.
-
Bucket : Un conteneur dans OSS pour stocker des objets. Chaque bucket a un nom unique. Connectez-vous à la console OSS pour afficher tous les buckets sous votre compte.
-
Object : Un objet spécifique, tel qu'un nom de fichier ou un chemin, stocké dans un bucket.
-
-
Exécutez la tâche du nœud EMR Spark.
Une fois la modification terminée, cliquez sur l'icône
et sélectionnez le groupe de ressources Serverless que vous avez créé pour exécuter le nœud EMR Spark. Une fois la tâche terminée, enregistrez les applicationIdsdepuis la console, par exempleapplication_1730367929285_xxxx. -
Consultez le résultat.
Créez un nœud EMR Shell et exécutez la commande
yarn logs -applicationId application_1730367929285_xxxxsur le nœud pour afficher le résultat de l'exécution :yarn logs -applicationId application_xxx Process Output>>> LogLastModifiedTime:Fri Nov 01 16:27:46 +0800 2024 Process Output>>> LogLength:21 Process Output>>> LogContents: Process Output>>> Spark version: 3.4.2 Process Output>>>
-
(Facultatif) Configurer les paramètres avancés
Vous pouvez configurer les paramètres de propriété uniques suivants dans le volet Scheduling Settings situé à droite du nœud, sous .
RemarqueLes paramètres avancés disponibles varient selon le type de cluster EMR, comme indiqué dans les tableaux ci-dessous.
Pour plus d'informations sur les propriétés Spark open source, vous pouvez les configurer dans le volet Scheduling Settings sous .
Cluster Data Lake/cluster personnalisé : EMR sur ECS
Paramètre avancé
Description
queue
La file d'attente de planification pour la tâche. La valeur par défaut est
default.Si vous avez configuré une YARN Resource Queue au niveau de l'espace de travail lors de l'enregistrement du cluster EMR auprès de l'espace de travail DataWorks :
-
Si vous sélectionnez la case à cocher Global Settings Take Precedence et la définissez sur Yes, la tâche Spark utilise la file d'attente configurée lors de l'enregistrement du cluster EMR.
-
Si vous ne sélectionnez pas la case à cocher, la tâche Spark utilise la file d'attente configurée pour le nœud EMR Spark.
Pour plus d'informations sur EMR YARN, consultez Configuration de base des files d'attente. Pour plus d'informations sur la configuration des files d'attente lors de l'enregistrement d'un cluster EMR, consultez Définir la file d'attente de ressources YARN globale.
priority
La priorité. La valeur par défaut est 1.
FLOW_SKIP_SQL_ANALYZE
Le mode d'exécution des instructions SQL. Valeurs possibles :
-
true: Exécute plusieurs instructions SQL en même temps. -
false(par défaut) : Exécute une instruction SQL à la fois.
RemarqueCe paramètre est pris en charge uniquement pour les exécutions de test dans l'environnement de développement de données.
Autre
-
Vous pouvez ajouter des paramètres Spark personnalisés dans les configurations avancées. Par exemple, si vous ajoutez
spark.eventLog.enabled : false, DataWorks ajoute automatiquement le paramètre au code soumis au cluster EMR au format--conf key=value. -
Vous pouvez également configurer des paramètres Spark globaux. Pour plus d'informations, consultez Définir les paramètres Spark globaux.
RemarquePour activer le contrôle d'accès Ranger, ajoutez la configuration
spark.hadoop.fs.oss.authorization.method=rangerdans Définir les paramètres Spark globaux afin de garantir que le contrôle d'accès Ranger prenne effet.
Cluster Spark : EMR sur ACK
Paramètre avancé
Description
FLOW_SKIP_SQL_ANALYZE
Le mode d'exécution des instructions SQL. Valeurs possibles :
-
true: Exécute plusieurs instructions SQL en même temps. -
false: Exécute une instruction SQL à la fois.
RemarqueCe paramètre est pris en charge uniquement pour les exécutions de test dans l'environnement de développement de données.
Autre
-
Vous pouvez ajouter des paramètres Spark personnalisés dans les configurations avancées. Par exemple,
spark.eventLog.enabled: false. DataWorks ajoute automatiquement le paramètre au code soumis au cluster EMR au format--conf key=value. -
Vous pouvez également configurer des paramètres Spark globaux. Pour plus d'informations, consultez Définir les paramètres Spark globaux.
Cluster Hadoop : EMR sur ECS
Paramètre avancé
Description
queue
La file d'attente de planification à laquelle les tâches sont soumises. Valeur par défaut : default.
Si vous configurez une YARN resource queue au niveau de l'espace de travail lors de l'enregistrement d'un cluster EMR auprès d'un espace de travail DataWorks, les règles suivantes s'appliquent :
-
Si vous sélectionnez la case à cocher Global Settings Take Precedence et définissez la valeur sur Yes, la configuration de la file d'attente spécifiée lors de l'enregistrement du cluster EMR est prioritaire lors de l'exécution d'une tâche Spark.
-
Si vous désélectionnez la case à cocher, la configuration de la file d'attente spécifiée pour le nœud EMR Spark est prioritaire lors de l'exécution d'une tâche Spark.
Pour plus d'informations sur EMR YARN, consultez Configurations de base des files d'attente. Pour plus d'informations sur la configuration d'une file d'attente lors de l'enregistrement d'un cluster EMR, consultez Définir la file d'attente de ressources YARN globale.
priority
La priorité. La valeur par défaut est 1.
FLOW_SKIP_SQL_ANALYZE
Le mode d'exécution des instructions SQL. Valeurs possibles :
-
true: Exécute plusieurs instructions SQL en même temps. -
false: Exécute une instruction SQL à la fois.
RemarqueCe paramètre est pris en charge uniquement pour les exécutions de test dans l'environnement de développement de données.
USE_GATEWAY
Indique si la tâche de ce nœud doit être soumise via un cluster Gateway. Valeurs possibles :
-
true: Soumet la tâche via le cluster Gateway. -
false: Ne soumet pas la tâche via un cluster Gateway. Par défaut, la tâche est soumise au nœud principal.
RemarqueSi vous définissez ce paramètre sur
truemais que le cluster du nœud n'est pas associé à un cluster Gateway, les soumissions de tâches EMR ultérieures échoueront.Autre
-
Vous pouvez ajouter des paramètres Spark personnalisés directement dans les configurations avancées. Pour une entrée telle que
spark.eventLog.enabled : false, DataWorks l'ajoute automatiquement au code soumis au cluster EMR au format--conf key=value. -
Vous pouvez également configurer des paramètres Spark globaux. Pour plus d'informations, consultez Définir les paramètres Spark globaux.
RemarquePour activer le contrôle d'accès Ranger, ajoutez la configuration
spark.hadoop.fs.oss.authorization.method=rangerdans Définir les paramètres Spark globaux afin de garantir que le contrôle d'accès Ranger prenne effet.
Cluster EMR Serverless Spark
Pour plus d'informations sur la configuration des paramètres, consultez Configurer les paramètres pour la soumission d'une tâche Spark.
Paramètre avancé
Description
queue
La file d'attente de planification pour la tâche. La valeur par défaut est
dev_queue.priority
La priorité. La valeur par défaut est 1.
FLOW_SKIP_SQL_ANALYZE
Le mode d'exécution des instructions SQL. Valeurs possibles :
-
true: Exécute plusieurs instructions SQL en même temps. -
false: Exécute une instruction SQL à la fois.
RemarqueCe paramètre est pris en charge uniquement pour les exécutions de test dans l'environnement de développement de données.
SERVERLESS_RELEASE_VERSION
La version du moteur Spark. Par défaut, la tâche utilise la Default Engine Version configurée pour le cluster dans Management Center sous Clusters. Vous pouvez configurer ce paramètre pour définir différentes versions de moteur pour différentes tâches.
SERVERLESS_QUEUE_NAME
La file d'attente de ressources. Par défaut, la tâche utilise la Default Resource Queue configurée pour le cluster dans Management Center sous Clusters. Si vous avez des exigences en matière d'isolation et de gestion des ressources, vous pouvez ajouter des files d'attente. Pour plus d'informations, consultez Gérer les files d'attente de ressources.
Autre
-
Vous pouvez ajouter des paramètres Spark personnalisés dans la configuration avancée. Par exemple, si vous ajoutez
spark.eventLog.enabled : false, DataWorks ajoute automatiquement le paramètre au code soumis au cluster EMR au format--conf key=value. -
Vous pouvez également configurer des paramètres Spark globaux. Pour plus d'informations, consultez Définir les paramètres Spark globaux.
Exécution du job Spark
-
Dans le volet Run Configuration, accédez à la section Compute Resource et configurez les éléments Compute Resource et DataWorks Resource Group.
RemarqueVous pouvez également définir les CUs for Scheduling en fonction des ressources requises par la tâche. La valeur CU par défaut est
0.25.Pour accéder à une source de données via Internet public ou dans un VPC, vous devez utiliser un groupe de ressources de planification dont la connectivité réseau avec la source de données a été vérifiée. Pour plus d'informations, consultez la rubrique Solutions de connectivité réseau.
Dans la boîte de dialogue des paramètres située dans la barre d'outils, sélectionnez la source de données correspondante, puis cliquez sur Run.
-
-
Pour exécuter le job de nœud de manière périodique, configurez ses propriétés de planification. Pour plus d'informations, consultez la rubrique Configuration des propriétés de planification d'un nœud.
RemarqueSi vous souhaitez personnaliser l'environnement du composant, vous pouvez créer une image personnalisée à partir de l'image officielle
dataworks_emr_base_task_podet utiliser cette image dans Data Development.Par exemple, lors de la création d'une image personnalisée, vous pouvez remplacer les packages JAR Spark ou dépendre de
libraries, defilesou deJAR packagesspécifiques. Une fois le job de nœud configuré, vous devez le déployer. Pour plus d'informations, consultez la rubrique Déploiement d'un nœud ou d'un workflow.
Après le déploiement du job, accédez à Operation Center pour consulter l'état d'exécution du job périodique. Pour plus d'informations, consultez la rubrique Prise en main d'Operation Center.
FAQ
-
Q : Comment résoudre un délai d'expiration de connexion au nœud ?
R : Assurez-vous que le groupe de ressources et le cluster peuvent communiquer entre eux via le réseau. Accédez à la liste des ressources de calcul et cliquez sur Resource Initialization. Dans la boîte de dialogue qui s'affiche, cliquez sur Re-initialize. Vérifiez que l'initialisation a réussi.