Vorrei poter creare un InputFormat personalizzato che legge i file di sequenza, ma espone inoltre il percorso e l'offset del file all'interno del file in cui si trova il record.Estendi SequenceFileInputFormat per includere nome file + offset
Per fare un passo indietro, ecco il caso d'uso: Ho un file di sequenza contenente dati di dimensioni variabili. Le chiavi sono per lo più irrilevanti e i valori sono fino a un paio di megabyte contenenti una varietà di campi diversi. Vorrei indicizzare alcuni di questi campi in elasticsearch insieme al nome del file e all'offset. In questo modo, posso interrogare quei campi da elasticsearch, e quindi usare il nome e l'offset del file per tornare al file di sequenza e ottenere il record originale, invece di archiviarlo in ES.
Ho questo intero processo che funziona come un singolo programma java. La classe SequenceFile.Reader fornisce opportunamente i metodi getPosition
e seek
per far sì che ciò accada.
Tuttavia, saranno coinvolti molti terabyte di dati, quindi sarà necessario convertirlo in un lavoro MapReduce (probabilmente solo per la mappa). Dal momento che le chiavi effettive nel file di sequenza sono irrilevanti, l'approccio che speravo di fare sarebbe stato creare un InputFormat personalizzato che estenda o utilizzi in qualche modo SquenceFileInputFormat, ma invece di restituire le chiavi effettive, restituisce invece una chiave composta costituita dal file e offset.
Tuttavia, ciò si sta dimostrando più difficile nella pratica. Sembra che dovrebbe essere possibile, ma date le API reali e ciò che è esposto, è difficile. Qualche idea? Forse un approccio alternativo che dovrei prendere?