PHP 개발 사례 및 빅 데이터

대형 데이터 대용량 데이터 세트 및 복잡한 조건을 처리하는 도구와 기술을 사용하여. 처리 할 수있는 많은 양의 데이터 기술 의 MapReduce했다.

 

맵리 듀스를 사용하는 경우

MapReduce는 대량의 데이터에 관련된 문제에 특히 적합하다. 이것은 작은 블록에 작업을 나누어 된 다음 복수의 시스템에서 처리 할 수있다. 맵리 듀스는 기존의 시스템에 비해 병렬로 패치 작업을 발행하기 때문에, 솔루션은 빨라집니다.

아마 다음과 같은 시나리오는 맵리 듀스에 적용됩니다 :

(1) 수와 통계

2 마무리

3 필터

4 정렬 

아파치 하둡

이 글에서, 우리는 아파치 하둡을 사용합니다.

맵리 듀스 개발 솔루션, 그것은 이미 사실상의 표준이다 또한 무료 오픈 소스 소프트웨어, 하둡을 사용하는 것이 좋습니다.

또한 아마존, 구글과 마이크로 소프트 및 기타 클라우드 제공 업체에 임대 또는 하둡 클러스터를 구축합니다.

다른 장점이 있습니다 :

확장 성 : 쉽게 새로운 처리를 추가 할 수있는 코드의 라인을 변경하지 않고, 명확 노드

비용 효율성 : 소프트웨어가 정상 정상적인 하드웨어에서 실행되기 때문에, 특별한 하드웨어와 독특한 필요하지 않습니다

유연성 : 패턴이없는. 모든 데이터 구조는 많은 문제없이도 데이터 소스의 복수의 조합을 처리하거나 할 수있다.

결함 허용을 : 당신은 문제 노드가있는 경우, 다른 노드가 작업, 처리를 계속하기 위해 전체 클러스터를받을 수 있습니다.

또한, 컨테이너는 여전히 사용자의 매퍼 및 감속기 스크립트 언어의 개발을위한 선택의 자유를 제공, 하둡 응용 프로그램의 "흐름"이라고 지원합니다.

이 문서에서 우리는 주요 개발 언어를 할 PHP를 사용합니다.

하둡 설치 

범위를 벗어나는 아파치 하둡 설치 구성. 당신은 쉽게 온라인 기사를 많이 찾을 플랫폼을 소유 할 수 있습니다. 일을 간단하게 유지하기 위해, 우리는 빅 데이터와 관련된 것들에 대해 설명합니다.

매퍼 (매퍼)

매퍼 작업은 키 - 값 쌍의 연속으로 입력하는 것입니다. 예를 들어, 경우에 워드 카운터 입력 라인 시리즈. 우리는 단어로 구분 (예 : 키로서 : 단어, 값 : 1) 키 - 값 쌍으로 그들을 설정, 다음과 같다 :

1

물 1

1 일

1 일

물 1

1 일

... 1

그런 다음,이 쌍은 다음 단계의 감속기로 전송됩니다.

감속기

감속기 태스크 (정렬) 권리를 검색하고, 반복을 원하는 출력으로 변환된다. 번호 (값)이 워드, 그들 (키) 및 최종 개수를 더한 단어 복용 워드 카운터의 예에서. 으로는 다음과 같습니다 :

물 2

1

3

매핑 및 전체 프로세스를 줄일 수는 다음 표에서이 같은 비트 살펴 본다 :

 

워드 카운터를 할 PHP를 사용하여

우리는 세계가 시작에 맵리 듀스 예에 "Hello World"를 의지하고, 그 단어 카운터의 간단한 구현입니다. 우리가 다루는 일부 데이터가 필요합니다. 우리는 실험 책 모비 딕에 개시되어있다 않습니다.

이 책은 다음과 같은 명령을 실행 다운로드 :

wget을 http://www.gutenberg.org/cache ... 1.TXT

HDFS에서 작업 디렉토리 (하둡 분산 파일 시스템) 만들기

하둡 DFS -mkdir 단어 수

우리의 PHP 코드는 매퍼를 시작

