Hive verfügt über eine relationale Datenbank auf dem Masterknoten, mit dem der Status verfolgt wird. Wenn Sie CREATE TABLE FOO(foo string) LOCATION 'hdfs://tmp/';
dies beispielsweise tun , wird dieses Tabellenschema in der Datenbank gespeichert.
Wenn Sie eine partitionierte Tabelle haben, werden die Partitionen in der Datenbank gespeichert (dies ermöglicht es Hive, Listen von Partitionen zu verwenden, ohne zum Dateisystem zu gehen und diese zu finden usw.). Diese Art von Dingen sind die "Metadaten".
Wenn Sie eine interne Tabelle löschen, werden die Daten und auch die Metadaten gelöscht.
Wenn Sie eine externe Tabelle löschen, werden nur die Metadaten gelöscht. Das bedeutet, dass Hive diese Daten jetzt nicht kennt. Die Daten selbst werden nicht berührt.
Hive-Tabellen können als EXTERN oder INTERN erstellt werden. Dies ist eine Auswahl, die sich darauf auswirkt, wie Daten geladen, gesteuert und verwaltet werden.
Verwenden Sie EXTERNE Tabellen, wenn:
Verwenden Sie INTERNE Tabellen, wenn:
quelle
Um Ihnen zu antworten Frage:
Bei externen Tabellen speichert Hive die Daten an dem Ort, der beim Erstellen der Tabelle angegeben wurde (im Allgemeinen nicht im Lagerverzeichnis). Wenn die externe Tabelle gelöscht wird, werden die Tabellenmetadaten gelöscht, nicht jedoch die Daten.
Für interne Tabellen speichert Hive Daten in seinem Lagerverzeichnis. Wenn die Tabelle gelöscht wird, werden sowohl die Tabellenmetadaten als auch die Daten gelöscht.
Als Referenz,
Unterschied zwischen internen und externen Tabellen:
Hive kann interne oder externe Tabellen haben. Dies ist eine Auswahl, die sich darauf auswirkt, wie Daten geladen, gesteuert und verwaltet werden.
Verwenden Sie EXTERNE Tabellen, wenn:
Verwenden Sie INTERNE Tabellen, wenn:
Quelle :
HDInsight: Hive Interne und Externe Tabellen Intro
Interne und externe Tabellen in Hadoop-HIVE
quelle
Interne Tabellendaten werden im Warehouse-Ordner gespeichert, während externe Tabellendaten an dem Ort gespeichert werden, den Sie bei der Tabellenerstellung angegeben haben.
Wenn Sie also eine interne Tabelle löschen, werden sowohl das Schema als auch die Daten im Warehouse-Ordner gelöscht. Bei einer externen Tabelle verlieren Sie jedoch nur das Schema.
Wenn Sie also eine externe Tabelle nach dem Löschen wieder zurückhaben möchten, können Sie erneut eine Tabelle mit demselben Schema erstellen und auf den ursprünglichen Datenspeicherort verweisen. Hoffe es ist jetzt klar.
quelle
Der einzige Unterschied im Verhalten (nicht die beabsichtigte Verwendung) aufgrund meiner bisher begrenzten Forschung und Tests (unter Verwendung von Hive 1.1.0 -cdh5.12.0) scheint darin zu bestehen, dass eine Tabelle gelöscht wird
(HINWEIS: Siehe Abschnitt 'Verwaltete und externe Tabellen' in https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL , in dem einige andere Unterschiede aufgeführt sind, die ich nicht vollständig verstanden habe.)
Ich glaube, Hive wählt den Ort, an dem die Tabelle erstellt werden soll, basierend auf der folgenden Priorität von oben nach unten
Wenn die Option "Standort" während der "Erstellung einer Hive-Tabelle" nicht verwendet wird, wird die obige Vorrangregel verwendet. Dies gilt sowohl für interne als auch für externe Tabellen. Dies bedeutet, dass sich eine interne Tabelle nicht unbedingt im Warehouse-Verzeichnis befinden muss und sich an einer anderen Stelle befinden kann.
Hinweis: Ich habe möglicherweise einige Szenarien verpasst, aber aufgrund meiner begrenzten Untersuchung scheint das Verhalten der internen und der externen Tabelle bis auf den oben beschriebenen Unterschied (Löschen von Daten) gleich zu sein. Ich habe die folgenden Szenarien sowohl für interne als auch für externe Tabellen ausprobiert.
quelle
Wenn Sie es in externen Tabellen löschen, wird nur das Schema der Tabelle gelöscht. Tabellendaten sind am physischen Speicherort vorhanden. Um die Daten zu löschen, verwenden Sie hadoop fs - rmr tablename. Verwaltete Tabellenstruktur hat die volle Kontrolle über Tabellen. In externen Tabellen haben Benutzer die Kontrolle darüber.
quelle
Interne Tabellen sind nützlich, wenn Hive den gesamten Lebenszyklus Ihrer Daten einschließlich des Löschens verwalten soll, während externe Tabellen nützlich sind, wenn die Dateien außerhalb von Hive verwendet werden.
quelle
Externe Hive-Tabellen haben den Vorteil, dass sie beim Löschen von Tabellen keine Dateien entfernen. Wir können Zeilenformate mit unterschiedlichen Einstellungen festlegen, z. B. serde .... delimited
quelle
Denken Sie auch daran, dass Hive ein Big Data Warehouse ist. Wenn Sie eine Tabelle löschen möchten, möchten Sie keine Gigabyte oder Terabyte an Daten verlieren. Das Generieren, Verschieben und Kopieren von Daten in diesem Maßstab kann zeitaufwändig sein. Wenn Sie eine "verwaltete" Tabellenstruktur löschen, werden auch deren Daten in den Papierkorb verschoben. Wenn Sie eine 'externe' Tabelle löschen, wird nur die Schemadefinition aus dem Hive-Metaspeicher entfernt. Die Daten auf dem HDFS bleiben weiterhin erhalten.
quelle
Stellen Sie sich dieses Szenario vor, das am besten für die externe Tabelle geeignet ist:
Ein MapReduce (MR) -Job filtert eine große Protokolldatei, um
n
Unterprotokolldateien auszuspucken (z. B. enthält jede Unterprotokolldatei ein bestimmtes Nachrichtentypprotokoll), und die Ausgabe, dhn
Unterprotokolldateien, werden in HDFS gespeichert.Diese Protokolldateien müssen in Hive-Tabellen geladen werden, um weitere Analysen durchzuführen. In diesem Szenario würde ich eine oder mehrere externe Tabellen empfehlen, da die tatsächlichen Protokolldateien von einem externen Prozess generiert werden und dessen Eigentümer sind, dh ein MR-Job, den Sie vermeiden können zusätzlicher Schritt zum Laden jeder generierten Protokolldatei in die jeweilige Hive-Tabelle.
quelle
Der beste Anwendungsfall für eine externe Tabelle in der Struktur ist, wenn Sie die Tabelle aus einer CSV- oder Textdatei erstellen möchten
quelle
Hive speichert nur die Metadaten im Metastore und die Originaldaten außerhalb des Hive, wenn wir eine externe Tabelle verwenden. Wir können den Speicherort angeben. Durch diese werden unsere Originaldaten nicht beeinflusst, wenn wir die Tabelle löschen
quelle
Wenn bereits Daten in HDFS vorhanden sind, kann eine externe Hive-Tabelle erstellt werden, um die Daten zu beschreiben. Es heißt EXTERNAL, da die Daten in der externen Tabelle in den LOCATION-Eigenschaften anstelle des Standard-Warehouse-Verzeichnisses angegeben sind.
Wenn Daten in den internen Tabellen gespeichert werden, verwaltet Hive den Lebenszyklus der Tabelle und der Daten vollständig. Dies bedeutet, dass die Daten entfernt werden, sobald die interne Tabelle gelöscht wird. Wenn die externe Tabelle gelöscht wird, werden die Tabellenmetadaten gelöscht, die Daten bleiben jedoch erhalten. In den meisten Fällen wird eine externe Tabelle bevorzugt, um zu vermeiden, dass versehentlich Daten zusammen mit Tabellen gelöscht werden.
quelle
Bei verwalteten Tabellen steuert Hive den Lebenszyklus ihrer Daten. Hive speichert die Daten für verwaltete Tabellen in einem Unterverzeichnis unter dem von hive.metastore.warehouse.dir standardmäßig definierten Verzeichnis.
Wenn wir eine verwaltete Tabelle löschen, löscht Hive die Daten in der Tabelle. Verwaltete Tabellen sind jedoch für die Freigabe mit anderen Tools weniger praktisch. Nehmen wir zum Beispiel an, wir haben Daten, die hauptsächlich von Pig erstellt und verwendet werden, aber wir möchten einige Abfragen dagegen ausführen, aber Hive nicht das Eigentum an den Daten geben.
Zu diesem Zeitpunkt ist eine externe Tabelle definiert, die auf diese Daten verweist, diese jedoch nicht übernimmt.
quelle
INTERN : Tabelle erstellt Erste und Daten geladen werden später
EXTERN : Daten sind vorhanden und eine Tabelle wird darüber erstellt .
quelle
In Hive können wir auch eine externe Tabelle erstellen. Es weist Hive an, auf die Daten zu verweisen, die sich an einem vorhandenen Speicherort außerhalb des Lagerverzeichnisses befinden. Durch das Löschen externer Tabellen werden Metadaten gelöscht, nicht jedoch die Daten.
quelle
Das möchte ich hinzufügen
quelle
In einfachen Worten gibt es zwei Dinge:
Hive kann Dinge im Lager verwalten, dh es werden keine Daten aus dem Lager gelöscht. Wenn wir die Tabelle löschen:
1) Bei internen Tabellen werden die Daten intern im Lager verwaltet. Wird also gelöscht.
2) Bei externen Tabellen werden die Daten ewig vom Lager aus verwaltet. Kann also nicht gelöscht werden und andere Clients als Hive können es auch verwenden.
quelle