MapReduce와 HDFs
의 간략 한 소개
Hadoop은 무엇입니까?
& http://www.aliyun.com/zixun/aggregation/37954.html "> nbsp; 구글 사업 MapReduce 및 분산 파일 시스템 구글 파일 시스템이 필요 하다 고 관련 논문을 게시에 대 한 프로그래밍 모델을 제안 (Google 연구의 웹 사이트에서 사용할 수: GFS, MapReduce). 더 그 커팅 및 마이크 Cafarella는 두 논문 검색 개발할 때 엔진 Nutch, MapReduce와 HDFs Hadoop 함께 동일한 이름의.
MapReduce의 데이터 흐름은 다음 그림에 표시 된, 원래 처리 매퍼, 그리고 파티션 정렬에 의해 감속 기 도착, 최종 결과 출력.
Hadoop에서 사진: 확실 한 가이드
Hadoop 스트리밍 원리
자바, Hadoop 자체 개발 프로그램, 자바에서 작성 해야 하지만 hadoop 스트리밍, 우리 Hadoop 실행할 수 있도록 모든 언어로 프로그램을 작성할 수 있습니다.
Hadoop의 GitHub repo에서 스트리밍 하는 Hadoop에 대 한 관련 소스 코드를 볼 수 있습니다. 매퍼 및 감속 기 작성 된 자바 프로그램을 다른 언어로 작성 된 전달 간단 하 게 말해서, (Hadoop의 *- Streaming.jar), 자바 프로그램은 씨 일, 맵, 표준 입력을 통해 전달 된 결과 입력 그리고 Hadoop, STDOUT 데이터를 출력 하는 매퍼 실행 하려면 다른 프로세스를 만들기에 대 한 책임 파티션 및 정렬 한 다음 감속 기, Stdin/stdout 최종 결과를 통해 동일을 실행 하는 프로세스를 엽니다. 따라서, 우리는 단지 데이터를 수신 하 여 분산된 프로그램 실행 Stdout, hadoop이 Java 래퍼를 통해 스트리밍에 처리 된 데이터 출력, 중간에 지루한 단계를 해결 하는 데 도움이 stdin 통해 프로그램에서 다른 언어로 작성 해야 합니다.
Hadoop에서 사진: 확실 한 가이드
원칙적에서으로 처리할 수 있습니다 수 있습니다 또한 매퍼 또는 리눅스 프로그램 (awk, grep, 고양이)에 대 한 감속 기 또는 자바를 작성 하는 특정 형식에서 클래스 매퍼 및 감속 기, 쓰는 데 stdio 언어 사용 수 있습니다. 따라서, 매퍼 및 감속 기 또한 필요가 없습니다 프로시저의 동일한 클래스입니다.
Hadoop 스트리밍의 장단점은 좋아하는 언어에서 MapReduce 프로그램을 작성할 수 있습니다 (즉, 당신은 필요가 없습니다 쓰기 자바 XD) 자바 씨 프로그램 같은 라이브러리 전체를 잔뜩 하 고 코드에서 구성의 무리를 것 들을 많이 stdio를 추상화는, 편의 디버깅 라이브러리 종속성, 없기 때문에 코드의 양을 상당히 감소와 분리 될 수 있다 Hadoop에서 먼저 디버깅 결점 수만 제어 하는 로컬 파이프 시뮬레이션에는 API를 사용 하 여 코드에서 자바 프로그램과 달리 명령줄 매개 변수를 통해 MapReduce 프레임 워크 약한 제어, 처리의 층의 중간 넘어 몇 가지, 효율성은 상대적으로 느릴 것 이다
그래서 Hadoop 스트리밍 더 나은 파이썬에서 한 백 또는 2 백 라인으로 스크립트를 작성 같은 간단한 작업을 위해 적합 하다. 프로젝트는 더 복잡 하다 또는 더 최적화 해야, 스트리밍의 사용 장소의 일부 경향이 있을 것입니다.
Python
에서 간단한 Hadoop 스트리밍 프로그램을 작성 하는
여기 두 가지 예입니다.
마이클 Noll 단어 수 프로그램 hadoop: 확실 한 가이드 루틴
Python을 사용 하 여 Hadoop 스트리밍 프로그램을 작성 하는 것에 대 한 참고 몇 가지 있다:
반복기를 사용 하는 반복기는 stdin을 피하기 위해 최대한의 사용의 경우
입력의 저장 메모리에 많은 수, 그렇지 않으면 그것은 심각 하 게 줄일 수 것입니다 스트리밍 성능 키와 값을 분할 하지 도움이 전달, 그냥 문자열에 전달 수동으로 분할 stdin에서 데이터의 각 행의 끝을 보인다 당신의 코드 ()를 호출 해야 \ 기록한 보험 일반적으로 Rstrip ()의 키-값 쌍을 처리 하는 대신 K V 목록 제거 사용 해야 Itemgetter와 GroupBy를 사용 하 여 그룹의는 같은 k v 쌍, 자바 같은 텍스트 형 키와 값으로 iterable 효과를 줄일 수 있도록 수 있습니다. Itemgetter는 람다 식 보다 더 효율적인, 그래서 요구 사항을 매우 복잡 한 있다면, 더 나은 itemgetter를 사용 하 여 보십시오.
내가 쓴 Hadoop 스트리밍 프로그램에 대 한 기본 서식 파일은
#! / usr/빈/환경을 파이썬 #-*-코딩: u t f-8-*-"" "일부 설명 여기..." "sysfrom 연산자 가져오기 Itemgetterfrom 가져오기 그것 Ertools 가져오기 groupbydef read_input (파일): "" "읽기 입력 및 분할." "File:yield Line.rstrip ()에서 라인. 분할 ('t') d EF Main (): 데이터 키, GroupBy (데이터, Itemgetter (0))에서 Kviter Read_input (Sys.stdin) =: # 일부 코드 여기. 만약 __name__ = = "__main__": Main ()
입력된 출력 형식 기본 컨트롤 경우, 주로 Read_input ()에서 조정 됩니다.
로컬 디버깅
Hadoop 스트리밍에 대 한 로컬 디버깅 파이썬 프로그램에 대 한 기본 패턴은:
$ 고양이 < 입력된 경로 > | Python < 매퍼 스크립트 경로 > | 정렬-t $ ' t '-k1, 1 | Python < 감속 기 스크립트 경로 >>< 출력 경로 >
추가 고양이 사용 하지 않으려는 경우 사용할 수 있습니다 또는 < 방향
$ python < 매퍼 스크립트 경로 ><< 입력된 경로 > | 정렬-t $ ' t '-k1, 1 | Python < 감속 기 스크립트 경로 >>< 출력 경로 >
여기 몇 가지 포인트를 참고:
키와 값을 정렬 하려면, 키로 키에서 첫 번째 분할을 분할 하는 탭에 따라 기본적으로 Hadoop은 그래서 여기 사용
정렬-t $ ' t '-k1, 1
시뮬레이션 합니다. 만약 당신이 다른 요구 사항, Hadoop 스트리밍 주실 때 로컬 디버깅 조정 될 수 있다, 주로 정렬 매개 변수를 조정 하 여 명령줄 인수를 조정할 수 있습니다. 따라서, 로컬 디버깅에 대해 잘 알고 있어야이 좋습니다 정렬 명령 사용 하 여 마스터.
파이썬 스크립트에 오두막을 추가 그들에 게 실행 권한을 추가 하는 경우 사용할 수 있습니다 또한 같은
/mapper.py
대체 하기
파이썬 mapper.py
원본 링크: http://www.cnblogs.com/joyeecheung/p/3757915.html