Czy ktoś może mi powiedzieć, jaka jest różnica między tabelą zewnętrzną Hive a tabelami wewnętrznymi. Wiem, że różnica pojawia się, gdy upuszczasz stół. Nie rozumiem, co masz na myśli, mówiąc, że dane i metadane są usuwane w wewnętrznych, a tylko metadane są usuwane z tabel zewnętrznych. Czy ktoś może mi wyjaśnić w zakresie węzłów?
110
Tabele gałęzi można tworzyć 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 EXTERNAL, gdy:
Użyj tabel WEWNĘTRZNYCH, gdy:
źródło
Aby odpowiedzieć na pytanie:
W przypadku tabel zewnętrznych gałąź Hive przechowuje dane w LOKALIZACJI określonej podczas tworzenia tabeli (zazwyczaj nie w katalogu hurtowni). Jeśli tabela zewnętrzna zostanie usunięta, metadane tabeli zostaną usunięte, ale nie dane.
W przypadku tabel wewnętrznych Hive przechowuje dane w swoim katalogu magazynu. Jeśli tabela zostanie usunięta, zarówno metadane tabeli, jak i dane zostaną usunięte.
W celach informacyjnych,
Różnica między tabelami wewnętrznymi i zewnętrznymi:
Hive może mieć tabele wewnętrzne lub zewnętrzne, jest to wybór wpływający na sposób ładowania, kontrolowania i zarządzania danymi.
Użyj tabel EXTERNAL, gdy:
Użyj tabel WEWNĘTRZNYCH, gdy:
Źródło :
HDInsight: wprowadzenie do tabel wewnętrznych i zewnętrznych gałęzi Hive
Stoły wewnętrzne i zewnętrzne w Hadoop-HIVE
źródło
Dane tabeli wewnętrznej są przechowywane w folderze hurtowni, natomiast dane tabeli zewnętrznej są przechowywane w miejscu, które wskazałeś podczas tworzenia tabeli.
Więc kiedy usuwasz wewnętrzną tabelę, usuwa ona zarówno schemat, jak i dane w folderze hurtowni, ale w przypadku tabeli zewnętrznej stracisz tylko schemat.
Jeśli więc po usunięciu chcesz odzyskać tabelę zewnętrzną, możesz ponownie utworzyć tabelę z tym samym schematem i wskazać pierwotną lokalizację danych. Mam nadzieję, że teraz jest jasne.
źródło
Jedyna różnica w zachowaniu (nie zamierzonym użyciu) oparta na moich ograniczonych badaniach i testach do tej pory (przy użyciu Hive 1.1.0 -cdh5.12.0) wydaje się polegać na tym, że po upuszczeniu tabeli
(UWAGA: patrz sekcja „Tabele zarządzane i zewnętrzne” w https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL, w której wymieniono inne różnice, których nie do końca rozumiem)
Uważam, że Hive wybiera lokalizację, w której musi utworzyć tabelę, na podstawie następującego pierwszeństwa od góry do dołu
Jeśli opcja „Lokalizacja” nie jest używana podczas „tworzenia tabeli gałęzi”, stosowana jest powyższa reguła pierwszeństwa. Dotyczy to zarówno tabel wewnętrznych, jak i zewnętrznych. Oznacza to, że tabela wewnętrzna niekoniecznie musi znajdować się w katalogu magazynu i może znajdować się w dowolnym innym miejscu.
Uwaga: mogłem przegapić niektóre scenariusze, ale w oparciu o moją ograniczoną eksplorację, zachowanie zarówno tabeli wewnętrznej, jak i zewnętrznej wydaje się być takie samo, z wyjątkiem jednej różnicy (usuwanie danych) opisanej powyżej. Wypróbowałem następujące scenariusze zarówno dla tabel wewnętrznych, jak i zewnętrznych.
źródło
W tabelach zewnętrznych, jeśli go upuścisz, usunie tylko schemat tabeli, dane tabeli istnieją w fizycznej lokalizacji. Aby usunąć dane, użyj hadoop fs - rmr tablename. Zarządzana gałąź tabeli będzie mieć pełną kontrolę nad tabelami. W zewnętrznych tabelach użytkownicy będą mieli nad tym kontrolę.
źródło
Tabele wewnętrzne są przydatne, jeśli chcesz, aby Hive zarządzał całym cyklem życia danych, w tym ich usuwaniem, podczas gdy tabele zewnętrzne są przydatne, gdy pliki są używane poza programem Hive.
źródło
Zewnętrzna tabela gałęzi ma zalety polegające na tym, że nie usuwa plików, gdy usuwamy tabele, możemy ustawić formaty wierszy z różnymi ustawieniami, takimi jak serde .... delimited
źródło
Należy również pamiętać, że Hive to hurtownia dużych zbiorów danych. Gdy chcesz upuścić tabelę, nie chcesz stracić gigabajtów lub terabajtów danych. Generowanie, przenoszenie i kopiowanie danych na taką skalę może być czasochłonne. Po upuszczeniu gałęzi tabeli „Zarządzana” również dane zostaną usunięte. Po usunięciu tabeli „Zewnętrzna” usuwana jest tylko definicja schematu z meta-magazynu gałęzi. Dane na temat hdfs wciąż pozostają.
źródło
Rozważ ten scenariusz, który najlepiej pasuje do tabeli zewnętrznej:
Zadanie MapReduce (MR) filtruje ogromny plik dziennika, aby wypluć
n
podrzędne pliki dziennika (np. Każdy podrzędny plik dziennika zawiera określony typ komunikatu), a dane wyjściowe, tjn
. Podrzędne pliki dziennika, są przechowywane w plikach hdf.Te pliki dziennika mają być ładowane do tabel programu Hive w celu przeprowadzenia dalszych analiz. W tym scenariuszu zalecałbym tabelę zewnętrzną (tabele zewnętrzne), ponieważ rzeczywiste pliki dziennika są generowane i są własnością zewnętrznego procesu, tj. Zadania MR, poza tym można uniknąć dodatkowy krok ładowania każdego wygenerowanego pliku dziennika również do odpowiedniej tabeli Hive.
źródło
Najlepszym przypadkiem użycia zewnętrznej tabeli w gałęzi jest utworzenie tabeli z pliku CSV lub tekstowego
źródło
hive przechowuje tylko metadane w metastore, a oryginalne dane poza ulem, gdy używamy tabeli zewnętrznej, możemy podać lokalizację '' przez te nasze oryginalne dane nie będą miały wpływu, gdy usuniemy tabelę
źródło
Gdy dane są już w HDFS, można utworzyć zewnętrzną tabelę Hive w celu opisania danych. Nazywa się EXTERNAL, ponieważ dane w tabeli zewnętrznej są określone we właściwościach LOCATION zamiast w domyślnym katalogu hurtowni.
Przechowując dane w tabelach wewnętrznych, Hive w pełni zarządza cyklem życia tabeli i danych. Oznacza to, że dane są usuwane po usunięciu wewnętrznej tabeli. Jeśli tabela zewnętrzna zostanie usunięta, metadane tabeli zostaną usunięte, ale dane pozostaną. W większości przypadków preferowana jest tabela zewnętrzna, aby uniknąć przypadkowego usuwania danych wraz z tabelami.
źródło
W przypadku tabel zarządzanych Hive kontroluje cykl życia ich danych. Hive przechowuje dane tabel zarządzanych w podkatalogu w katalogu zdefiniowanym domyślnie przez hive.metastore.warehouse.dir.
Kiedy usuwamy tabelę zarządzaną, Hive usuwa dane z tabeli, ale tabele zarządzane są mniej wygodne do udostępniania innym narzędziom. Na przykład, powiedzmy, że mamy dane, które są tworzone i używane głównie przez Pig, ale chcemy uruchomić dla nich kilka zapytań, ale nie dać Hive własności danych.
W tym czasie zdefiniowano tabelę zewnętrzną, która wskazuje na te dane, ale nie przejmuje ich na własność.
źródło
WEWNĘTRZNE : tabela jest tworzona jako pierwsza, a dane są ładowane później
ZEWNĘTRZNE : dane są obecne, a na nich tworzona jest tabela .
źródło
W Hive możemy również stworzyć tabelę zewnętrzną. Informuje Hive, aby odwołał się do danych znajdujących się w istniejącej lokalizacji poza katalogiem hurtowni. Usunięcie tabel zewnętrznych spowoduje usunięcie metadanych, ale nie danych.
źródło
Chciałbym to dodać
źródło
Krótko mówiąc, są dwie rzeczy:
Hive może zarządzać elementami w hurtowni, tj. Nie usuwa danych z magazynu. Kiedy usuwamy tabelę:
1) W przypadku tabel wewnętrznych dane są zarządzane wewnętrznie w hurtowni. Więc zostanie usunięty.
2) W przypadku tabel zewnętrznych dane są zarządzane wiecznie z magazynu. Nie można więc go usunąć, a klienci inni niż hive również mogą go używać.
źródło