hadoop - with - jdbc kerberos




Se connecter à la ruche kerberised à l'aide de jdbc à partir du système Windows distant (2)

J'ai installé un environnement de ruche avec la sécurité de Kerberos activée sur un serveur de Linux (Red Hat). Et j'ai besoin de me connecter à partir d'une machine Windows distante pour la ruche en utilisant JDBC.

Donc, j'ai hiveserver2 en cours d'exécution dans la machine Linux, et j'ai fait "kinit".

Maintenant, j'essaie de me connecter à partir d'un programme Java sur le côté Windows avec un programme de test comme celui-ci,

Class.forName("org.apache.hive.jdbc.HiveDriver");
String url = "jdbc:hive2://<host>:10000/default;principal=hive/[email protected]<YOUR-REALM.COM>"
Connection con = DriverManager.getConnection(url);

Et j'ai l'erreur suivante,

Exception due to: Could not open client transport with JDBC Uri:
 jdbc:hive2://<host>:10000/;principal=hive/[email protected]>: 
GSS initiate failed

Qu'est-ce que je fais ici mal? J'ai vérifié de nombreux forums, mais je n'ai pas pu trouver une solution appropriée. Toute réponse sera appréciée.

Merci


La clé pour nous quand nous avons rencontré le problème, était la suivante:

Sur votre serveur, certains noms de Kerberos sont autorisés à fonctionner sur les données.

Lorsque nous avons essayé d'exécuter une requête via JDBC, nous n'avons pas effectué le kinit approprié côté client.

Dans ce cas, la solution est évidente:

Sur le client Windows: faites un kinit avec le compte approprié avant de vous connecter


Si vous exécutiez votre code sous Linux, je pointerais simplement vers ce post - c'est-à-dire que vous devez utiliser les propriétés Système pour définir la configuration Kerberos et JAAS , à partir de fichiers de configuration avec des formats spécifiques.
Et vous devez basculer les indicateurs de trace de débogage pour comprendre le problème de configuration subtile (par exemple, différentes versions / versions de JVM peuvent avoir des exigences de syntaxe différentes, qui ne sont pas documentées, c'est un processus d'essai et d'erreur).

Mais sur Windows il y a des problèmes supplémentaires:

  1. le pilote Apache Hive JDBC a des dépendances sur les fichiers JAR Hadoop, en particulier lorsque Kerberos est impliqué (voir cet article pour plus de détails)
  2. ces fichiers JAR Hadoop requièrent des "bibliothèques natives" - c'est-à-dire un port Windows de Hadoop (que vous devez compiler vous-même ou télécharger à partir d'une source non sécurisée sur le web !!) - plus les propriétés système hadoop.home.dir et java.library.path pointant vers le répertoire principal Hadoop et son sous-répertoire bin

En plus de cela, le pilote Apache Hive a des problèmes de compatibilité - chaque fois qu'il y a des changements dans le protocole de fil, les nouveaux clients ne peuvent pas se connecter à des serveurs plus anciens.

Je vous conseille donc vivement d'utiliser le pilote Cloudera JDBC pour Hive pour vos clients Windows . Le site Cloudera vous demande simplement votre adresse e-mail.
Après cela, vous avez un manuel PDF de plus de 80 pages à lire, les fichiers JAR à ajouter à votre CLASSPATH et votre URL JDBC à adapter selon le manuel.
Remarque: le pilote Cloudera est un pilote compatible JDBC-4.x, pas besoin de cet héritage Class.forName() ...







kerberos