it-swarm.com.de

Unterschied zwischen internen und externen Hive-Tabellen?

Kann mir jemand den Unterschied zwischen der externen und der internen Tabelle von Hive erklären? Ich weiß, der Unterschied ergibt sich, wenn man den Tisch fallen lässt. Ich verstehe nicht, was Sie damit meinen, dass Daten und Metadaten in internen und nur Metadaten in externen Tabellen gelöscht werden. Kann mir jemand bitte in Bezug auf Knoten erklären.

101
DrewRose

Hive verfügt auf dem Masterknoten über eine relationale Datenbank, mit der der Status verfolgt wird. Wenn Sie beispielsweise CREATE TABLE FOO(foo string) LOCATION 'hdfs://tmp/'; eingeben, 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, Partitionslisten zu verwenden, ohne das Dateisystem aufzurufen und nach ihnen zu suchen usw.). Diese Art von Dingen sind die "Metadaten".

Wenn Sie eine interne Tabelle löschen, werden sowohl die Daten als 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. Es berührt die Daten selbst nicht.

105
prestomation

Hive-Tabellen können als EXTERN oder INTERN erstellt werden. Diese Auswahl wirkt sich darauf aus, 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. Daten müssen auch nach einem DROP TABLE an der zugrunde liegenden Position verbleiben. Dies kann zutreffen, wenn Sie mehrere Schemas (Tabellen oder Ansichten) auf einen einzelnen Datensatz verweisen oder verschiedene mögliche Schemas durchlaufen.
  3. Sie möchten einen benutzerdefinierten Speicherort wie ASV verwenden.
  4. Hive sollte keine eigenen Daten- und Steuerungseinstellungen, Verzeichnisse usw. haben, 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 temporär.

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

93
swetha

Um Ihnen die Frage zu beantworten:

Bei externen Tabellen werden die Daten von Hive nicht in das Warehouse-Verzeichnis verschoben. Wenn die externe Tabelle gelöscht wird, werden die Tabellenmetadaten gelöscht, jedoch nicht die Daten.

Bei internen Tabellen verschiebt Hive Daten in sein Warehouse-Verzeichnis. Wenn die Tabelle gelöscht wird, werden die Tabellenmetadaten und die Daten gelöscht.


Zu Ihrer Information

Unterschied zwischen internen und externen Tabellen:

Für externe Tabellen -

  • Externe Tabelle speichert Dateien auf dem HDFS-Server, 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 eine externe Tabelle mit dem Namen "table_test" in erstellen Hive mit Hive-QL und verknüpfe die Tabelle mit der Datei "file" , lösche dann "table_test" ”Von Hive löscht keine“ Datei ”von HDFS.

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

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


Für interne Tabellen -

  • Gespeichert in einem Verzeichnis basierend auf den Einstellungen in Hive.metastore.warehouse.dir, Standardmäßig werden interne Tabellen gespeichert im folgenden Verzeichnis = “/ user/Hive/warehouse” Sie können es ändern, indem Sie den Speicherort in der Konfigurationsdatei aktualisieren.
  • Durch Löschen der Tabelle werden die Metadaten und Daten vom Masterknoten bzw. HDFS gelöscht.
  • Die Sicherheit der internen Tabellendateien wird ausschließlich über Hive gesteuert. Die Sicherheit muss in Hive verwaltet werden, wahrscheinlich auf Schemaebene (abhängig von der Organisation).

Hive verfügt möglicherweise über interne oder externe Tabellen. Diese Auswahl bestimmt, 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.
  • Daten müssen auch nach einem DROP TABLE an der zugrunde liegenden Position verbleiben. Dies kann zutreffen, wenn Sie mehrere Schemas (Tabellen oder Ansichten) auf einzelne Daten verweisen gesetzt oder wenn Sie durch verschiedene mögliche Schema iterieren.
  • Hive sollte keine Daten besitzen und Einstellungen, Verzeichnisse usw. nicht kontrollieren . Möglicherweise haben Sie ein anderes Programm oder einen anderen Prozess, der diese Dinge erledigt.
  • Sie erstellen keine Tabelle basierend auf einer vorhandenen Tabelle (AS SELECT).

Verwenden Sie INTERNE Tabellen, wenn:

  • Die Daten sind temporär .
  • Sie möchten, dass Hive den Lebenszyklus der Tabelle und der Daten vollständig verwaltet .

Quelle :

HDInsight: Hive Internal und External Tables Intro

Interne und externe Tabellen in Hadoop-Hive

40
Ani Menon

Interne Tabellendaten werden im Warehouse-Ordner gespeichert, während externe Tabellendaten an dem Speicherort 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 wird jedoch nur das Schema gelöscht, das Sie verlieren.

Wenn Sie also eine externe Tabelle nach dem Löschen wiederherstellen möchten, können Sie erneut eine Tabelle mit demselben Schema erstellen und auf den ursprünglichen Datenspeicherort verweisen. Hoffe es ist jetzt klar.

4
Hadoop Learner

