Python + Hadoop 프로그램을 작성 배포

출처: 인터넷
작성자: 사용자
키워드: 쓰기 자바 전달 디버그

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

관련 문서

연락처

이 페이지의 내용은 인터넷에서 가져온 것이므로 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.