Erweitern Sie SequenceFileInputFormat um Dateiname + Offset

Ich möchte in der Lage sein, ein benutzerdefiniertes InputFormat zu erstellen, das Sequenzdateien liest, aber zusätzlich den Dateipfad und den Versatz in der Datei verfügbar macht, in der sich der Datensatz befindet.

Um einen Schritt zurück zu machen, hier der Anwendungsfall: Ich habe eine Sequenzdatei mit Daten unterschiedlicher Größe. Die Schlüssel sind größtenteils irrelevant und die Werte liegen bei bis zu einigen Megabyte, die eine Vielzahl unterschiedlicher Felder enthalten. Ich möchte einige dieser Felder in elasticsearch zusammen mit dem Dateinamen und dem Versatz indizieren. Auf diese Weise kann ich diese Felder in elasticsearch abfragen und dann den Dateinamen und den Versatz verwenden, um zur Sequenzdatei zurückzukehren und den ursprünglichen Datensatz abzurufen, anstatt das Ganze in ES zu speichern.

Ich habe diesen ganzen Prozess als ein einziges Java-Programm. Die SequenceFile.Reader-Klasse bietet praktischgetPosition undseek Methoden, um dies zu erreichen.

Irgendwann werden jedoch viele Terabyte an Daten erforderlich sein, sodass ich diese in einen MapReduce-Job konvertieren muss (wahrscheinlich nur für Karten). Da die tatsächlichen Schlüssel in der Sequenzdatei irrelevant sind, bestand der von mir erhoffte Ansatz darin, ein benutzerdefiniertes InputFormat zu erstellen, das das SquenceFileInputFormat erweitert oder auf irgendeine Weise verwendet, aber statt der tatsächlichen Schlüssel einen zusammengesetzten Schlüssel zurückgibt, der aus der Datei besteht und versetzt.

In der Praxis gestaltet sich dies jedoch schwieriger. Es scheint möglich zu sein, aber angesichts der tatsächlichen APIs und der verfügbaren Informationen ist es schwierig. Irgendwelche Ideen? Vielleicht sollte ich einen alternativen Ansatz wählen?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage