Różnica między tabelami wewnętrznymi ula a tabelami zewnętrznymi?

Czy ktoś może mi powiedzieć jaka jest różnica między tabelą zewnętrzną ula a tabelą wewnętrzną. Wiem, że różnica przychodzi, gdy upuszcza stół. Nie rozumiem, co masz na myśli przez Dane i metadane są usuwane w wewnętrznych i tylko metadane są usuwane w tabelach zewnętrznych. Czy ktoś może mi wyjaśnić w kategoriach węzłów proszę.

Author: Kim Moritz, 2013-06-11

18 answers

Hive ma relacyjną bazę danych na głównym węźle, której używa do śledzenia stanu. Na przykład, gdy CREATE TABLE FOO(foo string) LOCATION 'hdfs://tmp/';, schemat tabeli jest przechowywany w bazie danych.

Jeśli masz partycjonowaną tabelę, partycje są przechowywane w bazie danych (pozwala to hive używać list partycji bez przechodzenia do systemu plików i znajdowania ich, itd.). Tego rodzaju rzeczy są "metadane".

Kiedy upuszczasz wewnętrzną tabelę, ona upuszcza dane, a także metadane.

Gdy upuszczasz zewnętrzną tabelę, upuszcza ona tylko metadane. To znaczy, że hive nie zna tych danych. Nie dotyka samych danych.

 89
Author: prestomation,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-09 21:02:49

Tablice Hive mogą być tworzone jako zewnętrzne lub wewnętrzne. Jest to wybór, który wpływa na sposób ładowania, kontrolowania i zarządzania danymi.

Użyj tabel zewnętrznych, gdy:

  1. Dane są również używane poza Hive. Na przykład pliki danych są odczytywane i przetwarzane przez istniejący program, który nie blokuje plików.
  2. Dane muszą pozostać w lokalizacji bazowej nawet po tabeli DROP. Może to mieć zastosowanie w przypadku Wskazywania wielu schematów (tabel lub widoków) na jednym zestaw danych lub jeśli iteracja przez różne możliwe Schematy.
  3. chcesz użyć niestandardowej lokalizacji, takiej jak ASV.
  4. Hive nie powinien posiadać danych i ustawień sterowania, dirs itp., masz inny program lub proces, który zrobi te rzeczy.
  5. nie tworzysz tabeli w oparciu o istniejącą tabelę (jako SELECT).

Użyj tabel wewnętrznych, gdy:

Dane są tymczasowe.

Chcesz, aby Hive całkowicie zarządzał cyklem życia tabela i dane.

 84
Author: swetha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-12 03:34:43

Aby odpowiedzieć na pytanie:

Dla tabel zewnętrznych ,Hive nie przenosi danych do katalogu magazynu. Jeśli zewnętrzna tabela zostanie upuszczona, wtedy metadane tabeli zostaną usunięte, ale nie dane.

Dla tabel wewnętrznych , Hive przenosi dane do katalogu magazynu. Jeśli tabela zostanie upuszczona, wtedy metadane tabeli i dane zostaną usunięte.


W celach informacyjnych,

Różnica między tabelami wewnętrznymi i zewnętrznymi:

Dla Tabel Zewnętrznych -

  • Tabela zewnętrzna przechowuje pliki na serwerze HDFS, ale tabele nie są całkowicie połączone z plikiem źródłowym.

  • Jeśli usuniesz zewnętrzną tabelę, plik nadal pozostanie na serwerze HDFS.

    Jako przykład, jeśli utworzysz zewnętrzną tabelę o nazwie "table_test" w HIVE za pomocą HIVE-QL i połączysz tabelę z plikiem "", wtedy usunięcie "table_test" z HIVE ' a nie usuń "plik" z HDFS.

  • Zewnętrzne Pliki tabeli są dostępne dla każdego, kto ma dostęp do struktury plików HDFS, a zatem bezpieczeństwo musi być zarządzane w HDFS poziom plików / folderów.

  • Metadane są utrzymywane w głównym węźle, a usunięcie zewnętrznej tabeli z HIVE usuwa tylko metadane,a nie dane / plik.


Dla Tabel Wewnętrznych -

  • przechowywane w katalogu opartym on settings in hive.metastore.warehouse.dir, domyślnie przechowywane są tabele wewnętrzne w następującym katalogu "/user / hive / warehouse" możesz ją zmienić, aktualizując lokalizację w pliku konfiguracyjnym .
  • usunięcie tabeli powoduje usunięcie metadanych i danych odpowiednio z węzła głównego i HDFS.
  • wewnętrzne zabezpieczenie pliku tabeli jest kontrolowane wyłącznie przez HIVE. Zabezpieczeniami trzeba zarządzać w HIVE, prawdopodobnie na poziomie schematu (zależy on organizacji).

Hive może mieć wewnętrzne lub zewnętrzne tabele, jest to wybór, który wpływa na to, jak dane są ładowane, kontrolowane i zarządzane.

