Rozszerz SequenceFileInputFormat, aby dołączyć nazwę pliku + przesunięcie

Chciałbym móc utworzyć niestandardowy format InputFormat, który odczytuje pliki sekwencji, ale dodatkowo eksponuje ścieżkę pliku i odsunięcie w tym pliku, w którym znajduje się rekord.

Aby cofnąć się o krok, oto przypadek użycia: Mam plik sekwencji zawierający dane o zmiennej wielkości. Klucze są w większości nieistotne, a ich wartości wynoszą do kilku megabajtów zawierających wiele różnych pól. Chciałbym indeksować niektóre z tych pól w elasticsearch wraz z nazwą pliku i przesunięciem. W ten sposób mogę wysłać zapytanie do tych pól z elasticsearch, a następnie użyć nazwy pliku i offsetu, aby wrócić do pliku sekwencji i uzyskać oryginalny rekord, zamiast przechowywać całość w ES.

Cały ten proces działa jak pojedynczy program Java. Klasa SequenceFile.Reader daje dogodniegetPosition iseek metody, aby to się stało.

Jednak w końcu zajmie to wiele terabajtów danych, więc będę musiał przekonwertować je na zadanie MapReduce (prawdopodobnie tylko na mapie). Ponieważ rzeczywiste klucze w pliku sekwencji są nieistotne, podejście, które miałem nadzieję wykonać, to utworzenie niestandardowego formatu InputFormat, który rozszerza lub w jakiś sposób wykorzystuje SquenceFileInputFormat, ale zamiast zwracać rzeczywiste klucze, zamiast tego zwraca klucz złożony składający się z pliku i offset.

Jednak w praktyce okazuje się to trudniejsze. Wygląda na to, że powinno być to możliwe, ale biorąc pod uwagę rzeczywiste API i to, co jest odsłonięte, jest to trudne. Jakieś pomysły? Może powinienem zastosować alternatywne podejście?

questionAnswers(1)

yourAnswerToTheQuestion