Problème de variable de version HDP dans des Jobs MapReduce et Spark - 7.1

author
Talend Documentation Team
EnrichVersion
7.1
EnrichProdName
Talend Big Data
Talend Big Data Platform
Talend Data Fabric
Talend Real-Time Big Data Platform
task
Création et développement > Création de Jobs > Distributions Hadoop > Hortonworks
Création et développement > Création de Jobs > Frameworks de Jobs > MapReduce
Création et développement > Création de Jobs > Frameworks de Jobs > Spark Batch
Création et développement > Création de Jobs > Frameworks de Jobs > Spark Streaming
EnrichPlatform
Studio Talend

Configurer le paramètre hdp.version pour résoudre le problème de version de Hortonworks

Hortonworks a besoin de la variable d'environnement hdp.version dans ses fichiers de configuration afin de supporter ses mises à niveau propagées. Cela peut causer un problème lors de l'exécution de Jobs Spark ou MapReduce dans le Studio Talend.

Le Studio récupère ces fichiers de configuration Hortonworks et cette variable hdp.version depuis un cluster Hortonworks. Lorsque vous définissez la connexion à Hadoop dans le Studio, celui-ci génère un fichier hadoop-conf-xxx.jar à l'aide de ces fichiers de configuration et ajoute ce fichier JAR et cette variable au classpath de votre Job. Cela peut entraîner le problème suivant :

[ERROR]: org.apache.spark.SparkContext - Error initializing SparkContext.
            org.apache.spark.SparkException: 
            hdp.version is not found,
            Please set HDP_VERSION=xxx in spark-env.sh,
            or set -Dhdp.version=xxx in spark.{driver|yarn.am}.extraJavaOptions
            or set SPARK_JAVA_OPTS="-Dhdp.verion=xxx" in spark-env.sh
            If you're running Spark under HDP.
            
            at org.apache.spark.deploy.yarn.Client.createContainerLaunchContext(Client.scala:999)
            at org.apache.spark.deploy.yarn.Client.submitApplication(Client.scala:171)
            at org.apache.spark.scheduler.cluster.YarnClientSchedulerBackend.start(YarnClientSchedulerBackend.scala:56)
            at org.apache.spark.scheduler.TaskSchedulerImpl.start(TaskSchedulerImpl.scala:156)
            at org.apache.spark.SparkContext.<init>(SparkContext.scala:509)
            at org.apache.spark.api.java.JavaSparkContext.<init>(JavaSparkContext.scala:58)
                    at dev_v6_001.test_hdp_1057_0_1.test_hdp_1057.runJobInTOS(test_hdp_1057.java:1454)
                    at dev_v6_001.test_hdp_1057_0_1.test_hdp_1057.main(test_hdp_1057.java:1341)
