복붙노트

[HADOOP] 하둡 스트리밍 파일 읽기

HADOOP

하둡 스트리밍 파일 읽기

내 매퍼에서 보조 파일을 읽으려고 여기 내 코드와 명령입니다입니다.

매퍼 코드 :

#!/usr/bin/env python

from itertools import combinations
from operator import itemgetter
import sys

storage = {}

with open('inputData', 'r') as inputFile:
    for line in inputFile:
         first, second = line.split()
         storage[(first, second)] = 0

for line in sys.stdin:
    do_something()

그리고 여기 내 명령은 다음과 같습니다

hadoop jar hadoop-streaming-2.7.1.jar \
-D stream.num.map.output.key.fields=2 \
-D mapred.output.key.comparator.class=org.apache.hadoop.mapred.lib.KeyFieldBasedComparator \
-D mapred.text.key.comparator.options='-k1,1 -k2,2' \
-D mapred.map.tasks=20 \
-D mapred.reduce.tasks=10 \
-partitioner org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner \
-mapper mapper.py -file mapper.py \
-reducer reducer.py -file reducer.py \
-file inputData \
-input /data \
-output /result

하지만 내 매퍼는 표준 입력에서 읽을 실패하는 것을 나타냅니다이 오류를 점점 계속. 읽기 파일 부분을 삭제 한 후, 내 코드가 작동, 그래서 오류가 발생하는 위치 나 장소를 pinppointed,하지만 나는 그것을 읽는 올바른 방법이 될해야하는지 모른다. 아무도 도와 드릴까요?

 Error: java.lang.RuntimeException: PipeMapRed.waitOutputThreads():

해결법

  1. ==============================

    1.당신이 점점 오류는 매퍼가 너무 오랫동안 자신의 표준 출력 스트림에 쓰지 못했습니다 의미한다.

    당신이 점점 오류는 매퍼가 너무 오랫동안 자신의 표준 출력 스트림에 쓰지 못했습니다 의미한다.

    예를 들어, 오류에 대한 일반적인 이유는 do_something () 함수에서, 특정 조건 문을 계속 포함 루프를 가지고있다. 해당 조건이 사용자의 입력 데이터에 너무 자주 일어나는 그런 때, 당신의 스크립트를 통해 실행 표준 출력으로 출력을 생성하지 않고, 연속적으로 여러 번 계속합니다. 하둡은 아무것도 보지 않고 너무 오래 기다리는 때문에 작업은 실패로 간주됩니다.

    또 다른 가능성은 입력 데이터 파일이 너무 큰 것입니다, 그리고 그것을 읽을하는 데 시간이 너무 오래 걸립니다. 그러나 나는 그것이 출력의 첫 번째 줄 앞에있는 때문이 설정 시간으로 간주됩니다 생각합니다. 그래도 확실하지 않다.

    이 문제를 해결하기 위해이 개 상대적으로 쉬운 방법이 있습니다 :

    나는 보통 내가 필터링을 필요로 데이터를 스트리밍을 피할 것 옵션 2를 해본 적이있다. 파이썬 같은 스크립트 언어는 가능한 한 작은 일을해야 함께 할 때, 특히 스트리밍. 내 사용 사례는 대부분 필터링이 이미 돼지 스크립트에서 수행 내가 자이 썬에서 사용할 수없는 뭔가가 필요합니다 아파치 돼지에서 후 처리 출력 데이터입니다.

  2. from https://stackoverflow.com/questions/35978467/reading-file-in-hadoop-streaming by cc-by-sa and MIT license