web-dev-qa-db-fra.com

Site Hive manquant lors de l'utilisation du mode cluster YARN par étincelle de soumission

À l’aide de HDP 2.5.3 et j’ai essayé de déboguer certains problèmes liés au chemin de classe du conteneur YARN. 

Depuis que HDP inclut à la fois Spark 1.6 et 2.0.0, certaines versions sont en conflit

Les utilisateurs que je supporte peuvent utiliser avec succès les requêtes Spark2 avec Hive en mode YARN client, mais pas à partir du mode cluster, ils obtiennent des erreurs à propos des tables non trouvées ou quelque chose du genre, car la connexion Metastore n'est pas établie. 

Je suppose que définir --driver-class-path /etc/spark2/conf:/etc/Hive/conf ou transmettre --files /etc/spark2/conf/Hive-site.xml après spark-submit fonctionnerait, mais pourquoi Hive-site.xml n'est-il pas déjà chargé à partir du dossier conf?

Selon (Documentation Hortonworks } _, Hive-site doit être placé dans $SPARK_HOME/conf et il est ...

Je vois hdfs-site.xml et core-site.xml, ainsi que d'autres fichiers faisant partie de HADOOP_CONF_DIR, par exemple, et voici les informations du conteneur de l'interface utilisateur YARN. 

2232355    4 drwx------   2 yarn     hadoop       4096 Aug  2 21:59 ./__spark_conf__
2232379    4 -r-x------   1 yarn     hadoop       2358 Aug  2 21:59 ./__spark_conf__/topology_script.py
2232381    8 -r-x------   1 yarn     hadoop       4676 Aug  2 21:59 ./__spark_conf__/yarn-env.sh
2232392    4 -r-x------   1 yarn     hadoop        569 Aug  2 21:59 ./__spark_conf__/topology_mappings.data
2232398    4 -r-x------   1 yarn     hadoop        945 Aug  2 21:59 ./__spark_conf__/taskcontroller.cfg
2232356    4 -r-x------   1 yarn     hadoop        620 Aug  2 21:59 ./__spark_conf__/log4j.properties
2232382   12 -r-x------   1 yarn     hadoop       8960 Aug  2 21:59 ./__spark_conf__/hdfs-site.xml
2232371    4 -r-x------   1 yarn     hadoop       2090 Aug  2 21:59 ./__spark_conf__/hadoop-metrics2.properties
2232387    4 -r-x------   1 yarn     hadoop        662 Aug  2 21:59 ./__spark_conf__/mapred-env.sh
2232390    4 -r-x------   1 yarn     hadoop       1308 Aug  2 21:59 ./__spark_conf__/hadoop-policy.xml
2232399    4 -r-x------   1 yarn     hadoop       1480 Aug  2 21:59 ./__spark_conf__/__spark_conf__.properties
2232389    4 -r-x------   1 yarn     hadoop       1602 Aug  2 21:59 ./__spark_conf__/health_check
2232385    4 -r-x------   1 yarn     hadoop        913 Aug  2 21:59 ./__spark_conf__/rack_topology.data
2232377    4 -r-x------   1 yarn     hadoop       1484 Aug  2 21:59 ./__spark_conf__/ranger-hdfs-audit.xml
2232383    4 -r-x------   1 yarn     hadoop       1020 Aug  2 21:59 ./__spark_conf__/commons-logging.properties
2232357    8 -r-x------   1 yarn     hadoop       5721 Aug  2 21:59 ./__spark_conf__/hadoop-env.sh
2232391    4 -r-x------   1 yarn     hadoop        281 Aug  2 21:59 ./__spark_conf__/slaves
2232373    8 -r-x------   1 yarn     hadoop       6407 Aug  2 21:59 ./__spark_conf__/core-site.xml
2232393    4 -r-x------   1 yarn     hadoop        812 Aug  2 21:59 ./__spark_conf__/rack-topology.sh
2232394    4 -r-x------   1 yarn     hadoop       1044 Aug  2 21:59 ./__spark_conf__/ranger-hdfs-security.xml
2232395    8 -r-x------   1 yarn     hadoop       4956 Aug  2 21:59 ./__spark_conf__/metrics.properties
2232386    8 -r-x------   1 yarn     hadoop       4221 Aug  2 21:59 ./__spark_conf__/task-log4j.properties
2232380    4 -r-x------   1 yarn     hadoop         64 Aug  2 21:59 ./__spark_conf__/ranger-security.xml
2232372   20 -r-x------   1 yarn     hadoop      19975 Aug  2 21:59 ./__spark_conf__/yarn-site.xml
2232397    4 -r-x------   1 yarn     hadoop       1006 Aug  2 21:59 ./__spark_conf__/ranger-policymgr-ssl.xml
2232374    4 -r-x------   1 yarn     hadoop         29 Aug  2 21:59 ./__spark_conf__/yarn.exclude
2232384    4 -r-x------   1 yarn     hadoop       1606 Aug  2 21:59 ./__spark_conf__/container-executor.cfg
2232396    4 -r-x------   1 yarn     hadoop       1000 Aug  2 21:59 ./__spark_conf__/ssl-server.xml
2232375    4 -r-x------   1 yarn     hadoop          1 Aug  2 21:59 ./__spark_conf__/dfs.exclude
2232359    8 -r-x------   1 yarn     hadoop       7660 Aug  2 21:59 ./__spark_conf__/mapred-site.xml
2232378   16 -r-x------   1 yarn     hadoop      14474 Aug  2 21:59 ./__spark_conf__/capacity-scheduler.xml
2232376    4 -r-x------   1 yarn     hadoop        884 Aug  2 21:59 ./__spark_conf__/ssl-client.xml

