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