Haben Sie mit Flink SQL oder Flink Table API gearbeitet? Finden Sie es frustrierend, Quellen und Senken über verschiedene Projekte oder Repositories hinweg zu verwalten, zusammen mit allen Eigenschaften der Tabellen? Wie können Sie die Duplizierung von Tabellendefinitionen verhindern? Plattformen wie Ververica bieten zwar Metadatenkataloge an, aber was ist, wenn Sie keinen Zugang zu diesen Katalogen haben?
Hier ist eine brauchbare Alternative: der zuverlässige alte Hive Metastore Service (HMS). Ich werde Sie durch den gesamten Prozess führen und Ihnen zeigen , wie Sie Flink und HMS nahtlos einrichten und mit ihnen arbeiten können. Wenn Sie interessiert sind, lesen Sie weiter!
HMS einrichten
Der Hive Metastore ist ein eigenständiger Dienst für die Verwaltung von Metadaten, einschließlich Tabellendefinitionen, Partitionen, Eigenschaften und Statistiken. Er ist zwar in der Spark-Community bekannt, kann aber auch für Flink-Entwickler nützlich sein.
Standardmäßig verwendet der Hive Metastore Apache Derby als Speicher-Backend, aber es ist möglich, ihn so zu konfigurieren, dass er jede JDBC-kompatible Datenbank verwendet. Für dieses Beispiel habe ich mich für die Verwendung von PostgresDB entschieden.
Um den Hive Metastore zu installieren, gehen Sie folgendermaßen vor:
- Installieren Sie das Hadoop-Paket.
- Installieren Sie den eigenständigen Hive Metastore.
- Installieren Sie den JDBC-Treiber für die von Ihnen gewählte Datenbank.
Die Konfiguration erfolgt über die Dateien hive-site.xml und metastore-site.xml. Um den Hive Metastore zu starten, führen Sie den folgenden Befehl aus:
/opt/hive-metastore/bin/schematool -dbType postgres
Sie können das Flag -validate verwenden, um das Datenbankschema zu validieren und -initSchema, wenn Sie es zum ersten Mal ausführen.
Das vollständige Beispiel als Docker-Image ist hier verfügbar. Sie können es mit dem hier veröffentlichten helm chart einsetzen (denken Sie daran, Postgres db einzurichten).
Flink-Abhängigkeiten
Flink und Hadoop führen immer zu Abhängigkeitskonflikten. Dieses Problem kann durch Shadowing von Paketen gelöst werden.
Ich fand heraus, dass dies funktionierte, indem ich den Flink-Bibliotheken Folgendes hinzufügte:
- org.apache.flink:flink-shaded-hadoop-3-uber(https://repository.cloudera.com/artifactory/cloudera-repos/)
- org.apache.hive:hive-exec
- org.apache.thrift:libfb303
- org.apache.flink:flink-connector-hive_${scala.binary.version}
Der nächste Schritt ist die Konfigurationsdatei hive-site.xml. Ich habe sie im Verzeichnis /home/maciej/hive erstellt.
<configuration>
<property>
<name>hive.metastore.uris</name>
<value>thrift://hive-metastore.hms.svc.cluster.local:9083</value>
<description>IP address (or fully-qualified domain name) and port of the metastore host</description>
</property>
<property>
<name>hive.metastore.schema.verification</name>
<value>true</value>
</property>
</configuration>
Flink Tabelle API/SQL
Um HMS zu verwenden, müssen Sie Ihren Katalog in Flink definieren (der auf ein Verzeichnis mit hive-site.xml verweist) und ihn einstellen:
CREATE CATALOG hms_example WITH (
'type' = 'hive',
-- 'default-database' = 'default',
'hive-conf-dir' = '/home/maciej/hive'
);
USE CATALOG hms_example;
Jetzt haben Sie Zugriff auf alle Definitionen der Tabelle (z.B. können Sie sie mit SHOW TABLES auflisten). Wenn Sie eine neue Tabelle erstellen, wird diese zu HMS hinzugefügt und ist in den anderen Flink-Jobs verfügbar.
/** JOB 1 */
CREATE TABLE table_a (
id INT,
description STRING
) with (
'connector'='datagen'
)
/** JOB 2 */
SHOW TABLES
/** JOB 2 */
SELECT * FROM table_a LIMIT 5

Sicherheit
Der Hive-Server unterstützt mehrere Sicherheitsmechanismen, um den Zugriff auf Daten zu kontrollieren. Er kann mit Kerberos oder LDAP integriert werden, um eine Single Sign-On (SSO) Authentifizierung zu ermöglichen. Der Zugriff auf Tabellen kann über Storage-Based Authorization (Zugriff auf Datenbanken, Tabellen und Partitionen basierend auf den im Storage definierten Privilegien), SQL Standards-Based Authorization (feinkörniger Zugriff über SQL) oder Apache Ranger definiert werden.
Das SQL-basierte, das Ranger- oder das Standard-Autorisierungsmodell von Hive wird während der Abfragekompilierung vom Hive-Server durchgesetzt. Dies liegt jedoch außerhalb der Kontrolle von HMS und kann daher nicht mit dem Flink-Framework verwendet werden.
Nur die speicherbasierte Autorisierung fällt in den Zuständigkeitsbereich von HMS und könnte in Verbindung mit Flink verwendet werden, auch wenn der Umfang ihrer Nützlichkeit begrenzt ist.
HMS ist auf einem RDBMS aufgebaut. Es ist möglich, Benutzer mit unterschiedlichen Rechten anzulegen, z.B. einen mit Lese- und Schreibzugriff (RW) und einen anderen mit Nur-Lese-Zugriff (RO). Auf diese Weise können Sie Ihre Metadaten vor versehentlichen Änderungen schützen.
Bitte beachten Sie, dass alle Eigenschaften der Tabelle für alle Jobs zugänglich sind und dass alle Anmeldeinformationen leicht gelesen werden können. Wenn Sie HMS Zugriff gewähren, erhalten Sie auch Zugriff auf alle zugrundeliegenden Passwörter.
Das ist alles
Ich hoffe, Sie finden es einfach, HMS mit Flink einzurichten und zu verwenden. Es ist vorteilhaft für die Verwaltung der Tabellendefinitionen zwischen Flink-Jobs, Projekten oder Repositories und trennt die Konfiguration vom SQL-Code. Benötigen Sie Hilfe mit Flink? Melden Sie sich für eine kostenlose Beratung durch einen unserer Experten an.
Verfasst von
Maciej Maciejko
Unsere Ideen
Weitere Blogs
Contact