#!는 / usr / 빈 / php에 
<? php에 
    라인을 통해 // 반복 처리 
    ($ 라인 =는 fgets (STDIN는)) {동안 
        // 제거 앞뒤 
        $ 라인 = LTRIM ($ 라인); 
        $ 라인 = RTRIM ($ 행); 

        // 즉 라인을 분할 
        $ = preg_split 단어를 ( '/ \ S /'$ 라인 -1 PREG_SPLIT_NO_EMPTY); 
        //으로 반복 단어를 통해 
        foreach는 ($ $ 키와 단어) { 
            표준 출력 // 인쇄 단어 (키) 
            출력이 사용됩니다 // 
            // 감소 (reducer.php) 단계 
            // 단어 (키) 탭 - 분리 된 단어 수 (1) 
            의 printf ( "% S \ t % D \ n"$ 키, 1); 
        } 
    } 
?>

다음은 코드 감속기입니다.

#!는 / usr / 빈 / php에 
<PHP는? 
    $ last_key = NULL; 
    $ running_total = 0; 

    // 라인을 반복 처리는 
    ($ 라인 =는 fgets (STDIN는)) {동안 
        // 제거 선행 및 후행 
        $ 라인 = LTRIM ($ 라인); 
        $ 라인 = RTRIM ($ 행); 
        // 키에 분할 선 및 계산 
        목록 ($ 키 $ 카운트) = ( "\ t", $ 선) 폭발; 
        때문에 //이 경우 다른 구조는 작동 
        // 하둡이 키에 의해 매퍼 출력을 정렬 
        감속기로 보내기 전에 // 
        // 마지막으로 검색 한 키가 동일한 경우 
        수신 된 현재의 키와 //  
        ($ last_key 경우 === $ 키) {
            // 증가 실행 키의 총 
            $의 running_total를 + = $ 카운트; 
        사용한다} else { 
            ($ last_key = NULL!) 경우 
                // 출력 이전 키 및 누계 
                의 printf ( "% S \ t % D \ n"$ last_key, $ running_total); 
            // 마지막 키 실행 전체 재설정 
            새 키와 값 할당하여 // 
            $ last_key = $ 키를; 
            $ running_total = $ 카운트; 
        } 
    } 
?>

당신은 쉽게 로컬 스크립트 테스트하기 위해 특정 명령 및 파이프 라인의 조합을 사용할 수 있습니다.

-n1000 pg2701.txt 머리 | ./mapper.php | 종류 | ./reducer.php

우리는 아파치 하둡 클러스터에서 실행 :

하둡 항아리 /usr/hadoop/2.5.1/libexec/lib/hadoop-streaming-2.5.1.jar \ 
 -mapper "./mapper.php" 
 -reducer "./reducer.php" 
 "안녕하세요 / mobydick -input. "TXT 
 - 출력"안녕하세요 / 결과 "

출력은 인사 / 결과, 다음과 같은 명령을 실행하여 볼 수있는 폴더에 저장됩니다

HDFS DFS - 고양이 헬로 / 결과 / 00000 파트

금의 연평균 가격을 계산

다음 예는 데이터 세트가 상대적으로 작더라도, 동일한 논리가 쉽게 수백 갖는 데이터 포인트의 집합에 적용 할 수 있고,보다 구체적인 예이다. 우리는 지난 50 년을 평균 연간 금 가격을 계산하려고합니다. 시스템을 원하는 빅 데이터를 배우고 , 당신은 빅 데이터 교환 기술에 가입하실 수 있습니다 것은 Junyang 놨는데 배울 : (522) 189 (307) , 추가를 환영 과정을 이해

우리는 데이터 세트를 다운로드 :

wget을 HTTPS : //raw.githubusercontent. ... a.csv

HDFS에서 작업 디렉토리 (하둡 분산 파일 시스템) 만들기

하둡 DFS -mkdir goldprice

HDFS에 다운로드 된 데이터 세트를 복사

하둡 DFS -copyFromLocal ./data.csv goldprice / data.csv

내 감속기는 다음과 같습니다

