2013-01-17 8 views
5

ostatnio Chcę załadować pliki dziennika do tabel ula, chcę narzędzie, które może odczytać dane z określonego katalogu i załadować je do gałęzi automatycznie. Ten katalog może zawierać wiele podkatalogów, na przykład określony katalog to "/ log", a podkatalogi to "/ log/20130115", "/ log/20130116", "/ log/201301017". Czy istnieje kilka narzędzi ETL, które mogą osiągnąć funkcję, która: po zapisaniu nowych danych w określonym katalogu, narzędzie może automatycznie wykryć te dane i załadować je do tabeli ula. Czy istnieją takie narzędzia, czy muszę sam napisać scenariusz?jak załadować dane w ulu automatycznie

Odpowiedz

4

Możesz to łatwo zrobić za pomocą zewnętrznych tablic Hive i dzielić swój stół według dnia. Na przykład można utworzyć tabelę jako takie:

create external table mytable(...) 
partitioned by (day string) 
location '/user/hive/warehouse/mytable'; 

To będzie zasadniczo utworzyć pusty stolik w metastore i sprawiają, że wskazują na /user/hive/warehouse/mytable.

Następnie można załadować swoje dane w tym katalogu z kluczem Format = wartość gdzie klucz jest imię i nazwisko (tutaj „dzień”) partycja i jest wartością z partycji. Na przykład:

hadoop fs -put /log/20130115 /user/hive/warehouse/mytable/day=20130115 

Gdy dane są tam załadowany, to w katalogu HDFS, ale metastore Hive jeszcze nie wie, że należy on do stołu, dzięki czemu można je dodać w ten sposób:

alter table mytable add partition(day='20130115'); 

Powinieneś być gotowy, metastore zostanie zaktualizowany twoją nową partycją, a teraz możesz zapytać o tabelę na tej partycji.

Powinno to być trywialna do skryptu, można utworzyć zadanie cron działa raz dziennie, która będzie robić te polecenia w kolejności i znaleźć partycji, aby załadować z komendy date, na przykład ciągle robi to polecenie:

hadoop fs -test /log/`date +%Y%m%d` 

i sprawdzenie, czy $? jest równe 0, powie Ci, czy plik istnieje, a jeśli tak, możesz go przenieść i dodać partycję zgodnie z powyższym opisem.

+0

dzięki dużo, w rzeczywistości, mam kolejne pytanie, w ten sposób mogę załadować mój pliki dziennika podzielone przez daty na tabele ula, jednak mój szef poprosił mnie o znalezienie podejścia lub narzędzia do załadowania danych, co oznacza: zakładając, że istnieje pewien katalog o nazwie "/ log", ul będzie cały czas wyszukiwał ten katalog , po wygenerowaniu nowych danych, może/log/20130118,/log/20130119, gałąź automatycznie doda tę partycję i załaduje plik dziennika, taki jak/20130118 lub/20130119, do partycji tabeli, jak mogę to osiągnąć, proście o wybaczenie –

+0

Po określeniu słowa kluczowego 'ZEWNĘTRZNE' Twoje dane nie są kopiowane gdziekolwiek i pozostają w miejscu, w którym je umieściłeś. (Kiedy nie podasz 'ZEWNĘTRZNE', Hive kopiuje dane do swojej domyślnej lokalizacji). O ile mi wiadomo, za każdym razem, gdy dodasz plik do folderu określonego przez 'LOCATION', a następnie zapytasz o tabelę, nowe dane powinny być widoczne. Minęło trochę czasu odkąd bawiłem się z Hive, więc może @Charles Menguy może to potwierdzić? – Pieterjan

+0

Nie jestem w 100% pewny, że rozumiem, co chcesz osiągnąć, możesz edytować swoje pytanie z większą ilością szczegółów?Jeśli chcesz tylko załadować pliki do tabeli bez partycji daty, to @Pieterjan ma rację, możesz po prostu umieścić pliki w katalogu głównym tabeli w HDFS i nie musisz zmieniać tabeli, Hive wybierze bezpośrednio to. –

1

Można użyć polecenia LOAD DATA dostarczonego przez Hive. Dokładnie pasuje do twojego przypadku użycia. Określ katalog w lokalnym systemie plików i stwórz z niego tablice Hive.

Przykład użycia - LOAD DATA LOCAL INPATH '/ home/user/some-katalogu' ZASTĄPIĆ INTO stół

Powiązane problemy