org.apache.spark.SparkException: Yarn application has already ended! It might have been killed or unable to launch application master.
            
            Diagnostics: Exception from container-launch.
            Container id: container_1496650120478_0011_02_000001
            Exit code: 1
            Exception message: /hadoop/yarn/local/usercache/abbass/appcache/application_1496650120478_0011/container_1496650120478_0011_02_000001/launch_container.sh: line 21: $PWD:$PWD/__spark_conf__:$PWD/__spark_libs__/*:$HADOOP_CONF_DIR:/usr/hdp/current/hadoop-client/*:/usr/hdp/current/hadoop-client/lib/*:/usr/hdp/current/hadoop-hdfs-client/*:/usr/hdp/current/hadoop-hdfs-client/lib/*:/usr/hdp/current/hadoop-mapreduce-client/*:/usr/hdp/current/hadoop-mapreduce-client/lib/*:/usr/hdp/current/hadoop-yarn-client/*:/usr/hdp/current/hadoop-yarn-client/lib/*:$PWD/mr-framework/hadoop/share/hadoop/mapreduce/*:$PWD/mr-framework/hadoop/share/hadoop/mapreduce/lib/*:$PWD/mr-framework/hadoop/share/hadoop/common/*:$PWD/mr-framework/hadoop/share/hadoop/common/lib/*:$PWD/mr-framework/hadoop/share/hadoop/yarn/*:$PWD/mr-framework/hadoop/share/hadoop/yarn/lib/*:$PWD/mr-framework/hadoop/share/hadoop/hdfs/*:$PWD/mr-framework/hadoop/share/hadoop/hdfs/lib/*:$PWD/mr-framework/hadoop/share/hadoop/tools/lib/*:/usr/hdp/${hdp.version}/hadoop/lib/hadoop-lzo-0.6.0.${hdp.version}.jar:/etc/hadoop/conf/secure: bad substitution
java.lang.IllegalArgument Exception : Unable to parse '/hdp/apps/${hdp.version}/mapreduce/mapreduce.tar.gz#mr-framework' as a URI, check the setting for mapreduce.application.framework.path at org.apache.hadoop.mapreduce.JobSubmitter.addMRFrameworkToDistributedCache(JobSubmitter.java:443) at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:142) at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1290) at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1287) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:422) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1866) at org.apache.hadoop.mapreduce.Job.submit(Job.java:1287) at org.apache.hadoop.mapred.JobClient$1.run(JobClient.java:575) at org.apache.hadoop.mapred.JobClient$1.run(JobClient.java:570) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:422) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1866) at org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:570) at org.apache.hadoop.mapred.JobClient.submitJob(JobClient.java:561) at org.talend.hadoop.mapred.lib.MRJobClient.runJob(MRJobClient.java:46) at dev_v6_001.test_mr_hdp26_0_1.test_mr_hdp26.runMRJob(test_mr_hdp26.java:1556) at dev_v6_001.test_mr_hdp26_0_1.test_mr_hdp26.access$2(test_mr_hdp26.java:1546) at dev_v6_001.test_mr_hdp26_0_1.test_mr_hdp26$1.run(test_mr_hdp26.java:1194) at dev_v6_001.test_mr_hdp26_0_1.test_mr_hdp26$1.run(test_mr_hdp26.java:1) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:422) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1866) at dev_v6_001.test_mr_hdp26_0_1.test_mr_hdp26.tRowGenerator_1Process(test_mr_hdp26.java:1044) at dev_v6_001.test_mr_hdp26_0_1.test_mr_hdp26.run(test_mr_hdp26.java:1524) at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:76) at dev_v6_001.test_mr_hdp26_0_1.test_mr_hdp26.runJobInTOS(test_mr_hdp26.java:1483) at dev_v6_001.test_mr_hdp26_0_1.test_mr_hdp26.main(test_mr_hdp26.java:1431) Caused by: java.net.URISyntax Exception : Illegal character in path at index 11: /hdp/apps/${hdp.version}/mapreduce/mapreduce.tar.gz#mr-framework at java.net.URI$Parser.fail(URI.java:2848) at java.net.URI$Parser.checkChars(URI.java:3021) at java.net.URI$Parser.parseHierarchical(URI.java:3105) at java.net.URI$Parser.parse(URI.java:3063) at java.net.URI.<init>(URI.java:588) at org.apache.hadoop.mapreduce.JobSubmitter.addMRFrameworkToDistributedCache(JobSubmitter.java:441) ... 27 more

Ces messages d'erreur peuvent s'afficher ensemble ou séparément.

Environnement :

  • Studio Talend avec Big Data nécessitant souscription

  • Jobs Spark ou MapReduce

Trouver la valeur de hdp.version à utiliser

Procédure

Identifiez la version de votre cluster Hortonwork.
  • Vous pouvez demander directement à l'administrateur de votre cluster quelle version vous devez utiliser.

  • Vous pouvez aussi consulter le répertoire /usr/hdp/ de chaque machine de votre cluster. Ce dossier contient généralement plusieurs versions et un lien symbolique nommé current pointe vers la valeur la plus récente que vous devez utiliser. Par exemple :
    [root@sandbox /]# ls  -lth /usr/hdp/
    total 16K
    drwxr-xr-x 50 root root 4.0K Jun  5 07:59 2.6.0.3-8
    drwxr-xr-x 32 root root 4.0K May  5 13:19 2.5.0.0-1245
    drwxr-xr-x  3 root root 4.0K May  5 13:18 share
    drwxr-xr-x  2 root root 4.0K May  5 12:48 current -> 2.6.0.3-8

    Dans cet exemple, la version à utiliser est hdp.version=2.6.0.3-8.

Résultats

Vous devez ensuite configurer le Job du Studio Talend à utiliser.
  1. Pour les Jobs Spark Jobs, consultez Résoudre le problème de variable hdp.version pour les Jobs Spark.

  2. Pour les Jobs MapReduce, consultez Résoudre le problème de variable hdp.version pour les Jobs MapReduce.

Résoudre le problème de variable hdp.version pour les Jobs Spark

Procédure

  1. Définissez le paramètre hdp.version dans votre cluster.

    La façon la plus simple de le faire est d'ajouter ce paramètre au fichier de configuration yarn-site.xml.

    1. Dans Ambari, cliquez sur le service Yarn dans la liste de services à gauche, puis cliquez sur Configs pour ouvrir la page de configuration et cliquez sur l'onglet Advanced.
    2. Faites défiler la page jusqu'en bas pour trouver la liste Custom yarn-site et cliquez sur Custom yarn-site pour afficher la liste.
    3. Cliquez sur Add property pour ouvrir la boîte de dialogue [Add property].
    4. Saisissez hdp.version=2.6.0.3-8, le numéro de version que vous avez trouvé en suivant la procédure Trouver la valeur de hdp.version à utiliser et cliquez sur Add pour valider les changements. Le paramètre hdp.version s'affiche dans la liste de paramètres Custom yarn-site.
    5. Cliquez sur Save pour valider la nouvelle configuration et redémarrez les services pour implémenter le paramètre hdp.version dans le fichier yarn-site.xml.
  2. Dans le Studio, ouvrez le Job Spark à utiliser et cliquez sur l'onglet Run pour ouvrir cette vue.
  3. Cliquez sur Spark configuration, puis dans cette vue, cochez la case Set hdp.version et saisissez, entre guillemets doubles, le numéro de version que vous avez saisi dans le cluster. Dans cet exemple, il s'agit de 2.6.0.3-8.

    Cette procédure explique uniquement les actions à effectuer pour résoudre le problème de version HDP dans un Job Spark. Vous devez configurer correctement les autres parties de votre Job avant de pouvoir l'exécuter avec succès.

Résoudre le problème de variable hdp.version pour les Jobs MapReduce

Procédure

  1. Définissez le paramètre hdp.version dans votre cluster, plus précisément dans le fichier mapred-site.xml du cluster. Le cluster Hortonworks lit ce fichier pour trouver l'application MapReduce à utiliser.
    1. Dans Ambari, cliquez sur le service MapReduce2 dans la liste de services à gauche, puis cliquez sur Configs pour ouvrir la page de configuration et cliquez sur l'onglet Advanced.
    2. Faites défiler la page jusqu'en bas pour trouver la liste Advanced mapred-site et cliquez sur Advanced mapred-site pour afficher la liste.
    3. Trouvez le paramètre mapreduce.application.framework.path. Un chemin d'accès a été défini pour ce paramètre avec la variable ${hdp.version} qui se trouve dans ce chemin.
    4. Remplacez ${hdp.version} par hdp.version=2.6.0.3-8, le numéro de version que vous avez trouvé en suivant la procédure Trouver la valeur de hdp.version à utiliser.
    5. Cliquez sur Save pour valider la nouvelle configuration et redémarrez les services pour implémenter la nouvelle valeur de hdp.version dans le fichier mapred-site.xml.
  2. Dans le Studio, ouvrez le Job MapReduce à utiliser et cliquez sur l'onglet Run pour ouvrir cette vue.
  3. Cliquez sur Advanced settings et dans cette vue, cochez la case Use specific JVM arguments, puis ajoutez le numéro de version que vous avez saisi dans le cluster. Dans cet exemple, ajoutez -Dhdp.version=2.6.0.3-8.

    Cette procédure explique uniquement les actions à effectuer pour résoudre le problème de version HDP dans un Job MapReduce. Vous devez configurer correctement les autres parties de votre Job avant de pouvoir l'exécuter avec succès.