À 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.
Vous pouvez utiliser la propriété spark - spark.yarn.dist.files
et spécifier le chemin d'accès à Hive-site.xml.
Si je comprends bien, en modes local
ou yarn-client
...
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)$SPARK_CONF_DIR/Hive-site.xml
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)
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?
Dans la configuration cluster
mode
, elle est lue à partir du répertoire conf
de la machine, qui exécute le conteneur driver
et non celui utilisé pour spark-submit
.
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.