Python + (i) 하 둡 분산된 프로그램 작성: 원리 소개

출처: 인터넷
작성자: 사용자
키워드: nbsp; 쓰기 자바 통해
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 &lt; 매퍼 스크립트 경로 &gt;&lt;&lt; 입력된 경로 &gt; | 정렬-t $ ' t '-k1, 1 | Python &lt; 감속 기 스크립트 경로 &gt;&gt;&lt; 출력 경로 &gt;

여기 몇 가지 포인트를 참고:

키와 값을 정렬 하려면, 키로 키에서 첫 번째 분할을 분할 하는 탭에 따라 기본적으로 Hadoop은 그래서 여기 사용

정렬-t $ ' t '-k1, 1

시뮬레이션 합니다. 만약 당신이 다른 요구 사항, Hadoop 스트리밍 주실 때 로컬 디버깅 조정 될 수 있다, 주로 정렬 매개 변수를 조정 하 여 명령줄 인수를 조정할 수 있습니다. 따라서, 로컬 디버깅에 대해 잘 알고 있어야이 좋습니다 정렬 명령 사용 하 여 마스터.

파이썬 스크립트에 오두막을 추가 그들에 게 실행 권한을 추가 하는 경우 사용할 수 있습니다 또한 같은

/mapper.py

대체 하기

파이썬 mapper.py


원본 링크: http://www.cnblogs.com/joyeecheung/p/3757915.html
관련 문서

연락처

이 페이지의 내용은 인터넷에서 가져온 것이므로 Alibaba Cloud의 공식 의견이 아닙니다.이 페이지에서 언급 된 제품 및 서비스는 Alibaba Cloud와는 관련이 없으므로이 페이지의 내용이 골칫거리 인 경우 저희에게 알려주십시오. 우리는 5 일 근무일 이내에 이메일을 처리 할 것입니다.

커뮤니티에서 표절 사례를 발견한 경우 info-contact@alibabacloud.com 으로 관련 증거를 첨부하여 이메일을 보내주시기 바랍니다. 당사 직원이 영업일 기준 5일 내에 연락 드리도록 하겠습니다.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.