Migrowanie obciążeń usługi Azure HDInsight 3.6 Hive do usługi HDInsight 4.0
Usługa HDInsight 4.0 ma kilka zalet w usłudze HDInsight 3.6. Oto omówienie nowości w usłudze HDInsight 4.0.
W tym artykule opisano kroki migracji obciążeń hive z usługi HDInsight 3.6 do 4.0, w tym
- Uaktualnianie kopii i schematu magazynu metadanych Hive
- Sejf migracji pod kątem zgodności ACID
- Zachowywanie zasad zabezpieczeń programu Hive
Nowe i stare klastry usługi HDInsight muszą mieć dostęp do tych samych kont magazynu.
Migracja tabel programu Hive do nowego konta magazynu wymaga wykonania oddzielnego kroku. Zobacz Migracja programu Hive między kontami magazynu.
Zmiany w programie Hive 3 i co nowego:
Zmiany klienta Hive
Hive 3 obsługuje tylko klienta elastycznego, beeline do uruchamiania zapytań i poleceń administracyjnych programu Hive z wiersza polecenia. Usługa Beeline używa połączenia JDBC z serwerem HiveServer do wykonywania wszystkich poleceń. Analizowanie, kompilowanie i wykonywanie operacji odbywa się w programie HiveServer.
Wprowadzono obsługiwane polecenia interfejsu wiersza polecenia programu Hive przez wywołanie metody Beeline przy użyciu słowa kluczowego Hive jako użytkownika programu Hive lub wywołanie linii beeline przy użyciu polecenia beeline -u <JDBC URL>
. Adres URL JDBC można uzyskać ze strony Ambari Hive.
Użycie rozwiązania Beeline (zamiast grubego interfejsu wiersza polecenia hive klienta, który nie jest już obsługiwany) ma kilka zalet, w tym:
- Zamiast obsługiwać całą bazę kodu Hive, można obsługiwać tylko klienta JDBC.
- Obciążenie uruchamiania jest niższe przy użyciu rozwiązania Beeline, ponieważ cała baza kodu Hive nie jest zaangażowana.
Można również wykonać skrypt hive, który znajduje się w katalogu "/usr/bin", który wywołuje połączenie beeline przy użyciu adresu URL JDBC.
Architektura klienta elastycznego ułatwia zabezpieczanie danych w programie
- Stan sesji, wewnętrzne struktury danych, hasła itd. znajdują się na kliencie zamiast na serwerze.
- Niewielka liczba demonów wymaganych do wykonywania zapytań upraszcza monitorowanie i debugowanie.
Serwer HiveServer wymusza ustawienia listy dozwolonych i listy zablokowanych, które można zmienić za pomocą SET
poleceń. Korzystając z list zablokowanych, można ograniczyć konfigurację pamięci, aby zapobiec niestabilności serwera Hive. Można skonfigurować wiele wystąpień serwera HiveServer z różnymi listami dozwolonymi i zablokowanymi w celu ustalenia różnych poziomów stabilności.
Zmiany magazynu metadanych Hive
Hive obsługuje teraz tylko zdalny magazyn metadanych zamiast osadzonego magazynu metadanych (w ramach maszyny wirtualnej HS2 JVM). Magazyn metadanych Hive znajduje się w węźle w klastrze zarządzanym przez system Ambari w ramach stosu usługi HDInsight. Autonomiczny serwer poza klastrem nie jest obsługiwany. Polecenia key=value nie są już ustawiane w wierszu polecenia w celu skonfigurowania magazynu metadanych Hive. Na podstawie wartości skonfigurowanej w poleceniu "hive.metastore.uris=" " używana usługa HMS i nawiązano połączenie.
Zmiana aparatu wykonywania
Apache Tez zastępuje mapReduce jako domyślny aparat wykonywania programu Hive. Usługa MapReduce jest przestarzała, począwszy od programu Hive 2.0 Refer HIVE-12300. W przypadku wyrażeń skierowanych grafów acyklicznych (DAG) i elementów pierwotnych transferu danych wykonywanie zapytań Hive w usłudze Tez zwiększa wydajność. Zapytania SQL przesyłane do programu Hive są wykonywane w następujący sposób
- Program Hive kompiluje zapytanie.
- Tez wykonuje zapytanie.
- Usługa YARN przydziela zasoby dla aplikacji w klastrze i umożliwia autoryzację zadań Hive w kolejkach usługi YARN.
- Hive aktualizuje dane w systemie ABFS lub WASB.
- Funkcja Hive zwraca wyniki zapytania za pośrednictwem połączenia JDBC.
Jeśli starszy skrypt lub aplikacja określa mapReduce do wykonania, wyjątek występuje w następujący sposób
Uwaga
Większość funkcji zdefiniowanych przez użytkownika (UDF, user-defined functions) nie wymaga zmiany w celu wykonania w usłudze Tez zamiast mapReduce.
Zmiany dotyczące transakcji ACID i CBO:
Tabele ACID są domyślnym typem tabeli w usłudze HDInsight 4.x bez przeciążenia wydajności ani działania.
Uproszczone tworzenie aplikacji, operacje z silniejszymi gwarancjami transakcyjnymi i prostszą semantyka poleceń SQL
Wewnętrzna usługa Hive zajmuje się zasobnikami tabel ACID w usłudze HDInsight 4.1, co eliminuje obciążenie konserwacyjne.
Optymalizacje zaawansowane — uaktualnianie w modelu CBO
Automatyczna pamięć podręczna zapytań. Właściwość używana do włączania buforowania zapytań to
hive.query.results.cache.enabled
. Należy ustawić tę właściwość na true. Program Hive domyślnie przechowuje pamięć podręczną wyników zapytania w/tmp/hive/__resultcache__/.
usłudze Hive przydziela 2 GB dla pamięci podręcznej wyników zapytania. To ustawienie można zmienić, konfigurując następujący parametr w bajtachhive.query.results.cache.max.size
.Aby uzyskać więcej informacji, korzyści z migracji do usługi Azure HDInsight 4.0.
Zmaterializowane ponowne zapisywanie widoków
Aby uzyskać więcej informacji, na temat Programu Hive — zmaterializowane widoki
Zmiany po uaktualnieniu do programu Apache Hive 3
Aby zlokalizować tabele apache Hive 3 i korzystać z nich po uaktualnieniu, należy zrozumieć zmiany występujące podczas procesu uaktualniania. Zmiany dotyczące zarządzania tabelami i ich lokalizacji, uprawnień do katalogów tabel, typów tabel i kwestii dotyczących zgodności ACID.
Zarządzanie tabelami programu Hive
Program Hive 3 przejmuje większą kontrolę nad tabelami niż Hive 2 i wymaga, aby tabele zarządzane przestrzegały ścisłej definicji. Poziom kontroli programu Hive przejmuje tabele jest jednorodny dla tradycyjnych baz danych. Hive zdaje sobie sprawę ze zmian różnicowych w danych; ta struktura kontroli zwiększa wydajność.
Jeśli na przykład usługa Hive wie, że rozpoznawanie zapytania nie wymaga skanowania tabel dla nowych danych, program Hive zwraca wyniki z pamięci podręcznej wyników zapytania hive. Gdy dane bazowe w zmaterializowanym widoku zmienią się, program Hive musi ponownie skompilować zmaterializowany widok. Właściwości ACID ujawniają dokładnie, które wiersze uległy zmianie i należy je przetworzyć i dodać do zmaterializowanego widoku.
Zmiany programu Hive we właściwościach ACID
W programach Hive 2.x i 3.x tabele transakcyjne (zarządzane) i nietransakcyjne (zewnętrzne). Tabele transakcyjne mają właściwości niepodzielne, spójne, izolacyjne i trwałe (ACID). W programie Hive 2.x początkowa wersja przetwarzania transakcji ACID to ACID v1. W programie Hive 3.x domyślne tabele będą miały wartość ACID w wersji 2.
Natywne i nienatywne formaty magazynu
Formaty magazynu są czynnikiem zmiany uaktualniania typów tabel. Programy Hive 2.x i 3.x obsługują następujące natywne i nienatywne formaty magazynu hadoop
Natywne: tabele z wbudowaną obsługą technologii Hive w następujących formatach plików
- Tekst
- Plik sekwencji
- Plik RC
- Plik AVRO
- Plik ORC
- Plik Parquet
Nienatywne: tabele korzystające z programu obsługi magazynu, takie jak DruidStorageHandler lub HBaseStorageHandler
Zmiany uaktualniania do typów tabel w usłudze HDInsight 4.x
W poniższej tabeli porównaliśmy typy tabel Hive i operacje ACID przed uaktualnieniem z usługi HDInsight 3.x i po uaktualnieniu do usługi HDInsight 4.x. Własność pliku tabeli Hive jest czynnikiem określania typów tabel i operacji ACID po uaktualnieniu
Porównanie typów tabel w usługach HDInsight 3.x i HDInsight 4.x
HDInsight 3.x | - | - | - | HDInsight 4.x | - |
---|---|---|---|---|---|
Typ tabeli | ACID v1 | Format | Właściciel (użytkownik) pliku tabeli Hive | Typ tabeli | ACID v2 |
Zewnętrzne | Nie. | Natywny lub inny niż natywny | Hive lub non-Hive | Zewnętrzne | Nie. |
Zarządzany | Tak | ORC | Hive lub non-Hive | Zarządzane, możliwe do zaktualizowania | Tak |
Zarządzany | Nie. | ORC | Hive | Zarządzane, możliwe do zaktualizowania | Tak |
Zarządzany | Nie. | ORC | inne niż Hive | Zewnętrzne z usuwaniem danych | NIE |
Zarządzany | Nie. | Natywny (ale inny niż ORC) | Hive | Zarządzane, wstaw tylko | Tak |
Zarządzany | Nie. | Natywny (ale inny niż ORC) | inne niż Hive | Zewnętrzne z usuwaniem danych | Nie. |
Zarządzany | Nie. | Inne niż natywne | Hive lub non-Hive | Zewnętrzne z usuwaniem danych | Nie. |
Personifikacja hive
Personifikacja hive została domyślnie włączona w programie Hive 2 (doAs=true) i domyślnie wyłączona w programie Hive 3. Personifikacja hive uruchamia program Hive jako użytkownik końcowy, a nie.
Inne zmiany uaktualniania usługi HDInsight 4.x
- Zarządzane tabele ACID, które nie należą do użytkownika programu Hive, pozostają tabelami zarządzanymi po uaktualnieniu, ale hive staje się właścicielem.
- Po uaktualnieniu format tabeli Programu Hive jest taki sam jak przed uaktualnieniem. Na przykład tabele natywne lub nienatywne pozostają odpowiednio natywne lub nienatywne.
Zmiany lokalizacji
Po uaktualnieniu lokalizacja zarządzanych tabel lub partycji nie zmienia się w żadnym z następujących warunków:
- Stara tabela lub katalog partycji nie był w domyślnej lokalizacji /apps/hive/warehouse przed uaktualnieniem.
- Stara tabela lub partycja znajduje się w innym systemie plików niż nowy katalog magazynu.
- Stary katalog tabeli lub partycji znajduje się w innej strefie szyfrowania niż nowy katalog magazynu.
W przeciwnym razie lokalizacja zarządzanych tabel lub partycji ulegnie zmianie. Proces uaktualniania przenosi pliki zarządzane do programu /hive/warehouse/managed
. Domyślnie program Hive umieszcza wszystkie nowe tabele zewnętrzne tworzone w usłudze HDInsight 4.x w programie /hive/warehouse/external
Obiekt /apps/hive directory
, który jest dawną lokalizacją magazynu Hive 2.x, może lub nie istnieje w usłudze HDInsight 4.x
Następujące scenariusze są obecne w przypadku zmian lokalizacji
Scenariusz 1
Jeśli tabela jest tabelą zarządzaną w usłudze HDInsight-3.x i jeśli znajduje się w lokalizacji /apps/hive/warehouse
i przekonwertowana jako tabela zewnętrzna w usłudze HDInsight-4.x, lokalizacja jest taka sama /apps/hive/warehouse
w usłudze HDInsight 4.x. Nie zmienia żadnej lokalizacji. Po wykonaniu tego kroku polecenie alter table konwertuje je jako tabelę zarządzaną (kwas) w tej samej lokalizacji /apps/hive/warehouse
.
Scenariusz 2
Jeśli tabela jest tabelą zarządzaną w usłudze HDInsight-3.x i jeśli znajduje się w lokalizacji /apps/hive/warehouse
i przekonwertowana na tabelę zarządzaną (ACID) w usłudze HDInsight 4.x, lokalizacja to /hive/warehouse/managed
.
Scenariusz 3 Jeśli tworzysz tabelę zewnętrzną, w usłudze HDInsight-4.x bez określania żadnej lokalizacji będzie ona obecna w lokalizacji /hive/warehouse/external
.
Konwersja tabeli
Po uaktualnieniu w celu przekonwertowania tabeli nietransakcyjnej na tabelę transakcyjną ACID w wersji 2 należy użyć ALTER TABLE
polecenia i ustawić właściwości tabeli na
transaction'='true' and 'EXTERNAL'='false
- Zarządzana tabela, format inny niż ACID, ORC i należący do użytkownika innego niż Hive w usłudze HDInsight-3.x zostaną przekonwertowane na tabelę zewnętrzną, inną niż ACID w usłudze HDInsight-4.x.
- Jeśli użytkownik chce zmienić tabelę zewnętrzną (nieKWAS) na ACID, powinien również zmienić tabelę zewnętrzną na zarządzaną i ACID. Ponieważ w usłudze HDInsight-4.x wszystkie zarządzane tabele są domyślnie ściśle ACID. Nie można przekonwertować tabel zewnętrznych (innych niż ACID) na tabelę ACID.
Uwaga
Tabela musi być tabelą ORC.
Aby przekonwertować tabelę zewnętrzną (inną niż ACID) na tabelę Managed (ACID),
- Przekonwertuj tabelę zewnętrzną na zarządzaną i kwas równą true, używając następującego polecenia:
alter table <table name> set TBLPROPERTIES ('EXTERNAL'='false', 'transactional'='true');
- Jeśli spróbujesz wykonać następujące polecenie dla tabeli zewnętrznej, zostanie wyświetlony poniższy błąd.
Scenariusz 1
Rozważmy, że tabela rt jest tabelą zewnętrzną (non-ACID). Jeśli tabela nie jest tabelą ORC,
alter table rt set TBLPROPERTIES ('transactional'='true');
ERROR : FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Unable to alter table. The table must be stored using an ACID compliant format (such as ORC): work.rt
The table must be ORC format
Scenariusz 2
>>>> alter table rt set TBLPROPERTIES ('transactional'='true'); If the table is ORC table.
ERROR:
Error: Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Unable to alter table. work.rt can't be declared transactional because it's an external table (state=08S01,code=1)
Ten błąd występuje, ponieważ tabela rt jest tabelą zewnętrzną i nie można przekonwertować tabeli zewnętrznej na ACID.
Scenariusz 3
>>>> alter table rt set TBLPROPERTIES ('EXTERNAL'='false');
ERROR:
Error: Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Unable to alter table. Table work.rt failed strict managed table checks due to the following reason: Table is marked as a managed table but isn't transactional. (state=08S01,code=1)
W tym miejscu próbujemy najpierw zmienić tabelę zewnętrzną na zarządzaną tabelę. W usłudze HDInsight 4.x powinna ona być tabelą ściśle zarządzaną (co oznacza, że powinna to być tabela ACID). Więc tutaj dostajesz impas. Jedynym sposobem przekonwertowania tabeli zewnętrznej (NON_ACID) na zarządzaną (ACID) należy wykonać następujące polecenie:
alter table rt set TBLPROPERTIES ('EXTERNAL'='false', 'transactional'='true');
Składnia i semantyka
Tworzenie tabeli Aby zwiększyć użyteczność i funkcjonalność, zmieniono tworzenie tabeli programu Hive 3. Program Hive zmienił tworzenie tabeli w następujący sposób
- Tworzy tabelę zgodną ze standardem ACID, która jest domyślną wartością w usłudze HDP
- Obsługuje proste operacje zapisu i wstawiania
- Zapisy w wielu partycjach
- Wstawia wiele aktualizacji danych w jednej instrukcji SELECT
- Eliminuje potrzebę zasobnika.
Jeśli masz potok ETL, który tworzy tabele w programie Hive, tabele są tworzone jako ACID. Hive ściśle kontroluje dostęp i okresowo wykonuje kompaktowanie w tabelach
Przed uaktualnieniem w usłudze HDInsight 3.x domyślnie create TABLE utworzono tabelę inną niż ACID.
Po uaktualnieniu Domyślnie create TABLE tworzy pełną tabelę transakcyjną ACID w formacie ORC.
Akcja Wymagana do uzyskania dostępu do tabel Hive ACID z platformy Spark, należy nawiązać połączenie z programem Hive przy użyciu Połączenie or magazynu Hive (HWC). Aby napisać tabele ACID w technologii Hive z platformy Spark, należy użyć interfejsu API HWC i HWC
Ucieczka
db.table
odwołańNależy zmienić zapytania używające odwołań db.table, aby uniemożliwić usłudze Hive interpretowanie całego ciągu db.table jako nazwy tabeli. Program Hive 3.x odrzuca
db.table
zapytania SQL. Kropka (.) nie jest dozwolona w nazwach tabel. Nazwa bazy danych i nazwa tabeli są ujęte w backticks. Znajdź tabelę zawierającą problematyczne odwołanie do tabeli.math.students
wyświetlane w instrukcji CREATE TABLE. Należy ująć nazwę bazy danych i nazwę tabeli w backticks.TABLE `math`.`students` (name VARCHAR(64), age INT, gpa DECIMAL(3,2));
RZUTOWANIE TIMESTAMPS Wyniki aplikacji, które rzutują cyfry na znaczniki czasu, różnią się od Hive 2 do Hive 3. Usługa Apache Hive zmieniła zachowanie funkcji CAST tak, aby było zgodne ze standardem SQL, który nie kojarzy strefy czasowej z typem ZNACZNIKA CZASU.
Przed uaktualnieniem Rzutowanie wartości typu liczbowego do znacznika czasu może służyć do wygenerowania wyniku, który odzwierciedla strefę czasową klastra. Na przykład 1597217764557 to 2020-08-12 00:36:04 PDT. Uruchomienie następującego zapytania rzutuje wartość liczbową na znacznik czasu w pliku PDT:
SELECT CAST(1597217764557 AS TIMESTAMP);
| 2020-08-12 00:36:04 |Po uaktualnieniu Rzutowanie wartości typu liczbowego do znacznika czasu generuje wynik, który odzwierciedla utc zamiast strefy czasowej klastra. Uruchomienie zapytania rzutuje wartość liczbową na znacznik czasu w formacie UTC.
SELECT CAST(1597217764557 AS TIMESTAMP);
| 2020-08-12 07:36:04.557 |Wymagana akcja Aplikacji zmiany. Nie rzutuj z liczb, aby uzyskać lokalną strefę czasową. Wbudowane funkcje from_utc_timestamp i to_utc_timestamp mogą służyć do naśladowania zachowania przed uaktualnieniem.
SPRAWDZANIE ZGODNOŚCI ZMIAN KOLUMNY Domyślna zmiana konfiguracji może spowodować niepowodzenie aplikacji, które zmieniają typy kolumn.
Przed uaktualnieniem w usłudze HDInsight 3.x Hive.metastore.disallow.incompatible.col.type.changes jest domyślnie fałsz, aby zezwolić na zmiany niezgodnych typów kolumn. Na przykład można zmienić kolumnę STRING na kolumnę niezgodnego typu, na przykład MAP<STRING, STRING>. Nie występuje błąd.
Po uaktualnieniu pliku hive.metastore.disallow.incompatible.col.type.changes jest domyślnie prawdziwe. Program Hive uniemożliwia zmianę niezgodnych typów kolumn. Zgodne zmiany typu kolumny, takie jak INT, STRING, BIGINT, nie są blokowane.
Akcja Wymagana zmiana aplikacji w celu uniemożliwienia niezgodnych zmian typu kolumny, aby zapobiec ewentualnemu uszkodzeniu danych.
UPUSZCZANIE PARTYCJI
Słowa kluczowe OFFLINE i NO_DROP w klauzuli CASCADE dotyczące usuwania partycji powodują problemy z wydajnością i nie są już obsługiwane.
Przed uaktualnieniem możesz użyć słów kluczowych OFFLINE i NO_DROP w klauzuli CASCADE, aby zapobiec odczytywaniu lub usuwaniu partycji.
Po uaktualnieniu trybu OFFLINE i NO_DROP nie są obsługiwane w klauzuli CASCADE.
Akcja Wymagana zmiana aplikacji w celu usunięcia trybu OFFLINE i NO_DROP z klauzuli CASCADE. Użyj schematu autoryzacji, takiego jak Ranger, aby zapobiec usuwaniu lub odczytywaniu partycji.
Zmiana nazwy tabeli po uaktualnieniu Zmiana nazwy tabeli zarządzanej przenosi jej lokalizację tylko wtedy, gdy tabela jest tworzona bez
LOCATION
klauzuli i znajduje się w katalogu bazy danych.
Ograniczenia dotyczące CBO
Widzimy, że dane wyjściowe select dają końcowe zero w kilku kolumnach. Jeśli na przykład mamy kolumnę tabeli z wartością datatype jako dziesiętną (38,4), a jeśli wstawimy dane jako 38, doda ona końcowe zero i zapewni wynik 38,0000 Jako na https://issues.apache.org/jira/browse/HIVE-12063 i https://issues.apache.org/jira/browse/HIVE-24389, idea zostanie zachowana skala i precyzja zamiast uruchamiać otokę w kolumnach dziesiętnych. Jest to domyślne zachowanie programu Hive 2. Aby rozwiązać ten problem, możesz skorzystać z poniższej opcji.
- Zmodyfikuj typ danych na poziomie źródła, aby dostosować dokładność kolumny col1(decimal(38,0)). Ta wartość daje wynik 38 bez końcowego zera. Jeśli jednak wstawisz dane jako 35.0005, będzie to .0005 i zostanie wyświetlona tylko wartość 38 1.Usuń końcowe zera dla kolumn z problemem, a następnie rzutuj na ciąg,
- Użyj opcji TRIM(cast(<column_name> AS STRING))+0 FROM <table_name>;
- Użyj wyrażenia regularnego.
- Zmodyfikuj typ danych na poziomie źródła, aby dostosować dokładność kolumny col1(decimal(38,0)). Ta wartość daje wynik 38 bez końcowego zera. Jeśli jednak wstawisz dane jako 35.0005, będzie to .0005 i zostanie wyświetlona tylko wartość 38 1.Usuń końcowe zera dla kolumn z problemem, a następnie rzutuj na ciąg,
Zapytanie Hive kończy się niepowodzeniem z komunikatem "Nieobsługiwane wyrażenie subquery", gdy używamy system UNIX_TIMESTAMP w zapytaniu. Jeśli na przykład uruchomimy zapytanie, zgłasza błąd "Nieobsługiwane wyrażenie podzapytania"
select * from (SELECT col_1 from table1 where col_2 >= unix_timestamp('2020-03-07','yyyy-MM-dd'));
Głównym przypadkiem tego problemu jest to, że bieżąca baza kodu Hive zgłasza wyjątek, który analizuje system UNIX_TIMESTAMP, ponieważ nie ma precyzyjnego mapowania
HiveTypeSystemImpl.java code
dla precyzji, zUNIX_TIMESTAMP
której obliczanie jest rozpoznawane jakoBIGINT
. Ale poniższe zapytanie działa prawidłowoselect * from (SELECT col_1 from table1 where col_2 >= 1);
To polecenie jest wykonywane pomyślnie, ponieważ col_2 jest liczbą całkowitą. Powyższy problem został rozwiązany w systemach hdi-3.1.2-4.1.12(4.1 stack) i hdi-3.1.2-5.0.8(5.0)
Kroki uaktualniania
1. Przygotowanie danych
Domyślnie usługa HDInsight 3.6 nie obsługuje tabel ACID. Jeśli jednak tabele ACID są obecne, uruchom na nich kompaktowanie "MAJOR". Aby uzyskać szczegółowe informacje na temat kompaktowania, zobacz Podręcznik języka Hive.
W przypadku korzystania z usługi Azure Data Lake Storage Gen1 lokalizacje tabel hive są prawdopodobnie zależne od konfiguracji systemu plików HDFS klastra. Uruchom następującą akcję skryptu, aby te lokalizacje były przenośne do innych klastrów. Zobacz Akcja skryptu w uruchomionym klastrze.
Właściwości Wartość Identyfikator URI skryptu powłoki Bash https://hdiconfigactions.blob.core.windows.net/linuxhivemigrationv01/hive-adl-expand-location-v01.sh
Typy węzłów Head Parametry
2. Kopiowanie bazy danych SQL
Jeśli klaster używa domyślnego magazynu metadanych Hive, postępuj zgodnie z tym przewodnikiem , aby wyeksportować metadane do zewnętrznego magazynu metadanych. Następnie utwórz kopię zewnętrznego magazynu metadanych na potrzeby uaktualnienia.
Jeśli klaster używa zewnętrznego magazynu metadanych Hive, utwórz jego kopię. Opcje obejmują eksportowanie/importowanie i przywracanie do punktu w czasie.
3. Uaktualnianie schematu magazynu metadanych
W tym kroku użyto Hive Schema Tool
elementu z usługi HDInsight 4.0 do uaktualnienia schematu magazynu metadanych.
Ostrzeżenie
Ten krok nie jest odwracalny. Uruchom to tylko na kopii magazynu metadanych.
Utwórz tymczasowy klaster usługi HDInsight 4.0, aby uzyskać dostęp do programu Hive
schematool
w wersji 4.0. W tym kroku można użyć domyślnego magazynu metadanych Hive.W klastrze usługi HDInsight 4.0 wykonaj polecenie
schematool
, aby uaktualnić docelowy magazyn metadanych usługi HDInsight 3.6. Edytuj następujący skrypt powłoki, aby dodać nazwę serwera SQL, nazwę bazy danych, nazwę użytkownika i hasło. Otwórz sesję SSH w węźle głównym i uruchom ją.SERVER='servername.database.windows.net' # replace with your SQL Server DATABASE='database' # replace with your 3.6 metastore SQL Database USERNAME='username' # replace with your 3.6 metastore username PASSWORD='password' # replace with your 3.6 metastore password STACK_VERSION=$(hdp-select status hive-server2 | awk '{ print $3; }') /usr/hdp/$STACK_VERSION/hive/bin/schematool -upgradeSchema -url "jdbc:sqlserver://$SERVER;databaseName=$DATABASE;trustServerCertificate=false;encrypt=true;hostNameInCertificate=*.database.windows.net;" -userName "$USERNAME" -passWord "$PASSWORD" -dbType "mssql" --verbose
Uwaga
To narzędzie używa klienta
beeline
do wykonywania skryptów SQL w programie/usr/hdp/$STACK_VERSION/hive/scripts/metastore/upgrade/mssql/upgrade-*.mssql.sql
.Składnia SQL w tych skryptach nie musi być zgodna z innymi narzędziami klienckimi. Na przykład program SSMS i Edytor Power Query w witrynie Azure Portal wymagają słowa kluczowego
GO
po każdym poleceniu.Jeśli jakikolwiek skrypt zakończy się niepowodzeniem z powodu przekroczenia limitu czasu zasobów lub transakcji, przeprowadź skalowanie w górę bazy danych SQL Database.
Sprawdź ostateczną wersję przy użyciu zapytania
select schema_version from dbo.version
.Dane wyjściowe powinny być zgodne z następującym poleceniem powłoki bash z klastra usługi HDInsight 4.0.
grep . /usr/hdp/$(hdp-select --version)/hive/scripts/metastore/upgrade/mssql/upgrade.order.mssql | tail -n1 | rev | cut -d'-' -f1 | rev
Usuń tymczasowy klaster usługi HDInsight 4.0.
4. Wdrażanie nowego klastra usługi HDInsight 4.0
Utwórz nowy klaster usługi HDInsight 4.0, wybierając uaktualniony magazyn metadanych Hive i te same konta magazynu.
Nowy klaster nie wymaga tego samego domyślnego systemu plików.
Jeśli magazyn metadanych zawiera tabele znajdujące się w wielu kontach magazynu, należy dodać te konta magazynu do nowego klastra, aby uzyskać dostęp do tych tabel. Zobacz Dodawanie dodatkowych kont magazynu do usługi HDInsight.
Jeśli zadania hive kończą się niepowodzeniem z powodu niedostępności magazynu, sprawdź, czy lokalizacja tabeli znajduje się na koncie magazynu dodanym do klastra.
Użyj następującego polecenia programu Hive, aby zidentyfikować lokalizację tabeli:
SHOW CREATE TABLE ([db_name.]table_name|view_name);
5. Konwertowanie tabel pod kątem zgodności ACID
Tabele zarządzane muszą być zgodne ze standardem ACID w usłudze HDInsight 4.0. Uruchom polecenie strictmanagedmigration
w usłudze HDInsight 4.0, aby przekonwertować wszystkie tabele niezarządzane na tabele zewnętrzne z właściwością 'external.table.purge'='true'
. Wykonaj z węzła głównego:
sudo su - hive
STACK_VERSION=$(hdp-select status hive-server2 | awk '{ print $3; }')
/usr/hdp/$STACK_VERSION/hive/bin/hive --config /etc/hive/conf --service strictmanagedmigration --hiveconf hive.strict.managed.tables=true -m automatic --modifyManagedTables
6. Nie znaleziono błędu klasy z MultiDelimitSerDe
Problem
W niektórych sytuacjach podczas uruchamiania zapytania Hive może zostać wyświetlony java.lang.ClassNotFoundException
komunikat o org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe
tym, że klasa nie zostanie znaleziona. Ten błąd występuje, gdy klient przeprowadza migrację z usługi HDInsight 3.6 do usługi HDInsight 4.0. Klasa org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe
SerDe , która jest częścią hive-contrib-1.2.1000.2.6.5.3033-1.jar
usługi HDInsight 3.6, jest usuwana i używamy org.apache.hadoop.hive.serde2.MultiDelimitSerDe
klasy , która jest częścią hive-exec jar
hdI-4.0. hive-exec jar
domyślnie zostanie załadowany do modułu HS2 po uruchomieniu usługi.
KROKI ROZWIĄZYWANIA PROBLEMÓW
- Sprawdź, czy jakikolwiek plik JAR w folderze (prawdopodobnie powinien znajdować się w folderze bibliotek Hive, który znajduje
/usr/hdp/current/hive/lib
się w usłudze HDInsight), zawiera tę klasę lub nie. - Sprawdź klasę
org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe
iorg.apache.hadoop.hive.serde2.MultiDelimitSerDe
jak wspomniano w rozwiązaniu.
Rozwiązanie
Mimo że plik JAR jest plikiem binarnym, nadal można użyć
grep
polecenia z-Hrni
przełącznikami, tak jak poniżej, aby wyszukać określoną nazwę klasygrep -Hrni "org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe" /usr/hdp/current/hive/lib
Jeśli nie można odnaleźć klasy, nie zwróci żadnych danych wyjściowych. Jeśli znajdzie klasę w pliku JAR, zwróci dane wyjściowe
Poniżej przedstawiono przykład z klastra usługi HDInsight 4.x
sshuser@hn0-alters:~$ grep -Hrni "org.apache.hadoop.hive.serde2.MultiDelimitSerDe" /usr/hdp/4.1.9.7/hive/lib/ Binary file /usr/hdp/4.1.9.7/hive/lib/hive-exec-3.1.0.4.1-SNAPSHOT.jar matches
Z powyższych danych wyjściowych możemy potwierdzić, że żaden plik jar nie zawiera klasy
org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe
i plik jar hive-exec zawieraorg.apache.hadoop.hive.serde2.MultiDelimitSerDe
.Spróbuj utworzyć tabelę z formatem DerDe w formacie wiersza
ROW FORMAT SERDE org.apache.hadoop.hive.serde2.MultiDelimitSerDe
To polecenie rozwiąże problem. Jeśli tabela została już utworzona, możesz zmienić jej nazwę przy użyciu poniższych poleceń
Hive => ALTER TABLE TABLE_NAME SET SERDE 'org.apache.hadoop.hive.serde2.MultiDelimitSerDe' Backend DB => UPDATE SERDES SET SLIB='org.apache.hadoop.hive.serde2.MultiDelimitSerDe' where SLIB='org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe';
Polecenie aktualizacji polega na ręcznej aktualizacji szczegółów w bazie danych zaplecza, a polecenie alter służy do zmiany tabeli przy użyciu nowej klasy SerDe z beeline lub Hive.
Skrypt porównania schematu bazy danych zaplecza programu Hive
Poniższy skrypt można uruchomić po zakończeniu migracji.
Istnieje prawdopodobieństwo, że w bazie danych zaplecza brakuje kilku kolumn, co powoduje błędy zapytań. Jeśli uaktualnienie schematu nie zostało prawidłowo wykonane, istnieje prawdopodobieństwo, że możemy napotkać nieprawidłowy problem z nazwą kolumny. Poniższy skrypt pobiera nazwę kolumny i typ danych z bazy danych zaplecza klienta i udostępnia dane wyjściowe, jeśli brakuje kolumny lub nieprawidłowego typu danych.
Poniższa ścieżka zawiera plik schemacompare_final.py i test.csv. Skrypt znajduje się w pliku "schemacompare_final.py", a plik "test.csv" zawiera całą nazwę kolumny i typ danych dla wszystkich tabel, które powinny znajdować się w bazie danych zaplecza hive.
https://hdiconfigactions2.blob.core.windows.net/hiveschemacompare/schemacompare_final.py
https://hdiconfigactions2.blob.core.windows.net/hiveschemacompare/test.csv
Pobierz te dwa pliki z linku. Skopiuj te pliki do jednego z węzłów głównych, w których działa usługa Hive.
Kroki wykonywania skryptu:
Utwórz katalog o nazwie "schemacompare" w katalogu "/tmp".
Umieść folder "schemacompare_final.py" i "test.csv" w folderze "/tmp/schemacompare". Wykonaj polecenie "ls -ltrh /tmp/schemacompare/" i sprawdź, czy pliki są obecne.
Aby wykonać skrypt języka Python, użyj polecenia "python schemacompare_final.py". Ten skrypt rozpoczyna wykonywanie skryptu i ukończenie go trwa krócej niż pięć minut. Powyższy skrypt automatycznie łączy się z bazą danych zaplecza i pobiera szczegóły z każdej tabeli, której program Hive używa i aktualizuje szczegóły w nowym pliku CSV o nazwie "return.csv". Po utworzeniu pliku return.csv porównuje dane z plikiem "test.csv" i wyświetla nazwę kolumny lub typ danych, jeśli brakuje niczego w nazwie tabeli.
Po wykonaniu skryptu zobaczysz następujące wiersze, które wskazują, że szczegóły są pobierane dla tabel, a skrypt jest w toku
KEY_CONSTRAINTS
Details Fetched
DELEGATION_TOKENS
Details Fetched
WRITE_SET
Details Fetched
SERDES
Details Fetched
Szczegóły różnicy można zobaczyć w wierszu "DIFFERENCE DETAILS:". Jeśli istnieje jakakolwiek różnica, drukuje
PART_COL_STATS;
('difference', ['BIT_VECTOR', 'varbinary'])
The line with semicolon PART_COL_STATS; is the table name. And under the table name you can find the differences as ('difference', ['BIT_VECTOR', 'varbinary']) if there are any difference in column or datatype.
Jeśli w tabeli nie ma żadnych różnic, dane wyjściowe są następujące:
BUCKETING_COLS;
('difference', [])
PARTITIONS;
('difference', [])
Z tych danych wyjściowych można znaleźć nazwy kolumn, których brakuje lub które są niepoprawne. Możesz uruchomić następujące zapytanie w bazie danych zaplecza, aby sprawdzić, czy brakuje kolumny, czy nie.
SELECT * FROM INFORMATION_SCHEMA.columns WHERE TABLE_NAME = 'PART_COL_STATS';
Jeśli na przykład w tabeli pominięto dowolną kolumnę, na przykład jeśli uruchomimy zapytania, takie jak wstawianie lub wstawianie zastąpić, statystyki zostaną obliczone automatycznie i spróbują zaktualizować tabelę statystyk, na przykład PART_COL_STATS i TAB_COL_STATS. Jeśli w tabelach brakuje kolumny takiej jak "BIT_VECTOR", błąd "Nieprawidłowa nazwa kolumny" zakończy się niepowodzeniem. Możesz dodać kolumnę, jak wspomniano w poniższych poleceniach. Aby obejść ten problem, możesz wyłączyć statystyki, ustawiając następujące właściwości, które nie mogą zaktualizować statystyk w bazie danych zaplecza.
hive.stats.autogather=false;
hive.stats.column.autogather=false;
To Fix this issue, run the following two queries on backend SQL server (Hive metastore DB):
ALTER TABLE PART_COL_STATS ADD BIT_VECTOR VARBINARY(MAX);
ALTER TABLE TAB_COL_STATS ADD BIT_VECTOR VARBINARY(MAX);
Ten krok pozwala uniknąć niepowodzeń zapytań, które kończą się niepowodzeniem z komunikatem "Nieprawidłowa nazwa kolumny" raz po migracji.
Zabezpieczanie programu Hive w wersjach usługi HDInsight
Usługa HDInsight opcjonalnie integruje się z usługą Microsoft Entra ID przy użyciu pakietu HDInsight Enterprise Security Package (ESP). Usługa ESP używa protokołu Kerberos i platformy Apache Ranger do zarządzania uprawnieniami określonych zasobów w klastrze. Zasady platformy Ranger wdrożone w usłudze Hive w usłudze HDInsight 3.6 można migrować do usługi HDInsight 4.0, wykonując następujące czynności:
- Przejdź do panelu programu Ranger Service Manager w klastrze usługi HDInsight 3.6.
- Przejdź do zasad o nazwie HIVE i wyeksportuj zasady do pliku json.
- Upewnij się, że wszyscy użytkownicy, do których odwołuje się wyeksportowany kod json zasad, istnieją w nowym klastrze. Jeśli użytkownik jest określany w formacie json zasad, ale nie istnieje w nowym klastrze, dodaj użytkownika do nowego klastra lub usuń odwołanie z zasad.
- Przejdź do panelu programu Ranger Service Manager w klastrze usługi HDInsight 4.0.
- Przejdź do zasad o nazwie HIVE i zaimportuj kod json zasad ranger z kroku 2.
Zmiany hive w usłudze HDInsight 4.0, które mogą wymagać zmian aplikacji
Aby udostępnić magazyn metadanych między tabelami Spark i Hive, zobacz Dodatkowa konfiguracja przy użyciu usługi Hive Warehouse Połączenie or.
Usługa HDInsight 4.0 używa autoryzacji opartej na magazynie. Jeśli zmodyfikujesz uprawnienia do plików lub utworzysz foldery jako inny użytkownik niż hive, prawdopodobnie wystąpią błędy programu Hive na podstawie uprawnień magazynu. Aby rozwiązać ten problem, przyznaj
rw-
użytkownikowi dostęp. Zobacz Przewodnik po uprawnieniach systemu plików HDFS.HiveCLI
element jest zastępowany ciągiemBeeline
.
Zapoznaj się z anonsem usługi HDInsight 4.0, aby zapoznać się z innymi zmianami.
Publikowanie migracji
Pamiętaj, aby wykonać te kroki po zakończeniu migracji.
Rozsądek tabeli
- Utwórz ponownie tabele w programie Hive 3.1 przy użyciu funkcji CTAS lub IOW, aby zmienić typ tabeli zamiast zmieniać właściwości tabeli.
- Zachowaj wartość doAs jako false.
- Upewnij się, że zarządzana tabela/własność danych jest własnością użytkownika "hive".
- Użyj zarządzanych tabel ACID, jeśli format tabeli to ORC i zarządzany inny niż ACID dla typów innych niż ORC.
- Wygeneruj ponownie statystyki dotyczące ponownie utworzonych tabel, ponieważ migracja spowodowałaby nieprawidłowe statystyki.
Kondycja klastra
Jeśli wiele klastrów współużytkuje ten sam magazyn i bazę danych HMS, należy włączyć automatyczne kompaktowanie/kompaktowanie wątków tylko w jednym klastrze i wyłączyć wszędzie indziej.
Dostrajanie magazynu metadanych w celu zmniejszenia użycia procesora CPU.
Wyłącz odbiorniki zdarzeń transakcyjnych.
Uwaga
Wykonaj poniższe kroki tylko wtedy, gdy funkcja replikacji hive nie jest używana.
- Z interfejsu użytkownika systemu Ambari usuń wartość hive.metastore.transactional.event.listeners.
- Wartość domyślna:
org.apache.hive.hcatalog.listener.DbNotificationListener
- Nowa wartość:
<Empty>
Wyłączanie programu Hive PrivilegeSynchronizer
- W interfejsie użytkownika systemu Ambari ustaw właściwość hive.privilege.syncr = false.
- Wartość domyślna:
true
- Nowa wartość:
false
Optymalizowanie funkcji naprawy partycji
Wyłącz naprawę partycji — ta funkcja służy do synchronizowania partycji tabel programu Hive w lokalizacji magazynu z magazynem metadanych Hive. Tę funkcję można wyłączyć, jeśli po pozyskaniu danych zostanie użyta opcja "naprawa msck".
Aby wyłączyć funkcję , dodaj polecenie "discover.partitions=false" w obszarze właściwości tabeli przy użyciu funkcji ALTER TABLE. OR (jeśli nie można wyłączyć funkcji)
Zwiększ częstotliwość naprawy partycji.
W interfejsie użytkownika systemu Ambari zwiększ wartość "metastore.partition.management.task.frequency" (w sekundach).
Uwaga
Ta zmiana może opóźnić widoczność niektórych partycji pozyskanych do magazynu.
- Wartość domyślna:
60
- Proponowana wartość:
3600
- Wartość domyślna:
Optymalizacje zaawansowane Następujące opcje należy przetestować w środowisku niższym (nieprodowym) przed zastosowaniem do środowiska produkcyjnego.
- Usuń odbiornik powiązany z materializowanym widokiem, jeśli nie jest używany widok zmaterializowany.
- W interfejsie użytkownika systemu Ambari dodaj właściwość niestandardową (w niestandardowym pliku hive-site.xml) i usuń niechciane wątki magazynu metadanych w tle.
- Nazwa właściwości: metastore.task.threads.remote
- Wartość domyślna:
N/A (it uses few class names internally)
- Nowa wartość:
org.apache.hadoop.hive.metastore.txn.AcidHouseKeeperService,org.apache.hadoop.hive.metastore.txn.AcidOpenTxnsCounterService,org.apache.hadoop.hive.metastore.txn.AcidCompactionHistoryService,org.apache.hadoop.hive.metastore.txn.AcidWriteSetService,org.apache.hadoop.hive.metastore.PartitionManagementTask
Wyłącz wątki w tle, jeśli replikacja jest wyłączona.
- W interfejsie użytkownika systemu Ambari dodaj właściwość niestandardową (w niestandardowym pliku hive-site.xml) i usuń niechciane wątki.
- Nazwa właściwości: metastore.task.threads.always
- Wartość domyślna:
N/A (it uses few class names internally)
- Nowa wartość:
org.apache.hadoop.hive.metastore.RuntimeStatsCleanerTask
Dostrajanie zapytań
- Zachowaj domyślne konfiguracje programu Hive, aby uruchamiać zapytania w miarę ich dostosowywania dla obciążeń TPC-DS. Wymaga dostrajania na poziomie zapytania tylko wtedy, gdy zakończy się niepowodzeniem lub działa wolno.
- Upewnij się, że statystyki są aktualne, aby uniknąć złego planu lub nieprawidłowych wyników.
- Unikaj mieszania zewnętrznych i zarządzanych tabel ACID w typie sprzężenia zapytań. W takim przypadku spróbuj przekonwertować tabelę zewnętrzną na zarządzaną tabelę inną niż ACID za pomocą rekreacji.
- W programie Hive-3 wiele pracy miało miejsce w przypadku wektoryzacji, CBO, sygnatury czasowej ze strefą itp., które mogą zawierać błędy produktu. Jeśli więc jakiekolwiek zapytanie daje nieprawidłowe wyniki, spróbuj wyłączyć wektoryzacja, CBO, map-join itp., aby sprawdzić, czy to pomoże.
Inne kroki, które należy wykonać, aby naprawić nieprawidłowe wyniki i niską wydajność po migracji
Problem z zapytaniem Hive daje niepoprawny wynik. Nawet zapytanie select count(*) daje niepoprawny wynik.
Przyczyna, że właściwość "hive.compute.query.using.stats" jest domyślnie ustawiona na true. Jeśli ustawimy ją na true, używa ona statystyk przechowywanych w magazynie metadanych do wykonania zapytania. Jeśli statystyki nie są aktualne, wyniki są niepoprawne.
Rozwiązanie zbiera statystyki dla zarządzanych tabel przy użyciu
alter table <table_name> compute statics;
polecenia na poziomie tabeli i na poziomie kolumny. Link referencyjny — https://cwiki.apache.org/confluence/display/hive/statsdev#StatsDev-TableandPartitionStatisticsWykonywanie zapytań hive trwa długo.
Przyczyna Jeśli zapytanie ma warunek sprzężenia, gałąź tworzy plan, czy używać sprzężenia mapy, czy scalania na podstawie rozmiaru tabeli i warunku sprzężenia. Jeśli jedna z tabel zawiera mały rozmiar, ładuje tę tabelę w pamięci i wykonuje operację sprzężenia. Dzięki temu wykonywanie zapytania jest szybsze w porównaniu z sprzężeniami scalania.
Rozwiązanie Upewnij się, że właściwość "hive.auto.convert.join=true" jest wartością domyślną. Ustawienie wartości false powoduje użycie sprzężenia scalania i może spowodować niską wydajność. Hive decyduje, czy używać sprzężenia mapy, czy nie na podstawie następujących właściwości, które są ustawione w klastrze
set hive.auto.convert.join=true; set hive.auto.convert.join.noconditionaltask=true; set hive.auto.convert.join.noconditionaltask.size=<value>; set hive.mapjoin.smalltable.filesize = <value>;
Wspólne sprzężenie może być automatycznie konwertowane na sprzężenie mapy, jeśli
hive.auto.convert.join.noconditionaltask=true
szacowany rozmiar małych tabel jest mniejszy niż gałąź.auto.convert.join.noconditionaltask.size
(wartość domyślna to 10000000 MB).Jeśli wystąpi jakikolwiek problem związany z funkcją OOM przez ustawienie właściwości
hive.auto.convert.join
true, zaleca się ustawienie jej na wartość false tylko dla tego konkretnego zapytania na poziomie sesji, a nie na poziomie klastra. Ten problem może wystąpić, jeśli statystyki są nieprawidłowe, a usługa Hive decyduje się na użycie sprzężenia mapy na podstawie statystyk.
Problem z zapytaniem Hive daje niepoprawny wynik, jeśli zapytanie ma warunek sprzężenia, a zaangażowane tabele mają wartości null lub puste.
Przyczyna Czasami może wystąpić problem związany z wartościami null, jeśli tabele biorące udział w zapytaniu mają wiele wartości null. Usługa Hive nieprawidłowo przeprowadza optymalizację zapytań z zaangażowanymi wartościami null, co powoduje nieprawidłowe wyniki.
Rozwiązanie Zalecamy wypróbowanie ustawienia właściwości
set hive.cbo.returnpath.hiveop=true
na poziomie sesji, jeśli otrzymasz nieprawidłowe wyniki. Ta konfiguracja wprowadza filtrowanie bez wartości null dla kluczy sprzężenia. Jeśli tabele miały wiele wartości null, aby zoptymalizować operację sprzężenia między wieloma tabelami, możemy włączyć tę konfigurację tak, aby uwzględniała tylko wartości nie null.Problem z zapytaniem Hive daje niepoprawny wynik, jeśli zapytanie ma wiele warunków sprzężenia.
Przyczyna : Czasami tez generuje złe plany środowiska uruchomieniowego, gdy istnieją te same sprzężenia wiele czasu z sprzężeniami mapowania.
Rozwiązanie Istnieje prawdopodobieństwo uzyskania nieprawidłowych wyników po ustawieniu
hive.merge.nway.joins
wartości false. Spróbuj ustawić wartość true tylko dla zapytania, którego dotyczy problem. Ułatwia to wykonywanie zapytań o wiele sprzężeń w tym samym warunku, scalanie łączy się ze sobą w jeden operator sprzężenia. Ta metoda jest przydatna, jeśli duże sprzężenia mieszania pozwalają uniknąć fazy przetasowania.Problem: istnieje wzrost czasu wykonywania zapytania o dzień w porównaniu z wcześniejszymi przebiegami.
Przyczyna tego problemu może wystąpić, jeśli występuje wzrost większej liczby małych plików. Dlatego gałąź zajmuje trochę czasu podczas odczytywania wszystkich plików w celu przetworzenia danych, co powoduje zwiększenie czasu wykonywania.
Rozwiązanie Upewnij się, że kompaktacja jest często uruchamiana dla tabel zarządzanych. Ten krok pozwala uniknąć małych plików i zwiększyć wydajność.
Link referencyjny: Transakcje Hive — Apache Hive — Apache Software Foundation.
Problem z zapytaniem Hive daje niepoprawny wynik, gdy klient korzysta z warunku sprzężenia w tabeli zarządzanego kwasu i zarządzanej tabeli innej niż ACID.
Przyczyna z programu HIVE 3 do wewnątrz jest ściśle żądana, aby wszystkie zarządzane tabele były zachowywane jako tabela kwasów. A jeśli chcemy zachować ją jako tabelę kwasów, format tabeli musi być orc i jest to główne kryteria. Jeśli jednak wyłączymy ścisłą właściwość tabeli zarządzanej "hive.strict.managed.tables" na wartość false, możemy utworzyć zarządzaną tabelę inną niż ACID. Niektórzy klienci tworzą zewnętrzną tabelę ORC lub po migracji tabeli przekonwertowanej na tabelę zewnętrzną i wyłączają ścisłą właściwość tabeli zarządzanej i konwertują ją na zarządzaną tabelę. W tym momencie tabela została przekonwertowana na format orc niezarządzany przez acid.
Optymalizacja rozwiązania Hive pójdzie nie tak, jeśli połączysz tabelę z tabelą ORC niezarządzaną przez kwas z tabelą orc zarządzaną kwasem.
Jeśli konwertujesz tabelę zewnętrzną na zarządzaną tabelę,
- Nie należy ustawiać właściwości "hive.strict.managed.tables" na wartość false. W przypadku ustawienia można utworzyć tabelę zarządzaną przez inny niż ACID, ale nie jest ona żądana w programie HIVE-3
- Przekonwertuj tabelę zewnętrzną na tabelę zarządzaną przy użyciu następującego polecenia alter zamiast
alter table <table_name> set TBLPROPERTIES ('EXTERNAL'='false');
alter table rt set TBLPROPERTIES ('EXTERNAL'='false', 'transactional'='true');
Przewodnik po rozwiązywaniu problemów
Przewodnik rozwiązywania problemów z obciążeniami hive w usłudze HDInsight 3.6 do 4.0 zawiera odpowiedzi na typowe problemy występujące podczas migrowania obciążeń hive z usługi HDInsight 3.6 do usługi HDInsight 4.0.