Unterschied zwischen internen und externen Hive-Tabellen?

110

Kann mir jemand den Unterschied zwischen der externen und der internen Tabelle von Hive erklären? Ich weiß, dass der Unterschied beim Ablegen des Tisches entsteht. Ich verstehe nicht, was Sie unter Daten verstehen, und Metadaten werden in internen und nur Metadaten in externen Tabellen gelöscht. Kann mir jemand bitte Knoten erklären.

DrewRose
quelle

Antworten:

117

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.

Prestomation
quelle
ok .. zum Beispiel habe ich eine externe Tabelle erstellt .. und ich lasse es fallen. was geschieht? Was meinst du damit, dass die Daten nicht berührt werden? Wenn ich eine Auswahl * dieser Tabelle gebe, wird sie angezeigt? Ich kann mir den Unterschied nicht vorstellen.
DrewRose
11
Wenn Sie eine Tabelle löschen, gibt Hive den Status zurück, in dem sie sich vor dem Löschen der Tabelle befand. Wenn Sie die Abfrage 'select * from foo' ausführen, nachdem Sie foo gelöscht haben, teilt Ihnen hive mit, dass die Tabelle nicht vorhanden ist. Dies liegt daran, dass Sie Hive angewiesen haben, diesen Tisch zu vergessen. Die Daten sind noch in dem Dateisystem vorhanden, in dem sie sich zuvor befanden. Stellen Sie sich die Metadaten als 'Zeiger' auf die Position der Daten vor.
Prestomation
1
Sie sagen also, wenn ich Daten in dis location opt / nancy / foo.txt habe und sie in die externe Tabelle lade und ablege, gehen die Metadaten verloren, aber die Daten in dieser Position opt / nancy / foo.txt bleiben erhalten?
DrewRose
OK, befindet sich dieser Speicherort jetzt im HDFS oder auf meinem lokalen System? Wenn es sich im lokalen System befindet und ich die Daten in eine interne Tabelle lade und die Tabelle lösche, bleibt die Datei foo.txt weiterhin an diesem Speicherort. habe ich soweit recht
DrewRose
3
Hive-Tabellen befinden sich in einem unterstützten Dateisystem (Hbase, HDFS, S3 usw.). Ich gehe davon aus, dass Sie "LOAD DATA" verwenden, um Daten aus einer lokalen Datei in eine Hive-Tabelle zu laden. In diesem Fall kopieren Sie die lokale Datei in eine Hive-Tabelle. Wenn Sie diese Tabelle löschen, wird die Kopie der Daten in der internen Tabelle gelöscht, aber die Quelldatei aus dem Befehl "DATEN LADEN" bleibt erhalten.
Prestomation
100

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:

  1. Die Daten werden auch außerhalb von Hive verwendet. Beispielsweise werden die Datendateien von einem vorhandenen Programm gelesen und verarbeitet, das die Dateien nicht sperrt.
  2. Die Daten müssen auch nach einer DROP TABLE am zugrunde liegenden Speicherort verbleiben. Dies kann zutreffen, wenn Sie mehrere Schemas (Tabellen oder Ansichten) auf einen einzelnen Datensatz verweisen oder wenn Sie verschiedene mögliche Schemas durchlaufen.
  3. Sie möchten einen benutzerdefinierten Speicherort wie ASV verwenden.
  4. Hive sollte keine Daten- und Steuerungseinstellungen, Verzeichnisse usw. besitzen. Sie haben ein anderes Programm oder einen anderen Prozess, der diese Dinge erledigt.
  5. Sie erstellen keine Tabelle basierend auf einer vorhandenen Tabelle (AS SELECT).

Verwenden Sie INTERNE Tabellen, wenn:

Die Daten sind vorübergehend.

Sie möchten, dass Hive den Lebenszyklus der Tabelle und der Daten vollständig verwaltet.

Swetha
quelle
2
Mit freundlicher
Anonyme Person
Löscht das Erstellen einer INTERNAL-Tabelle die Daten aus HDFS oder erstellt es eine Kopie und wird ausschließlich für Hive verwendet, wobei die Quelle (HDFS) intakt bleibt?
Luckyluke
@swetha Hallo, ich bin hierher gekommen, weil ich die metastore.db vollständig gelöscht habe, aber die Daten bleiben auf hdfs. Wenn ich also Tabellen zeige, wird nichts angezeigt. Gibt es eine Möglichkeit, die Metadaten neu zu erstellen?
awadhesh14
46

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:

Für externe Tabellen -

  • In einer externen Tabelle werden Dateien auf dem HDFS-Server gespeichert, Tabellen sind jedoch nicht vollständig mit der Quelldatei verknüpft.

  • Wenn Sie eine externe Tabelle löschen, verbleibt die Datei weiterhin auf dem HDFS-Server.

    Als Beispiel, wenn Sie in HIVE mit HIVE-QL eine externe Tabelle mit dem Namen "table_test" erstellen und die Tabelle mit der Datei "file" verknüpfen. , dann wird „table_test“ von HIVE Löschen nicht „Datei“ aus HDFS löschen .

  • Auf externe Tabellendateien kann jeder zugreifen, der Zugriff auf die HDFS-Dateistruktur hat. Daher muss die Sicherheit auf HDFS-Datei- / Ordnerebene verwaltet werden.

  • Metadaten werden auf dem Masterknoten verwaltet, und beim Löschen einer externen Tabelle aus HIVE werden nur die Metadaten gelöscht, nicht die Daten / Dateien.


