Feinkörnige Autorisierung
In diesem Blog erkläre ich Ihnen, wie Sie beeline in einem gesicherten Cluster verwenden können. Der CDH 5.1.0-Cluster ist mit Kerberos (Authentifizierung) und Sentry (Autorisierung) gesichert. Wenn Sie einen gesicherten Cluster einrichten möchten, lesen Sie den entsprechenden Blog kerberos-cloudera-setup. Cloudera verwendet Sentry für die feinkörnige Autorisierung von Daten und Metadaten, die in einem Hadoop-Cluster gespeichert sind.
Dieser Blog bezieht sich auf das Hive-Befehlszeilentool. Die Verwendung von Hive über HUE ist kein Problem!
Warum von Hive CLI zu Beeline wechseln?
Der Hauptunterschied zwischen den beiden besteht darin, wie sich die Clients mit Hive verbinden. Die Hive CLI stellt eine direkte Verbindung zum Hive-Treiber her und erfordert, dass Hive auf demselben Rechner wie der Client installiert ist. Beeline hingegen stellt eine Verbindung zum HiveServer2 her und erfordert nicht die Installation der Hive-Bibliotheken auf demselben Rechner wie der Client. Beeline ist ein Thin Client, der ebenfalls den Hive JDBC-Treiber verwendet, aber stattdessen Abfragen über HiveServer2 ausführt, der mehrere gleichzeitige Client-Verbindungen zulässt und Authentifizierung unterstützt.
Die Sentry-Sicherheit von Cloudera funktioniert über HiveServer2 und nicht über HiveServer1, der von Hive CLI verwendet wird. Daher folgt Hive über die Befehlszeile nicht den Richtlinien von Sentry. Laut den
Die Hive-Befehlszeile wird die Sentry-Sicherheit umgehen!
Mit Beeline verbinden
Bei einem nicht gesicherten Cluster ist es einfach, eine Verbindung herzustellen. Sie können Beeline verwenden, wie in diesem Blog cloudera-migrating-hive-to-beeline beschrieben.
# beeline mit Parametern beeline -u url -n Benutzername -p Passwort # url ist eine jdbc-Verbindungszeichenfolge, die auf den hiveServer2-Host zeigt. # oder verwenden Sie die Aktion !connect beeline beeline> !connect jdbc:hive2://HiveServer2Host:Port
Wenn Sie einen kerberisierten Cluster verwenden, können Sie sich nach Ihrem Prinzip verbinden:
# Initialisieren Sie Ihr Kerberos-Ticket kinit # Verbinden Sie sich mit Ihrem Ticket, kein Benutzername/Passwort erforderlich. # master01 ist der Knoten, auf dem HiveServer2 läuft. # Fügen Sie in der Url den Parameter principle mit dem Hive-Prinzip hinzu. beeline -u "jdbc:hive2://master01:10000/default;principal=hive/master01@MYREALM.COM"
Sie finden den vollständigen Namen des Prinzips im Cloudera Manager
- Verwaltung -> Kerberos
- Berechtigungsnachweise -> search hive
- Verwenden Sie das Prinzip, auf dem HiveServer2 läuft
Exportieren Sie eine Abfrage in eine Datei mit beeline:
HIVESERVER2_URL = "jdbc:hive2://master01:10000/default;principal=hive/master01@MYREALM.COM" # Einfacher Export (als Tabelle). beeline -u $HIVESERVER2_URL -f quey.sql > ergebnis.txt # Ergebnis firstline: query, then: pretty table, lastline: '0: jdbc:hive2://master02:10000/default>' # Entfernen Sie die erste und letzte Zeile des Ergebnisses für eine richtige csv-Datei mit einer Kopfzeile: beeline -u $HIVESERVER2_URL -f quey.sql --outputformat=csv --showHeader=true | tail -n +2 -f | Kopf -n -1 > ergebnis.csv
Weitere Informationen zu den beeline-command-options und hive-command-options finden Sie im Apache-Wiki.
Fehlerbehebung
Die Fehler sehen alle gleich aus. Fehler: Ungültige URL ... (state=08S01,code=0). Die Option --verbose=true hilft leider nicht viel weiter. Wenn Sie auf Probleme stoßen, sehen Sie in den hiveserver2-Protokollen nach Hinweisen.
Problem:
[alexanderbij@tools01 ~]$ beeline -u jdbc:hive2://master01:10000/default;Hauptperson=hive/master01@MYREALM.COM scannen vollständig in 3ms Verbindung mit jdbc:hive2://master01:10000/default Fehler: Ungültige URL: jdbc:hive2://master01:10000/default (Staat=08S01,code=0) ...
Lösung:
Beachten Sie, dass die Meldung Ungültige URL den Prinzipteil nicht enthält! Verwenden Sie "Anführungszeichen um die url", sonst wird das Argument hive principle nicht verwendet
Problem:
# beeline shell 14/08/08 09:44:23 ERROR transport.TSaslTransport: SASL-Aushandlung fehlgeschlagen javax.security.sasl.SaslException: GSS initiate fehlgeschlagen [Verursacht durch GSSException: Keine gültigen Anmeldeinformationen angegeben (Ebene des Mechanismus: Server nicht in Kerberos-Datenbank gefunden (7))] ... Verursacht durch: KrbException: Server nicht in Kerberos-Datenbank gefunden (7) ... Verursacht durch: KrbException: Bezeichner funktioniert nicht't entspricht dem erwarteten Wert (906)
Lösung:
Es gibt eine Keytab-Datei auf dem HiveServer2-Knoten, die mit dem Prinzip initialisiert wurde. Die Verbindungszeichenfolge verwendet das falsche Kerberos-Prinzip für die keytab-Datei. Stellen Sie sicher, dass Sie das richtige Hive-Prinzip in der Verbindungs-URL angeben.
Unsere Ideen
Weitere Blogs
Contact



