Estender SequenceFileInputFormat para incluir o nome do arquivo + deslocamento

Eu gostaria de ser capaz de criar um InputFormat personalizado que lê arquivos de seqüência, mas adicionalmente expõe o caminho do arquivo e deslocamento dentro desse arquivo onde o registro está localizado.

Para dar um passo atrás, aqui está o caso de uso: Eu tenho um arquivo de seqüência contendo dados de tamanho variável. As chaves são praticamente irrelevantes, e os valores são de até um par de megabytes contendo uma variedade de campos diferentes. Eu gostaria de indexar alguns desses campos no elasticsearch junto com o nome do arquivo e o deslocamento. Dessa forma, posso consultar esses campos do elasticsearch e, em seguida, usar o nome do arquivo e o deslocamento para voltar ao arquivo de sequência e obter o registro original, em vez de armazenar tudo no ES.

Eu tenho todo esse processo funcionando como um único programa java. A classe SequenceFile.Reader fornece convenientementegetPosition eseek métodos para fazer isso acontecer.

No entanto, haverá eventualmente muitos terabytes de dados envolvidos, portanto, precisarei convertê-lo em um trabalho MapReduce (provavelmente somente no Mapeamento). Como as chaves reais no arquivo de sequência são irrelevantes, a abordagem que esperava era criar um InputFormat personalizado que estendesse ou de alguma forma utilizasse o SquenceFileInputFormat, mas, em vez de retornar as chaves reais, retornasse uma chave composta que consistisse no arquivo. e offset.

No entanto, isso está provando ser mais difícil na prática. Parece que deveria ser possível, mas dadas as APIs reais e o que está exposto, é complicado. Alguma ideia? Talvez uma abordagem alternativa que eu deveria tomar?

questionAnswers(1)

yourAnswerToTheQuestion