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

Version
8.0
Language
Français
Product
Talend Big Data
Talend Big Data Platform
Talend Data Fabric
Talend Real-Time Big Data Platform
Module
Studio Talend
Content
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

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 connu lors de l'exécution de Jobs Spark 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 une 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 resolve-the-hdp.version-variable-issue-for-mapreduce-jobs_t.html.

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 trouvé en suivant la procédure au début de cet article concernant la manière de trouver la valeur hdp.version à utiliser, puis cliquez sur Add afin de valider les modifications. 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.

80_fr/fr/studio-big-data/resolve-the-hdp.version-variable-issue-for-mapreduce-jobs_t.html