Für interne Tabellen-

  • In einem Verzeichnis gespeichert, das auf Einstellungen in basiert hive.metastore.warehouse.dir, werden standardmäßig interne Tabellen gespeichert werden im folgende Verzeichnis „/ user / Nest / Lager“ Sie können es ändern , indem Sie den Speicherort in der Konfigurationsdatei zu aktualisieren.
  • Durch Löschen der Tabelle werden die Metadaten und Daten vom Masterknoten bzw. vom HDFS gelöscht.
  • Die Sicherheit interner Tabellendateien wird ausschließlich über HIVE gesteuert. Die Sicherheit muss innerhalb von HIVE verwaltet werden, wahrscheinlich auf Schemaebene (abhängig von der Organisation).

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:

  • Die Daten werden auch außerhalb von Hive verwendet . Beispielsweise werden die Datendateien von einem vorhandenen Programm gelesen und verarbeitet, das die Dateien nicht sperrt.
  • Die Daten müssen auch nach einer DROP TABLE am zugrunde liegenden Speicherort verbleiben.Dies kann zutreffen, wenn Sie mehrere Schemas (Tabellen oder Ansichten) auf einen einzelnen Datensatz verweisen oder wenn Sie verschiedene mögliche Schemata durchlaufen.
  • Hive sollte keine Daten besitzen und Einstellungen, Verzeichnisse usw. . Möglicherweise verfügen Sie über ein anderes Programm oder einen anderen Prozess, der diese Aufgaben ausführt.
  • Sie erstellen keine Tabelle basierend auf einer vorhandenen Tabelle (AS SELECT).

Verwenden Sie INTERNE Tabellen, wenn:

  • Das Daten sind vorübergehend .
  • Sie möchten, dass Hive den Lebenszyklus der Tabelle und der Daten vollständig verwaltet .

Quelle :

HDInsight: Hive Interne und Externe Tabellen Intro

Interne und externe Tabellen in Hadoop-HIVE

Ani Menon
quelle
1
@CapturedTree Aber die Antwort ist nicht korrekt. "Hive verschiebt Daten in sein Lagerverzeichnis." - das ist völlig falsch, aber nicht. Daten werden am Tabellenort gespeichert. Egal extern oder verwaltet.
Links
6

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.

Hadoop-Lernender
quelle
4

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

  • Die Daten der internen (verwalteten) Tabellen werden aus dem HDFS-Dateisystem gelöscht
  • Die Daten der externen Tabellen werden NICHT aus dem HDFS-Dateisystem gelöscht.

(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

  1. Speicherort, der während der Tabellenerstellung definiert wurde
  2. Speicherort, der in der Datenbank- / Schemaerstellung definiert ist, in der die Tabelle erstellt wird.
  3. Standard-Hive-Warehouse-Verzeichnis (Eigenschaft hive.metastore.warehouse.dir in hive.site.xml)

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.

  1. Tabelle mit und ohne Standortoption erstellen
  2. Tabelle mit und ohne Partitionsoption erstellen
  3. Hinzufügen neuer Daten mithilfe der Hive Load and Insert-Anweisungen
  4. Hinzufügen von Datendateien zum Tabellenspeicherort außerhalb von Hive (mithilfe von HDFS-Befehlen) und Aktualisieren der Tabelle mit dem Befehl "MSCK REPAIR TABLE"
  5. Die Tische fallen lassen
NallaAnand
quelle
schöne Erkundung. Dies ist die einzige Antwort, die erklärt wird, wie Hive die Standortoption für interne und externe Tabellen handhabt.
d2207197
3

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.

Ajaykumar
quelle
Ich stoße auf eine Situation, in der das Verzeichnis nach einer DROP TABLE in einer internen Tabelle, die über CREATE TABLE foo (id INT) erstellt wurde, nicht immer gelöscht wird. Die Metadaten sind anscheinend in Ordnung, da SHOW TABLES konsistent ist - die Tabelle wird nach dem Löschen nicht in dieser Liste angezeigt. Verwirrenderweise habe ich manchmal bemerkt, dass das Verzeichnis / is / gelöscht wurde, aber ich kann das nicht konsequent neu erstellen. Irgendwelche Ideen?
Matthew Cornell
Werden die Berechtigungen der Tabellen überprüft? Möglicherweise haben Sie den Besitz des Speicherorts in HDFS auf einen anderen Benutzer geändert.
Milind Jindal
1

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.

Muthu Palaniappan
quelle
1

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

user3485352
quelle
1

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.

Urvishsinh Mahida
quelle
1

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 nUnterprotokolldateien auszuspucken (z. B. enthält jede Unterprotokolldatei ein bestimmtes Nachrichtentypprotokoll), und die Ausgabe, dh nUnterprotokolldateien, 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.

Suresh Vadali
quelle
1

Der beste Anwendungsfall für eine externe Tabelle in der Struktur ist, wenn Sie die Tabelle aus einer CSV- oder Textdatei erstellen möchten

anubhav
quelle
0

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

user5080458
quelle
0

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.

Sayat Satybald
quelle
0

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.

Ankit Nandwal
quelle
0

INTERN : Tabelle erstellt Erste und Daten geladen werden später

EXTERN : Daten sind vorhanden und eine Tabelle wird darüber erstellt .

Prasad L.
quelle
0

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.

Harsimranjit Singh Kler
quelle
0

Das möchte ich hinzufügen

  1. Interne Tabellen werden verwendet, wenn die Daten aktualisiert oder einige Zeilen gelöscht werden müssen, da ACID-Eigenschaften in den internen Tabellen unterstützt werden können, ACID-Eigenschaften jedoch in den externen Tabellen nicht unterstützt werden können.
  2. Stellen Sie sicher, dass die Daten in der internen Tabelle gesichert sind. Wenn eine interne Tabelle gelöscht wird, gehen auch die Daten verloren.
Jatin
quelle
-2

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.

Sonu
quelle