Wenn Sie externe Tabellen löschen, wird nur das Schema der Tabelle gelöscht. Tabellendaten sind am physischen Speicherort vorhanden. Um die Daten zu löschen, benutze hadoop fs - rmr tablename. Managed Table Hive hat die volle Kontrolle über Tabellen. In externen Tabellen haben Benutzer die Kontrolle darüber.

3
Ajaykumar

Der einzige Unterschied im Verhalten (nicht die beabsichtigte Verwendung), der auf meinen bisher begrenzten Recherchen und Tests (mit Hive 1.1.0 -cdh5.12.0) beruht, scheint darin zu liegen, dass eine Tabelle gelöscht wird

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

(HINWEIS: Siehe Abschnitt 'Verwaltete und externe Tabellen' in https://cwiki.Apache.org/confluence/display/Hive/LanguageManual+DDL der andere Unterschiede auflisten, die ich nicht ganz verstanden habe)

Ich glaube, Hive wählt den Ort, an dem die Tabelle erstellt werden soll, basierend auf der folgenden Rangfolge von oben nach unten

  1. Position, die während der Tabellenerstellung definiert wurde
  2. Position, die 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 "Speicherort" 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: Möglicherweise habe ich einige Szenarien verpasst, aber aufgrund meiner eingeschränkten Untersuchung scheint das Verhalten der internen und der externen Tabelle bis auf den oben beschriebenen Unterschied (Löschen von Daten) dasselbe zu sein. Ich habe die folgenden Szenarien für interne und externe Tabellen ausprobiert.

  1. Erstellen einer Tabelle mit und ohne Standortoption
  2. Erstellen einer Tabelle mit und ohne Partitionsoption
  3. Hinzufügen neuer Daten mithilfe der Hive Load- und Insert-Anweisungen
  4. Hinzufügen von Datendateien zum Tabellenverzeichnis außerhalb von Hive (mithilfe von HDFS-Befehlen) und Aktualisieren der Tabelle mithilfe des Befehls "MSCK REPAIR TABLE"
  5. Die Tische fallen lassen
2
NallaAnand

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

1
anubhav

Stellen Sie sich das folgende Szenario vor, das für External Table am besten geeignet ist:

Ein MapReduce (MR) -Job filtert eine große Protokolldatei, um n Unterprotokolldateien auszuspucken (z. B. jede Unterprotokolldatei enthält ein bestimmtes Protokoll des Nachrichtentyps) und die Ausgabe, dh n Unterprotokolldateien in hdfs gespeichert.

Diese Protokolldateien sollen in Hive-Tabellen geladen werden, um weitere Analysen durchzuführen. In diesem Szenario würde ich eine externe Tabelle (n) empfehlen, da die eigentlichen Protokolldateien von einem externen Prozess erstellt werden und sich im Besitz eines MR-Jobs befinden. Außerdem können Sie einen MR-Job vermeiden Zusätzlicher Schritt zum Laden jeder generierten Protokolldatei in die jeweilige Hive-Tabelle.

1
Suresh Vadali

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 Umfang kann zeitaufwändig sein. Wenn Sie eine "verwaltete" Tabelle löschen, werden die Daten von Hive ebenfalls verworfen. Wenn Sie eine externe Tabelle löschen, wird nur die Schemadefinition aus dem Hive-Metaspeicher entfernt. Die Daten auf dem HDFS bleiben weiterhin erhalten.

1

Die externe Hive-Tabelle hat den Vorteil, dass beim Löschen von Tabellen keine Dateien entfernt werden. Wir können Zeilenformate mit unterschiedlichen Einstellungen festlegen, z. B. serde .... delimited

1
user3485352

Interne Tabellen sind nützlich, wenn Hive den gesamten Lebenszyklus Ihrer Daten einschließlich des Löschvorgangs verwalten soll, während externe Tabellen nützlich sind, wenn die Dateien außerhalb von Hive verwendet werden.

1

Hive speichert nur die Metadaten im Metastore und die Originaldaten außerhalb von Hive, wenn wir eine externe Tabelle verwenden. Dadurch können wir den Speicherort angeben. Unsere Originaldaten wirken sich nicht aus, wenn wir die Tabelle löschen

0
user5080458

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 gemeinsame Nutzung mit anderen Tools weniger geeignet. 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 den Besitz der Daten übertragen.

Zu diesem Zeitpunkt ist eine externe Tabelle definiert, die auf diese Daten verweist, jedoch keine Inhaberschaft dafür übernimmt.

0
Ankit Nandwal

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 Warehouse-Verzeichnisses befinden. Durch das Löschen externer Tabellen werden Metadaten gelöscht, jedoch nicht die Daten.

Wenn bereits Daten in HDFS vorhanden sind, kann eine externe Hive-Tabelle erstellt werden, um die Daten zu beschreiben. Der Name lautet EXTERNAL, da die Daten in der externen Tabelle in den LOCATION-Eigenschaften anstelle des Standard-Warehouse-Verzeichnisses angegeben werden.

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 jedoch beibehalten. In den meisten Fällen wird eine externe Tabelle bevorzugt, um zu vermeiden, dass Daten versehentlich zusammen mit Tabellen gelöscht werden.

0
Sayat Satybald