Comme vous pouvez le constater, Hive-site n’est pas là, même si j’ai certainement conf/Hive-site.xml pour spark-submit à prendre

[spark@asthad006 conf]$ pwd && ls -l
/usr/hdp/2.5.3.0-37/spark2/conf
total 32
-rw-r--r-- 1 spark spark   742 Mar  6 15:20 Hive-site.xml
-rw-r--r-- 1 spark spark   620 Mar  6 15:20 log4j.properties
-rw-r--r-- 1 spark spark  4956 Mar  6 15:20 metrics.properties
-rw-r--r-- 1 spark spark   824 Aug  2 22:24 spark-defaults.conf
-rw-r--r-- 1 spark spark  1820 Aug  2 22:24 spark-env.sh
-rwxr-xr-x 1 spark spark   244 Mar  6 15:20 spark-thrift-fairscheduler.xml
-rw-r--r-- 1 Hive  hadoop  918 Aug  2 22:24 spark-thrift-sparkconf.conf

Donc, je ne pense pas que je suis censé placer Hive-site dans HADOOP_CONF_DIR car Hive_CONF_DIR est séparé, mais ma question est la suivante: comment pouvons-nous demander à Spark2 de récupérer le Hive-site.xml sans avoir à le passer manuellement en tant que paramètre à l'exécution?

EDIT Naturellement, depuis que je suis sur HDP, j'utilise Ambari. L'administrateur de cluster précédent a installé les clients Spark2 sur toutes les machines. Tous les gestionnaires YARN NodeManagers susceptibles d'être des pilotes Spark potentiels doivent donc posséder les mêmes fichiers de configuration. 

7
cricket_007

Vous pouvez utiliser la propriété spark - spark.yarn.dist.files et spécifier le chemin d'accès à Hive-site.xml.

3
Artur Sukhenko