#!는 / usr / 빈 / php에 
<? php에 
    라인을 통해 // 반복 처리 
    ($ 라인 =는 fgets (STDIN는)) {동안 
        // 제거 앞뒤 
        $ 라인 = LTRIM ($ 라인); 
        $ 라인 = RTRIM ($ 행); 

        캡처 년 골드 값을 // 정규 표현식 
        는 preg_match ( "/^(.*?)\-(?:.*),(.*)$/", $ 라인, $ 일치); 

        경우 ($ 일치) { 
            // 키 연도 값 : 금 가격 
            의 printf ( "% S \ t % .3f \ n"$ 일치 [1], $ 일치 [2]); 
        } 
    } 
?>

우리가 항목과 평균의 수를 계산해야하기 때문에, 약간 수정도 감속기.

#!는 / usr / 빈 / php에 
<PHP는? 
    $ last_key = NULL; 
    $ running_total = 0; 
    $ running_average는 = 0; 
    $ NUMBER_OF_ITEMS = 0; 

    // 라인을 반복 처리는 
    ($ 라인 =는 fgets (STDIN는)) {동안 
        // 제거 선행 및 후행 
        $ 라인 = LTRIM ($ 라인); 
        $ 라인 = RTRIM ($ 행); 

        // 키에 분할 선 및 계산 
        목록 ($ 키 $ 카운트) = ( "\ t", $ 선) 폭발; 

        // 마지막으로 검색 한 키가 동일한 경우 
        수신 된 현재의 키와 // 
        경우는 ($ last_key === $ 키) { 
            항목의 // 증가 번호 
            $ NUMBER_OF_ITEMS ++;
            // 키의 총 실행 증가
            $ running_total + = $ 카운트; 
            // (재) 해당 키에 대한 계산 된 평균 
            $ running_average = $ running_total / $ NUMBER_OF_ITEMS; 
        } 다른 { 
            ($ last_key = NULL!) 경우 
                // 출력 이전 키와 실행 평균 
                의 printf ( "% S \ t % .4f \ n", $ last_key, $ running_average); 
            // 리셋 키, 총을 실행하는 평균 실행 
            // 및 항목의 수 
            $ last_key = $ 키; 
            $ NUMBER_OF_ITEMS = 1; 
            $ running_total = $ 카운트; 
            $ running_average = $ 카운트; 
        } 
    } 

    경우 ($ last_key! = NULL) 
        // 출력 이전 키와 실행 평균 
        의 printf ( "% S \ t % .3f \ n", $ last_key, $ running_average); 
?>

워드 카운트 샘플로서, 우리는 로컬에서 테스트 할 수 있습니다

-n1000 data.csv 머리 | ./mapper.php | 종류 | ./reducer.php

클러스터 하둡에 대한 최종 실행을

하둡 항아리 /usr/hadoop/2.5.1/libexec/lib/hadoop-streaming-2.5.1.jar \ 
 -mapper "./mapper.php" 
 -reducer "./reducer.php" 
 "goldprice / 데이터 -input. CSV " 
 -output"goldprice / 결과 "

보기 평균값

HDFS - 고양이 goldprice DFS / 결과 / 00000 파트

작은 보상 : 차트를 생성

우리는 종종 그래프로 발생합니다. 이 데모를 위해, 나는,의 gnuplot 사용합니다 당신은 다른 흥미로운 일을 사용할 수 있습니다.

첫 번째 결과는 로컬로 반환됩니다 :

HDFS DFS -get goldprice / 결과 / 00000 파트 gold.dat

GNU 플롯 구성 파일 (gold.plot)를 만들고 다음을 복사합니다

금 가격을 생성 #의 gnuplot 스크립트 파일은 
터미널 PNG의 설정 
설정된 출력 "chart.jpg" 
세트 스타일의 데이터 라인 
nokey 설정 
설정 그리드 
설정 제목 "금 가격" 
세트 xlabel "년" 
설정 ylabel "가격" 
음모 "gold.dat을"

차트를 생성합니다 :

의 gnuplot gold.plot

이것은의 chart.jpg라는 이름의 파일을 생성합니다.

게시 된 142 개 원래 기사 · 원의 칭찬 0 · 조회수 9737

추천

출처blog.csdn.net/mnbvxiaoxin/article/details/104334295