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ę.
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.
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:
- 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.
- 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.
- chcesz użyć niestandardowej lokalizacji, takiej jak ASV.
- Hive nie powinien posiadać danych i ustawień sterowania, dirs itp., masz 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, aby Hive całkowicie zarządzał cyklem życia tabela i dane.
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:
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.
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ę.
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.
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
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ą.
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.
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
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
- Lokalizacja zdefiniowana podczas tworzenia tabeli
- Lokalizacja zdefiniowana w tworzeniu bazy danych/schematu, w którym tworzona jest tabela.
- 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.
- Tworzenie tabeli z opcją lokalizacji i bez niej
- Tworzenie tabeli z i bez opcji partycji
- Dodawanie nowych danych za pomocą instrukcji Hive Load i Insert
- Dodawanie plików danych do lokalizacji tabeli poza Hive (za pomocą poleceń HDFS) i odświeżanie tabeli za pomocą " MSCK REPAIR TABLE polecenie
- opuszczanie tabel
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.
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
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.
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.
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.
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.
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ć.
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