Użyj tabel zewnętrznych, gdy:

  • Dane są również używane poza ulem . Na przykład pliki danych są odczytywane i przetwarzane przez istniejący program, który nie blokuje plików.
  • dane muszą pozostać w lokalizacji bazowej nawet po tabeli DROP. może to dotyczyć jeśli wskazujesz wiele schematów (tabel lub widoków) na jeden zestaw danych lub jeśli powtarzasz różne możliwe Schematy.
  • Hive nie powinien posiadać danych i sterować ustawieniami, katalogami itp., możesz mieć inny program lub proces, który zrobi te rzeczy.
  • nie tworzysz tabeli w oparciu o istniejącą tabelę (jako SELECT).

Użyj tabel wewnętrznych, gdy:

  • Dane są tymczasowe .
  • chcesz Hive całkowicie zarządzać cyklem życia tabeli i danych.

Źródło:

HDInsight: Hive Wewnętrzne I Zewnętrzne tabele Intro

Tabele Wewnętrzne I Zewnętrzne w Hadoop-HIVE

 32
Author: Ani Menon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-19 10:49:42

Wewnętrzne dane tabeli przechowują się w folderze magazynu, zewnętrzne dane tabeli wskazują lokalizację wymienioną podczas tworzenia tabeli. więc po usunięciu wewnętrznej tabeli usuwa schemat, jak również dane w folderze magazyn, ale w tabeli zewnętrznej jego tylko schemat będzie luźne. Więc kiedy chcesz tabeli z powrotem można skrzyni tabeli ze schematem ponownie i wskazać lokalizację . Mam nadzieję, że teraz jest jasne.

 4
Author: Hadoop Learner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-09 13:12:24

W tabelach zewnętrznych, jeśli go upuścisz, usunie tylko schemat tabeli, Dane tabeli istnieją w fizycznej lokalizacji. Tak aby usunąć dane użyj hadoop FS-RMR tablename . Zarządzany UL stołowy będzie miał pełną kontrolę nad stołami. W tabelach zewnętrznych użytkownicy będą mieli nad nią kontrolę.

 2
Author: Ajaykumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-24 18:05:05

Tabele wewnętrzne są przydatne, jeśli chcesz, aby Hive zarządzał całym cyklem życia Twoich danych, w tym usuwaniem, podczas gdy tabele zewnętrzne są przydatne, gdy pliki są używane poza Hive.

 1
Author: Muthu Palaniappan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-24 21:48:57

Zewnętrzna tabela hive ma tę zaletę, że nie usuwa plików, gdy upuszczamy tabele, możemy ustawić formaty wierszy z różnymi ustawieniami, np. serde....delimited

 1
Author: user3485352,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-03 09:55:09

Należy również pamiętać, że Hive to duża hurtownia danych. Kiedy chcesz upuścić tabelę, nie chcesz stracić gigabajtów lub terabajtów danych. Generowanie, przenoszenie i kopiowanie danych w tej skali może być czasochłonne. Kiedy upuścisz' zarządzany ' UL tabeli będzie również tracić swoje dane. Po zrzuceniu 'zewnętrznej' tabeli usuwa się tylko definicję schematu z hive meta-store. Dane dotyczące hdfs nadal pozostają.

 1
Author: Urvishsinh Mahida,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-02 16:21:54

Rozważ ten scenariusz, który najlepiej pasuje do zewnętrznej Tabeli:

Zadanie MapReduce (MR) filtruje ogromny plik dziennika, aby wypluć pliki sub logów n (np. każdy plik sub log zawiera dziennik określonego typu wiadomości), a wyjściowe pliki sub logów n są przechowywane w hdfs.

Te pliki logów mają być załadowane do tabel Hive w celu przeprowadzenia dalszej analizy, w tym scenariuszu polecam zewnętrzną tabelę(Y), ponieważ rzeczywiste pliki logów są generowane i należą do zewnętrznego proces tj. zadanie MR poza tym można uniknąć dodatkowego kroku ładowania każdego wygenerowanego pliku dziennika do odpowiedniej tabeli Hive.

 1
Author: Suresh Vadali,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-25 01:07:12

Najlepszy przypadek użycia dla zewnętrznej tabeli w ulu jest wtedy, gdy chcesz utworzyć tabelę z pliku CSV lub tekstu

 1
Author: anubhav,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-25 12:36:45

Jedyną różnicą w zachowaniu (nie zamierzonym użyciu) na podstawie moich ograniczonych badań i testów do tej pory (używając Hive 1.1.0-cdh5.12.0) wydaje się być to, że gdy tabela zostanie odrzucona

  • Dane wewnętrznych tabel (zarządzanych) są usuwane z systemu plików HDFS
  • podczas gdy dane z zewnętrznych tabel nie są usuwane z systemu plików HDFS.

(uwaga: patrz sekcja 'zarządzane i zewnętrzne tabele' w https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL które wymieniają jakąś inną różnicę, której do końca nie rozumiałem)