Si je comprends bien, en modes local ou yarn-client ...

  1. le programme de lancement vérifie s'il a besoin de jetons Kerberos pour HDFS, YARN, Hive, HBase
    > Hive-site.xml est recherché dans les bibliothèques clientes Hive/Hadoop dans CLASSPATH (y compris dans driver.extraClassPath car le pilote s’exécute dans le programme de lancement et le CLASSPATH fusionné est déjà construit à ce stade)
  2. le pilote vérifie le type de métastore à utiliser pour à des fins internes : un métastore autonome sauvegardé par une instance Derby volatile ou un métastore Hive normal
    > c'est $SPARK_CONF_DIR/Hive-site.xml
  3. lorsque vous utilisez l'interface Hive, une connexion Metastore est utilisée pour lire/écrire les métadonnées Hive dans le pilote.
    > Hive-site.xml est recherché dans les bibliothèques du client Hive/Hadoop dans CLASSPATH (et le jeton Kerberos est utilisé, le cas échéant)

Ainsi, vous pouvez avoir un Hive-site.xml indiquant que Spark doit utiliser une instance Derby intégrée en mémoire pour être utilisée en tant que sandbox (en mémoire impliquant "arrêtez de laisser tous ces fichiers temporaires derrière vous") pendant qu'un autre Hive-site.xml donne le résultat réel. Hive Metastore URI. Et tout va bien.


Maintenant, en mode yarn-cluster, tout ce mécanisme explose à peu près dans un désordre vilain et non documenté.

Le programme de lancement a besoin de ses propres paramètres CLASSPATH pour créer les jetons Kerberos, sinon il échoue en mode silencieux. Mieux vaut consulter le code source pour savoir quelle variable Env non documentée vous devez utiliser.
Il peut également être nécessaire de remplacer certaines propriétés, car les valeurs par défaut codées en dur ne le sont tout à coup plus (en silence).

Le pilote ne peut pas exploiter le $SPARK_CONF_DIR d'origine, il doit compter sur ce que le programme de lancement a rendu disponible pour le téléchargement. Est-ce que cela inclut une copie de $SPARK_CONF_DIR/Hive-site.xml? On dirait que ce n'est pas le cas.
Donc, vous utilisez probablement un objet Derby comme un talon.

Et le pilote doit faire avec tout ce que YARN a imposé au conteneur CLASSPATH, dans n'importe quel ordre.
En outre, les ajouts driver.extraClassPath NE SONT PAS prioritaires par défaut; pour cela, vous devez forcer spark.yarn.user.classpath.first=true(qui est traduit dans la propriété standard Hadoop dont je ne me souviens plus du nom exact, d’autant plus que plusieurs accessoires portant des noms similaires risquent d’être obsolètes et/ou de ne pas fonctionner dans Hadoop 2 .X)


Tu penses que c'est mauvais? Essayez de vous connecter à une HBase Kerberized en mode yarn-cluster. La connexion est établie dans les exécuteurs, c’est une autre couche de méchanceté. Mais je dégoûte.

En bout de ligne: redémarrez votre diagnostic .

A. Êtes-vous vraiment, vraiment sûr que les mystérieuses "erreurs de connexion Metastore" sont causées par des propriétés manquantes, et en particulier par l'URI Metastore?

B. En passant, vos utilisateurs utilisent-ils explicitement une HiveContext ???

C. Quel est exactement le CLASSPATH que YARN présente à la machine virtuelle pilote, et quel est exactement le CLASSPATH que le pilote présente aux bibliothèques Hadoop lors de l’ouverture de la connexion Metastore?

D. Si le CLASSPATH construit par YARN est perturbé pour une raison quelconque, quel serait le correctif minimal - modification des règles de priorité? une addition? tous les deux?

4

Dans la configuration clustermode, elle est lue à partir du répertoire conf de la machine, qui exécute le conteneur driver et non celui utilisé pour spark-submit.

1
user8554772

Trouvé un problème avec cette 

Vous créez un org.Apache.spark.sql.SQLContext avant de créer un contexte Hive. Le Hive-site.xml n'est pas sélectionné correctement lorsque vous créez un contexte Hive.

Solution : Créez le contexte Hive avant de créer un autre contexte SQL. 

0
Naveen Krishnan