Opis Hive: Apache Hive to technologia, która jest pewnego rodzaju “nakładką” na HDFS oraz wiele innych systemów plików. Pozwala zbudować data warehouse, wykorzystując storage na którym już pracujemy – np. właśnie HDFS.
Problem: Jak odzyskać tabelę w Hive, jeśli niechcący ją usunęliśmy?
Rozwiązanie (HDFS) #
Rozwiązanie to możemy wykorzystać, jeśli korzystamy z HDFS i mamy skonfigurowany śmietnik (Thrash).
Całość sprowadza się do 3 kroków:
- Lokalizowanie utraconych danych
- Przywrócenie metdanych w Metastore
- Załadowanie ponowne danych
Lokalizowanie danych #
Dla każdego użytkownika śmietnik znajduje się pod adresem HDFS /user/[nazwa_użytkownika]/.Trash. Znajdziemy tam, przez jakiś czas, wszystkie dane które usunęliśmy – a więc także naszą tabelę Hivową!
Pod tym adresem pojawi się folder z całą strukturą folderu tabeli, którą Hive trzymał na HDFS. Na przykład, dla użytkownika maro i tabeli maro_db.users_table, pliki będzie można znaleźć pod adresem /user/maro/.Trash/Current/user/hive/warehouse/maro_db/users_table. Zakładam tu, że na HDFS “źródłem” Hive’a jest /user/hive/warehouse.\
Przywracanie metadanych #
Niestety, mimo że mamy dostęp do danych, nie mamy jeszcze tabeli w rozumieniu Hive’a. Aby to zrobić, musimy odbudować metadane w naszym Metastore.
Aby to zrobić, tworzymy ponownie tabelę poleceniem CREATE TABLE. Ważne, aby utworzyć dokładnie taką samą tabelę (nazwa i definicje kolumn) jak była wcześniej.
Np.
CREATE TABLE maro_db.users_table (id INT, name STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
Ładowanie tabeli #
Musimy teraz załadować dane, które są w naszym śmietniku (jeśli Hive nie będzie miał dostępu do śmietnika, należy je najpierw przenieść gdzieś indziej, a następnie usunąć)
LOAD DATA INPATH "/user/maro/.Trash/Current/user/hive/warehouse/maro_db/users_table" INTO TABLE "maro_db.users_table";
Można także spróbować przekopiować dane, ale lepszym pomysłem będzie wykorzystanie dedykowanego polecenia Hive’a.
Daj koniecznie znać w komentarzu, czy materiał okazał się przydatny!
Responses