Apache Spark est un moteur d'analyse de big data polyvalent, performant et simple à utiliser. Il permet d'effectuer des analyses complexes en mémoire et de créer des applications d'analyse de données à grande échelle avec une faible latence. DataWorks met à disposition des nœuds EMR Spark pour développer des tâches Spark et mettre en œuvre leur planification périodique. Cette rubrique explique comment créer un nœud EMR Spark et illustre ses fonctionnalités à l'aide d'un exemple détaillé.
Prérequis
-
Pour personnaliser l'environnement des composants avant le développement du nœud, créez une image personnalisée basée sur l'image officielle
dataworks_emr_base_task_podet utilisez cette image dans DataStudio.Par exemple, vous pouvez remplacer un package JAR Spark ou dépendre de
libraries,filesouJAR packagesspécifiques lors de la création d'une image personnalisée. Un cluster EMR doit être enregistré auprès de DataWorks. Pour plus d'informations, consultez la rubrique DataStudio (version héritée) : Lier une ressource de calcul EMR.
(Facultatif) Si vous utilisez un utilisateur RAM pour le développement de tâches, celui-ci doit être ajouté à l'espace de travail correspondant et se voir attribuer le rôle Development ou Workspace Administrator. Le rôle Workspace Manager accorde des autorisations étendues ; attribuez-le avec prudence. Pour plus d'informations, consultez la rubrique Ajouter des membres à un espace de travail.
Un groupe de ressources doit être acheté et configuré, y compris sa liaison à l'espace de travail et ses paramètres réseau. Pour plus d'informations, consultez la rubrique Utiliser un groupe de ressources Serverless.
Un flux métier doit être créé. DataWorks organise les opérations de développement en flux métiers ; vous ne pouvez donc pas créer de nœud sans en avoir défini un au préalable. Pour plus d'informations, consultez la rubrique Créer un flux métier.
Si vos tâches de développement nécessitent un environnement spécifique, vous pouvez utiliser la fonctionnalité d'image personnalisée fournie par DataWorks pour construire une image contenant les composants requis pour l'exécution des tâches. Pour plus d'informations, consultez la rubrique Image personnalisée.
Limites
Vous pouvez exécuter ce type de tâche uniquement sur un groupe de ressources serverless (recommandé) ou un groupe de ressources exclusif pour la planification. Si vous devez utiliser une image dans le développement de données, vous devez utiliser un groupe de ressources serverless.
Pour les clusters DataLake ou personnalisés, vous devez configurer EMR-HOOK sur le cluster afin de gérer les métadonnées dans DataWorks. Sans configuration d'EMR-HOOK, vous ne pourrez pas afficher les métadonnées en temps réel, générer des journaux d'audit, visualiser la lignée des données ni effectuer des tâches de gouvernance liées à EMR dans DataWorks. Pour plus d'informations, consultez la rubrique Configurer EMR-HOOK pour Spark SQL.
Les clusters EMR Serverless Spark permettent d'afficher la lignée des données, contrairement aux clusters EMR on ACK Spark.
Les clusters EMR on ACK Spark et EMR Serverless Spark prennent en charge la référence aux ressources OSS via
ossrefet le téléchargement de ressources vers OSS, mais ne permettent 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
ossref, le téléchargement de ressources vers OSS ainsi que le téléchargement de ressources vers HDFS.
Remarques
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 utilisant 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.
Préparation : Développer un JAR de job Spark
Avant de planifier un job EMR Spark avec DataWorks, vous devez d'abord développer le job dans EMR, le compiler et générer un package JAR. Pour plus d'informations sur le développement de jobs EMR Spark, consultez la rubrique Présentation de Spark.
Vous téléchargerez ensuite le package JAR dans DataWorks pour planifier périodiquement le job EMR Spark.
I. Créer un nœud EMR Spark
-
Connectez-vous à la console DataWorks. Dans la région cible, cliquez sur dans le volet de navigation de gauche. Sélectionnez un espace de travail dans la liste déroulante et cliquez sur Go to Data Development.
-
Créez un nœud EMR Spark.
-
Cliquez avec le bouton droit sur le flux métier cible et choisissez .
RemarqueVous pouvez également survoler Create et choisir .
-
Dans la boîte de dialogue Create Node , saisissez un Name et sélectionnez l'Engine Instance , le Node Type et le Path . Cliquez sur Confirm pour accéder à l'éditeur de nœud EMR Spark.
RemarqueLe nom du nœud peut contenir des lettres majuscules, des lettres minuscules, des caractères chinois, des chiffres, des traits de soulignement (
_) et des points (.).
-
2. Développer un job Spark
Pour ouvrir l'éditeur de code, double-cliquez sur le nœud EMR Spark. Vous pouvez ensuite sélectionner une méthode adaptée à votre scénario.
(Recommandé) Téléchargez des ressources depuis votre machine locale vers DataStudio, puis référencez ces ressources. Pour plus d'informations, consultez la section Méthode 1 : Télécharger des ressources avant de référencer des ressources JAR EMR.
Référencez une ressource OSS en utilisant la méthode OSS REF. Pour plus d'informations, consultez la section Méthode 2 : Référencer directement une ressource OSS.
Méthode 1 : Télécharger et référencer une ressource JAR EMR
Dans DataWorks, vous pouvez télécharger une ressource depuis votre ordinateur local vers DataStudio, puis la référencer. Après avoir compilé un job EMR Spark en un package JAR, sélectionnez une méthode de stockage en fonction de sa taille.
Vous pouvez télécharger et valider un package JAR en tant que ressource EMR DataWorks. Vous pouvez également le stocker dans le HDFS d'un cluster EMR. Les clusters EMR on ACK Spark et EMR Serverless Spark ne prennent pas en charge le téléchargement de ressources vers HDFS.
Package JAR inférieur à 500 Mo
-
Créez une ressource JAR EMR.
Cette méthode permet une gestion visuelle des ressources dans la console DataWorks. Une fois la ressource créée, validez-la. Pour plus d'informations, consultez la rubrique Créer et utiliser des ressources EMR.
Dans la boîte de dialogue Create Resource, définissez Engine Type sur EMR et sélectionnez une Engine Instance. Définissez Resource Type sur EMR JAR, spécifiez le Path et sélectionnez Upload as EMR Resource. Choisissez un type de Storage Path, qui peut être OSS One-click Authorization ou HDFS. Définissez File Source sur Local et cliquez sur Upload pour télécharger le fichier. Spécifiez un Name pour la ressource. Le nom d'une ressource JAR doit se terminer par
.jar. Cliquez ensuite sur Create.RemarqueLors de la première création d'une ressource EMR destinée à être stockée dans OSS, vous devez autoriser l'accès comme indiqué.
-
Référencez la ressource JAR EMR.
Double-cliquez sur le nœud EMR Spark pour ouvrir son éditeur de code.
Dans l'arborescence de navigation de gauche, choisissez . Localisez votre ressource JAR EMR, cliquez dessus avec le bouton droit et sélectionnez Insert Resource Path.
-
Après avoir référencé la ressource, le système ajoute automatiquement un extrait de code de référence à l'éditeur de code du nœud. L'extrait de code suivant illustre cette opération.
##@resource_reference{"spark-examples_2.12-1.0.0-SNAPSHOT-shaded.jar"} spark-examples_2.12-1.0.0-SNAPSHOT-shaded.jarLa présence de cet extrait indique que la ressource est référencée. Dans le code précédent, spark-examples_2.12-1.0.0-SNAPSHOT-shaded.jar correspond au nom de la ressource JAR EMR téléchargée.
-
Modifiez le code du nœud EMR Spark et ajoutez une commande spark-submit. L'exemple de code suivant illustre cette étape.
RemarqueL'éditeur de code des nœuds EMR Spark ne prend pas en charge les commentaires. Modifiez le code du job selon l'exemple suivant. N'ajoutez pas de commentaires, sinon une erreur se produira lors de l'exécution du nœud.
##@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 100Le tableau suivant décrit les paramètres.
org.apache.spark.examples.SparkPi : classe principale du job dans le package JAR compilé.
spark-examples_2.11-2.4.0.jar : nom de la ressource JAR EMR que vous avez téléchargée.
-
Vous pouvez conserver les autres paramètres tels qu'ils figurent dans l'exemple ci-dessus. Vous pouvez également exécuter la commande suivante pour afficher l'aide de
spark submitet modifier la commandespark submitselon vos besoins.RemarqueSi vous souhaitez utiliser des paramètres simplifiés de la commande
spark-submitdans un nœud Spark, vous devez ajouter les paramètres au code. Exemple :--executor-memory 2G.Les nœuds Spark ne prennent en charge la soumission de jobs qu'en mode cluster YARN.
Pour les jobs soumis à l'aide de la commande
spark-submit, définissez le paramètre de mode de déploiement sur cluster, et non sur client.
spark-submit --helpspark-submit --help Process Output>>> Process Output>>> Options: Process Output>>> --master MASTER_URL spark://host:port, mesos://host:port, yarn, Process Output>>> k8s://https://host:port, or local (Default: local[*]). Process Output>>> --deploy-mode DEPLOY_MODE Whether to launch the driver program locally ("client") or Process Output>>> on one of the worker machines inside the cluster ("cluster") Process Output>>> (Default: client). Process Output>>> --class CLASS_NAME Your application's main class (for Java / Scala apps). Process Output>>> --name NAME A name of your application. Process Output>>> --jars JARS Comma-separated list of jars to include on the driver Process Output>>> and executor classpaths. Process Output>>> --packages Comma-separated list of maven coordinates of jars to include Process Output>>> on the driver and executor classpaths. Will search the local Process Output>>> maven repo, then maven central and any additional remote Process Output>>> repositories given by --repositories. The format for the Process Output>>> coordinates should be groupId:artifactId:version. Process Output>>> --exclude-packages Comma-separated list of groupId:artifactId, to exclude while Process Output>>> resolving the dependencies provided in --packages to avoid Process Output>>> dependency conflicts. Process Output>>> --repositories Comma-separated list of additional remote repositories to Process Output>>> search for the maven coordinates given with --packages. Process Output>>> --py-files PY_FILES Comma-separated list of .zip, .egg, or .py files to place Process Output>>> on the PYTHONPATH for Python apps. Process Output>>> --files FILES Comma-separated list of files to be placed in the working Process Output>>> directory of each executor. File paths of these files
Package JAR de 500 Mo ou plus
-
Créez une ressource JAR EMR.
Si un package JAR fait 500 Mo ou plus, vous ne pouvez pas le télécharger depuis votre ordinateur local en tant que ressource DataWorks. Stockez le package JAR dans le HDFS de votre cluster EMR et notez son chemin de stockage. Vous pourrez ensuite utiliser ce chemin pour référencer le package lors de la planification du job Spark.
-
Référencez la ressource JAR EMR.
Si le package JAR est stocké dans HDFS, référencez-le directement en spécifiant son chemin dans le code du nœud EMR Spark.
Double-cliquez sur le nœud EMR Spark créé pour ouvrir l'éditeur de code du nœud.
-
Rédigez une commande spark-submit. L'exemple de code suivant illustre cette étape.
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 100Le tableau suivant décrit les paramètres.
hdfs:///tmp/jars/spark-examples_2.11-2.4.8.jar : chemin du package JAR dans HDFS.
org.apache.spark.examples.JavaSparkPi : classe principale du job dans le package JAR compilé.
-
Les autres paramètres sont des paramètres de cluster EMR et doivent être modifiés en fonction de vos besoins métier. Vous pouvez également exécuter la commande suivante pour afficher les informations d'aide de la commande spark-submit et modifier la commande selon vos besoins.
ImportantSi vous souhaitez utiliser des paramètres simplifiés de la commande Spark-submit dans un nœud Spark, vous devez ajouter les paramètres au code. Exemple :
--executor-memory 2G.Les nœuds Spark ne prennent en charge la soumission de jobs qu'en mode cluster YARN.
Pour les jobs soumis à l'aide de la commande spark-submit, définissez le paramètre de mode de déploiement sur cluster, et non sur client.
spark-submit --help
Méthode 2 : Référencer directement une ressource OSS
(Facultatif) Paramètres avancés
Vous pouvez configurer des paramètres spécifiques à Spark dans la section Advanced Settings d'un nœud. Pour plus d'informations sur les propriétés Spark, consultez la documentation Spark Configuration. Les paramètres avancés que vous pouvez configurer varient selon les types de clusters EMR, comme indiqué dans le tableau suivant.
Cluster DataLake ou personnalisé : EMR on ECS
|
Parameter |
Description |
|
queue |
The scheduling queue to which jobs are submitted. Default value: default. If you configure a workspace-level YARN resource queue when you register an EMR cluster to a DataWorks workspace, the following rules apply:
For more information about EMR YARN, see Basic queue configurations. For more information about how to configure a queue when you register an EMR cluster, see Set the global YARN resource queue. |
|
priority |
The priority. Default value: 1. |
|
FLOW_SKIP_SQL_ANALYZE |
The method that is used to run SQL statements. Valid values:
Remarque
This parameter can be used only for test runs in Data Development. |
|
Others |
|
Cluster EMR Serverless Spark
Pour plus d'informations sur la configuration des paramètres, consultez la rubrique Configurer les paramètres d'un job Spark.
|
Parameter |
Description |
|
queue |
The scheduling queue to which jobs are submitted. Default value: dev_queue. |
|
priority |
The priority. Default value: 1. |
|
FLOW_SKIP_SQL_ANALYZE |
The method that is used to run SQL statements. Valid values:
Remarque
This parameter can be used only for test runs in Data Development. |
|
SERVERLESS_RELEASE_VERSION |
The version of the Spark engine. By default, the Default Engine Version that is configured for the cluster in the Cluster Management section of the Management Center page is used. You can configure this parameter to specify different engine versions for different jobs. |
|
SERVERLESS_QUEUE_NAME |
The resource queue that you want to specify. By default, the Default Resource Queue that is configured for the cluster in the Cluster Management section of the Management Center page is used. If you want to isolate and manage resources, you can add queues. For more information, see Manage resource queues. |
|
Others |
|
Cluster Spark : EMR on ACK
|
Parameter |
Description |
|
queue |
This parameter is not supported. |
|
priority |
This parameter is not supported. |
|
FLOW_SKIP_SQL_ANALYZE |
The method that is used to run SQL statements. Valid values:
Remarque
This parameter can be used only for test runs in Data Development. |
|
Others |
|
Cluster Hadoop : EMR on ECS
|
Parameter |
Description |
|
queue |
The scheduling queue to which jobs are submitted. Default value: default. If you configure a workspace-level YARN resource queue when you register an EMR cluster to a DataWorks workspace, the following rules apply:
For more information about EMR YARN, see Basic queue configurations. For more information about how to configure a queue when you register an EMR cluster, see Set the global YARN resource queue. |
|
priority |
The priority. Default value: 1. |
|
FLOW_SKIP_SQL_ANALYZE |
The method that is used to run SQL statements. Valid values:
Remarque
This parameter can be used only for test runs in Data Development. |
|
USE_GATEWAY |
Specifies whether to submit jobs from the current node through a Gateway cluster. Valid values:
Remarque
If the cluster in which the current node resides is not associated with a Gateway cluster and you set this parameter to |
|
Others |
|
Job SQL
-
Dans la barre d'outils, cliquez sur l'icône
. Dans la boîte de dialogue Parameter , sélectionnez le groupe de ressources de planification créé et cliquez sur Running .RemarquePour accéder aux ressources de calcul déployées sur un réseau public ou un VPC, vous devez utiliser un groupe de ressources de planification capable de se connecter à ces ressources. Pour plus d'informations, consultez la rubrique Solutions pour les connexions réseau.
Si vous souhaitez modifier le groupe de ressources utilisé pour exécuter un job, cliquez sur l'icône Run with Parameters
et sélectionnez le groupe de ressources souhaité.Lorsque vous interrogez des données à l'aide d'un nœud EMR Spark, le résultat est limité à un maximum de 10 000 enregistrements et à une taille totale de 10 Mo.
Cliquez sur l'icône
pour enregistrer vos instructions SQL.-
(Facultatif) Effectuez des tests de validation.
Si vous souhaitez exécuter des tests de validation dans l'environnement de développement, vous pouvez les lancer lors de la validation vers un nœud d'exécution ou après la validation du nœud. Pour plus d'informations, consultez la rubrique Exécuter un test de validation.
Étape 3 : Configurer la planification du nœud
Si vous souhaitez que le système exécute périodiquement une tâche sur le nœud, cliquez sur Properties dans le volet de navigation de droite de l'onglet de configuration du nœud afin de configurer les propriétés de planification des tâches selon vos besoins métier. Pour plus d'informations, consultez la rubrique Présentation.
Vous devez configurer les propriétés Rerun attribute et Parent Nodes du nœud avant de pouvoir le soumettre.
-
Si vous devez personnaliser l'environnement des composants, vous pouvez créer une image personnalisée basée sur l'image officielle
dataworks_emr_base_task_podet l'utiliser dans DataStudio.Par exemple, vous pouvez remplacer des packages JAR Spark ou inclure des
libraries,filesouJAR packagesspécifiques lors de la création d'une image personnalisée.
Étape 4 : Déployer le nœud
Une fois la tâche d'un nœud configurée, vous devez la valider et la déployer. Après validation et déploiement, le système exécutera la tâche régulièrement selon les configurations de planification.
Cliquez sur l'icône
dans la barre d'outils supérieure pour enregistrer la tâche.-
Cliquez sur l'icône
dans la barre d'outils supérieure pour valider la tâche.Dans la boîte de dialogue Submit , configurez le paramètre Change description . Ensuite, décidez si vous souhaitez examiner le code de la tâche après sa validation, en fonction de vos besoins métier.
RemarqueVous devez configurer les paramètres Rerun et Parent Nodes dans l'onglet Properties avant de valider la tâche.
Vous pouvez utiliser la fonctionnalité de révision de code pour garantir la qualité du code des tâches et prévenir les erreurs d'exécution dues à un code invalide. Si vous activez cette fonctionnalité, le code de la tâche validé ne pourra être déployé qu'après avoir passé la révision de code. Pour plus d'informations, consultez la rubrique Révision de code.
Si vous utilisez un espace de travail en mode standard, vous devez déployer la tâche dans l'environnement de production après l'avoir validée. Pour déployer une tâche sur un nœud, cliquez sur Deploy dans le coin supérieur droit de l'onglet de configuration du nœud. Pour plus d'informations, consultez la rubrique Déployer un nœud.
Autres opérations
Après avoir validé et déployé la tâche, celle-ci s'exécute périodiquement selon les configurations de planification. Vous pouvez cliquer sur Operation Center dans le coin supérieur droit de l'onglet de configuration du nœud correspondant pour accéder à Operation Center et consulter l'état de planification de la tâche. Pour plus d'informations, consultez la rubrique Gérer les tâches planifiées.
FAQ
-
Q : Comment résoudre un délai de connexion du nœud ?
R : Assurez-vous que le groupe de ressources et le cluster peuvent se connecter mutuellement 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.
et sélectionnez votre groupe de ressources de planification pour exécuter le nœud EMR Spark. Une fois le job terminé, notez l'