溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么用PHP寫Hadoop的MapReduce程序

發(fā)布時(shí)間:2021-08-25 10:03:31 來(lái)源:億速云 閱讀:144 作者:chen 欄目:云計(jì)算

這篇文章主要介紹“怎么用PHP寫Hadoop的MapReduce程序”,在日常操作中,相信很多人在怎么用PHP寫Hadoop的MapReduce程序問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”怎么用PHP寫Hadoop的MapReduce程序”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

Hadoop流

雖然Hadoop是用java寫的,但是Hadoop提供了Hadoop流,Hadoop流提供一個(gè)API, 允許用戶使用任何語(yǔ)言編寫map函數(shù)和reduce函數(shù).
Hadoop流動(dòng)關(guān)鍵是,它使用UNIX標(biāo)準(zhǔn)流作為程序與Hadoop之間的接口。因此,任何程序只要可以從標(biāo)準(zhǔn)輸入流中讀取數(shù)據(jù),并且可以把數(shù)據(jù)寫入標(biāo)準(zhǔn)輸出流中,那么就可以通過(guò)Hadoop流使用任何語(yǔ)言編寫MapReduce程序的map函數(shù)和reduce函數(shù)。
例 如:bin/hadoop jar contrib/streaming/hadoop-streaming-0.20.203.0.jar -mapper /usr/local/hadoop/mapper.php -reducer /usr/local/hadoop/reducer.php -input test/* -output out4
Hadoop流引入的 包:hadoop-streaming-0.20.203.0.jar,Hadoop根目錄下是沒(méi)有hadoop-streaming.jar的,因?yàn)?streaming是一個(gè)contrib,所以要去contrib下面找,以hadoop-0.20.2為例,它在這里:
-input:指明輸入hdfs文件的路徑
-output:指明輸出hdfs文件的路徑
-mapper:指明map函數(shù)
-reducer:指明reduce函數(shù)

mapper函數(shù)

mapper.php文件,寫入如下代碼:

[php]  

  1. #!/usr/local/php/bin/php  

  2. <?php  

  3. $word2count = array();  

  4. // input comes from STDIN (standard input)   

  5. // You can this code :$stdin = fopen(“php://stdin”, “r”);   

  6. while (($line = fgets(STDIN)) !== false) {  

  7.     // remove leading and trailing whitespace and lowercase   

  8.     $line = strtolower(trim($line));  

  9.     // split the line into words while removing any empty string   

  10.     $words = preg_split('/\W/', $line, 0, PREG_SPLIT_NO_EMPTY);  

  11.     // increase counters   

  12.     foreach ($words as $word) {  

  13.         $word2count[$word] += 1;  

  14.     }  

  15. }  

  16. // write the results to STDOUT (standard output)   

  17. // what we output here will be the input for the   

  18. // Reduce step, i.e. the input for reducer.py   

  19. foreach ($word2count as $word => $count) {  

  20.     // tab-delimited   

  21.     echo $word, chr(9), $count, PHP_EOL;  

  22. }  

  23. ?>  

這段代碼的大致意思是:把輸入的每行文本中的單詞找出來(lái),并以”

             hello    1
             world  1″

這樣的形式輸出出來(lái)。

和之前寫的PHP基本沒(méi)有什么不同,對(duì)吧,可能稍微讓你感到陌生有兩個(gè)地方:

PHP作為可執(zhí)行程序

第一行的

[php]  

  1. #!/usr/local/php/bin/php  

告訴linux,要用#!/usr/local/php/bin/php這個(gè)程序作為以下代碼的解釋器。寫過(guò)linux shell的人應(yīng)該很熟悉這種寫法了,每個(gè)shell腳本的第一行都是這樣: #!/bin/bash, #!/usr/bin/python

有了這一行,保存好這個(gè)文件以后,就可以像這樣直接把mapper.php當(dāng)作cat, grep一樣的命令執(zhí)行了:./mapper.php

到此,關(guān)于“怎么用PHP寫Hadoop的MapReduce程序”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI