Deslocamento de byte do mapeador de streaming do Hadoop não sendo gerado

Estou executando um fluxo de trabalho do Hadoop e os deslocamentos de byte não estão sendo gerados como saída (chaves) do mapeador, como eu esperaria também. O comando:

$HADOOP_INSTALL/bin/hadoop \
jar $HADOOP_INSTALL/contrib/streaming/hadoop-streaming-$HADOOP_VERSION.jar \
-D stream.map.input.ignoreKey=false \
-inputformat org.apache.hadoop.mapred.TextInputFormat \
-file ./mapper.py \
-file ./reducer.py \
-mapper ./mapper.py \
-reducer ./reducer.py \
-input $INPUT_DIR \
-output $OUTPUT_DIR \
-cmdenv REGEX=$REGEX

Meu entendimento é que TextInputFormat é o padrão, então eu também tentei o comando acima sem a opção -inputformat. Eu também tentei remover o -D, mas me disseram que isso é necessário para obter o deslocamento de bytes como chave ao usar a API de streaming.

Por que vale a pena, estou apenas experimentando com o Hadoop para um projeto de estudante. No momento, o mapeador é um python grep muito simples de um arquivo no HDFS, combinando cada linha com a regex fornecida:

pattern = re.compile(os.environ['REGEX'])
for line in sys.stdin:
   match = pattern.search(line)
   if (match):
      sys.stdout.write(line)

Agora, porém, a única coisa que é produzida (para o redutor) são as linhas correspondentes. Estou esperando pares de chave / valor delimitados por tabulação ou espaço em branco, em que key = byte_offset e value = regex_line_match.

Alguém pode me dizer ou sugerir porque isso está acontecendo?

Além disso, estou tão interessado em responder a essas duas perguntas (relacionadas):

É possível para um mapeador determinar manualmente o deslocamento de bytes para cada linha dos dados que está processando em relação ao arquivo ao qual os dados pertencem?É possível para um mapeador determinar o número total de bytes no arquivo ao qual os dados a serem processados ​​pertencem?

Se sim para qualquer uma dessas perguntas, como? (python, ou streaming em geral).

Editar:
Se eu usar-inputformat org.apache.hadoop.mapred.lib.NLineInputFormat então os offsets de byte são produzidos como chaves da saída do mapeador. Mas o trabalho leva umrealmente muito tempo para completar (e meu arquivo de entrada tem apenas cerca de 50 linhas de texto!).

questionAnswers(0)

yourAnswerToTheQuestion