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
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.
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ół
- 1. Jak automatycznie załadować widok kolekcji?
- 2. Jak automatycznie ładować dane w pakiecie R?
- 3. jak zamienić postacie w ulu?
- 4. Jak załadować dane początkowe w MongoDB?
- 5. Jak załadować dane treningowe w PyBrain?
- 6. Literał tablicowy w ulu
- 7. Pobierz sysdate -1 w ulu
- 8. Zapytanie rekursywne w ulu
- 9. Explode tablicy Struct w Ulu
- 10. Jak automatycznie załadować index.html w podkatalogach z Apache 2
- 11. Jak załadować zgrupowane dane za pomocą SSIS
- 12. Jak załadować dane JSON do składnika Angular2
- 13. Jak poprawnie zapisać i załadować dane numpy.array()?
- 14. jak załadować dane infile na Amazon RDS?
- 15. Jak mogę skompilować ulu UDF
- 16. Jak zmienić format daty w ulu?
- 17. Jak zdefiniować zagnieżdżone elementy kolekcji w ulu
- 18. Zmienna typu mapy w ulu
- 19. Automatycznie dołącz brakujące dane w Highcharts JS
- 20. Program liczenia słów w Ulu
- 21. Obsługa wartości NULL w ulu
- 22. Konwersja ciąg timestamp w Ulu
- 23. Jak automatycznie ponownie załadować stronę internetową o określonej godzinie?
- 24. Jak załadować dane z pliku do testu jednostkowego w pythonie?
- 25. Jak załadować relację jeden-do-wielu w programie odwzorowującym dane?
- 26. Jak automatycznie ponownie załadować Django po zmianie plików?
- 27. Dane podstawowe: Nie można załadować modelu
- 28. Jak napisać podzapytanie w oświadczeniu select w ulu
- 29. Encog - Jak załadować dane treningowe dla sieci neuronowej
- 30. Jak mogę załadować dane do BigQuery bez błędu formatu ProtoBuf?
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 –
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
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. –