복붙노트

[HADOOP] Hadoop 스트리밍 매퍼 바이트 오프셋이 생성되지 않음

HADOOP

Hadoop 스트리밍 매퍼 바이트 오프셋이 생성되지 않음

스트리밍 하둡 작업을 실행 중이고 바이트 오프셋이 매퍼의 출력 (키)으로 생성되지 않고 있습니다. 예상대로입니다. 명령 :

$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

내 이해는 TextInputFormat이 기본값이므로 -inputformat 옵션없이 위의 명령을 시도했다. 또한 -D를 제거하려고 시도했지만 스트리밍 API를 사용할 때 바이트 오프셋을 키로 가져 오는 것이 필요하다고 들었습니다.

그게 가치있는 일이라면, 나는 단지 학생 프로젝트를 위해 Hadoop을 실험하고있다. 현재 mapper는 HDFS에있는 파일의 매우 간단한 파이썬 grep입니다. 각 라인은 제공된 regex와 일치시킵니다 :

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

바로 지금, 감속기에 출력되는 유일한 것은 일치하는 선입니다. 탭 또는 공백으로 구분 된 키 / 값 쌍이 필요합니다. 여기서 key = byte_offset 및 value = regex_line_match입니다.

아무도 나에게 말해 주거나 이것이 왜 일어나고 있는지 제안 할 수 있습니까?

또한, 저는이 두 가지 (관련) 질문에 대답하는 데 관심이 있습니다.

이 질문들 중 하나라도 "예"일 경우 어떻게됩니까? (파이썬, 또는 일반적으로 스트리밍).

편집하다: -inputformat org.apache.hadoop.mapred.lib.NLineInputFormat을 사용하면 바이트 오프셋은 매퍼 출력의 키로 생성됩니다. 그러나 작업은 완료하는 데 정말로 오랜 시간이 걸립니다 (그리고 입력 파일은 약 50 줄의 텍스트 만 포함하고 있습니다!).

해결법

    from https://stackoverflow.com/questions/15600495/hadoop-streaming-mapper-byte-offset-not-being-generated by cc-by-sa and MIT license