Uważam, że Hive wybiera miejsce, w którym musi utworzyć tabelę w oparciu o następujący priorytet od góry do dołu

  1. Lokalizacja zdefiniowana podczas tworzenia tabeli
  2. Lokalizacja zdefiniowana w tworzeniu bazy danych/schematu, w którym tworzona jest tabela.
  3. Domyślny Katalog Magazynu Hive (Właściwość hive.metastore.magazyn.dir in hive.miejscu.xml)

Gdy opcja " Location "nie jest używana podczas" tworzenia tabeli hive", używana jest powyższa reguła pierwszeństwa. Dotyczy to zarówno tabel wewnętrznych, jak i zewnętrznych. Oznacza to, że wewnętrzna tabela niekoniecznie musi znajdować się w katalogu magazynu i może znajdować się w dowolnym innym miejscu.

Uwaga: mogłem pominąć kilka scenariuszy, ale opierając się na moich ograniczonych badaniach, zachowanie zarówno wewnętrznej, jak i rozszerzalnej tabeli wydaje się być taka sama, z wyjątkiem jednej różnicy (usuwanie danych) opisanej powyżej. Wypróbowałem następujące scenariusze dla tabel wewnętrznych i zewnętrznych.

  1. Tworzenie tabeli z opcją lokalizacji i bez niej
  2. Tworzenie tabeli z i bez opcji partycji
  3. Dodawanie nowych danych za pomocą instrukcji Hive Load i Insert
  4. Dodawanie plików danych do lokalizacji tabeli poza Hive (za pomocą poleceń HDFS) i odświeżanie tabeli za pomocą " MSCK REPAIR TABLE polecenie
  5. opuszczanie tabel
 1
Author: NallaAnand,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-30 06:58:10

Tabela zewnętrzna jest tabelą, dla której Hive nie zarządza pamięcią masową. Jeśli usuniesz zewnętrzną tabelę, usunie się tylko definicję w Hive. Dane pozostają. Tabela wewnętrzna to tabela, którą zarządza Hive. Jeśli usuniesz wewnętrzną tabelę, zarówno definicja w Hive, jak i dane zostaną usunięte.

 1
Author: Sujith AK,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-17 07:32:16

Hive przechowuje tylko meta dane w metastore i oryginalne dane w out side of hive kiedy używamy zewnętrznej tabeli możemy podać lokalizację '' przez te nasze oryginalne dane nie będą efekt kiedy spadniemy tabeli

 0
Author: user5080458,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-04 13:09:01

Gdy dane są już w HDFS, można utworzyć zewnętrzną tabelę Hive w celu opisania danych. Jest wywoływana jako EXTERNAL, ponieważ dane w tabeli external są określone we właściwościach LOCATION zamiast domyślnego katalogu magazynu.

Podczas przechowywania danych w wewnętrznych tabelach, Hive w pełni zarządza cyklem życia tabeli i danych. Oznacza to, że dane są usuwane po upuszczeniu wewnętrznej tabeli. Jeśli zewnętrzna tabela zostanie upuszczona, metadane tabeli zostaną usunięte, ale dane są przechowywane. W większości przypadków preferowana jest tabela Zewnętrzna, aby przez pomyłkę uniknąć usuwania danych wraz z tabelami.

 0
Author: Sayat Satybald,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-18 12:56:04

Dla zarządzanych tabel, Hive kontroluje cykl życia ich danych. Hive przechowuje dane dla zarządzanych tabel w podkatalogu pod katalogiem zdefiniowanym przez hive.metastore.magazyn.domyślnie dir.

Gdy upuszczamy zarządzaną tabelę, Hive usuwa dane z tabeli.Ale zarządzane tabele są mniej wygodne do udostępniania z innymi narzędziami. Na przykład, powiedzmy, że mamy dane, które są tworzone i używane głównie przez Pig, ale chcemy uruchomić kilka zapytań przeciwko nim, ale nie dać własności Hive danych.

W tym czasie zdefiniowana jest zewnętrzna tabela, która wskazuje na te dane, ale nie przejmuje ich własności.

 0
Author: Ankit Nandwal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-05 06:37:30

W Hive możemy również utworzyć zewnętrzną tabelę. Mówi Hive, aby odnosić się do danych, które znajdują się w istniejącej lokalizacji poza katalogiem magazynu. Upuszczanie tabel zewnętrznych spowoduje usunięcie metadanych, ale nie danych.

 0
Author: Harsimranjit Singh Kler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-30 08:37:04

Wewnętrzne : Tabela zostanie utworzona Najpierw, A Dane zostaną załadowane Później

Zewnętrzne : Dane to obecne, A Tabela to utworzone na jej szczycie.

 -1
Author: Prasad L,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-26 19:21:56

W prostych słowach są dwie rzeczy:

Hive może zarządzać rzeczami w magazynie, tzn. nie usunie danych z magazynu. Kiedy usuniemy tabelę:

1) dla tabel wewnętrznych dane są zarządzane wewnętrznie w magazynie. Więc zostaną usunięte.

2) dla tabel zewnętrznych dane są zarządzane z magazynu. Więc nie można go usunąć, a klienci inni niż hive również mogą z niego korzystać.

 -2
Author: Sonu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-15 12:17:40