Extienda SequenceFileInputFormat para incluir el nombre del archivo + desplazamiento

Me gustaría poder crear un InputFormat personalizado que lea los archivos de secuencia, pero además expone la ruta del archivo y el desplazamiento dentro de ese archivo donde se encuentra el registro.

Para dar un paso atrás, aquí está el caso de uso: tengo un archivo de secuencia que contiene datos de tamaño variable. Las claves son en su mayoría irrelevantes, y los valores son hasta un par de megabytes que contienen una variedad de campos diferentes. Me gustaría indexar algunos de estos campos en elasticsearch junto con el nombre del archivo y la compensación. De esta manera, puedo consultar esos campos en elasticsearch, y luego usar el nombre y el desplazamiento del archivo para volver al archivo de secuencia y obtener el registro original, en lugar de almacenar todo en ES.

Tengo todo este proceso trabajando como un solo programa java. La clase SequenceFile.Reader da convenientementegetPosition yseek Métodos para que esto suceda.

Sin embargo, eventualmente habrá muchos terabytes de datos involucrados, por lo que tendré que convertir esto en un trabajo MapReduce (probablemente solo para mapas). Dado que las claves reales en el archivo de secuencia son irrelevantes, el enfoque que esperaba adoptar sería crear un InputFormat personalizado que extienda o utilice de alguna manera el SquenceFileInputFormat, pero en lugar de devolver las claves reales, en cambio, devuelve una clave compuesta que consiste en el archivo y desplazamiento.

Sin embargo, eso está demostrando ser más difícil en la práctica. Parece que debería ser posible, pero dadas las API reales y lo que está expuesto, es complicado. ¿Algunas ideas? Tal vez un enfoque alternativo que debería tomar?

Respuestas a la pregunta(1)

Su respuesta a la pregunta