當前位置:
首頁 > 最新 > PHP與大數據開發實踐

PHP與大數據開發實踐

大數據是使用工具與技術,來處理大量和複雜數據集合的專用術語,能夠處理大量數據的技術稱為MapReduce。

何時使用MapReduce

MapReduce特別適合涉及大數據的問題。它通過把數據處理工作分成非常小的片(或稱塊),方便被多個系統處理。由於MapReduce將一個問題分片並行工作,與傳統軟體系統相比,此解決方案速度會更快。

大概有如下場景會應用到MapReduce:

1 計數和統計

2 整理

3 過濾

4 排序

Apache Hadoop

在本文中,我們將使用Apache Hadoop。

開發MapReduce解決方案,推薦使用Hadoop,它已經是事實上的標準,同時也是開源免費的軟體。

另外在Amazon,Google和Microsoft等雲提供商租用或搭建Hadoop集群。

還有其他多個優點:

可擴展:可以輕鬆清加新的處理節點,而無需更改一行代碼

成本效益:不需要任何專門和奇特的硬體,因為軟體在正常的硬體都運行正常

靈活:無模式。可以處理任何數據結構 ,甚至可以組合多個數據源,而不會有很多問題。

容錯:如果有節點出現問題,其它節點可以接收它的工作,整個集群繼續處理。

另外,Hadoop容器還是支持一種稱為「流」的應用程序,它為用戶提供了選擇用於開發映射器和還原器腳本語言的自由度。

本文中我們將使用PHP做為主開發語言。

Hadoop安裝

Apache Hadoop的安裝配置超出了本文範圍。您可以根據自己的平台,在線輕鬆找到很多文章。為了保持簡單,我們只討論大數據相關的事。

映射器(Mapper)

映射器的任務是將輸入轉換成一系列的鍵值對。比如在字計數器的情況下,輸入是一系列的行。我們按單詞將它們分開,把它們變成鍵值對(如key:word,value:1),看起來像這樣:

the 1

water 1

on 1

on 1

water 1

on 1

... 1

然後,這些對然後被發送到reducer以進行下一步驟。

reducer

reducer的任務是檢索(排序)對,迭代並轉換為所需輸出。 在單詞計數器的例子中,取單詞數(值),並將它們相加得到一個單詞(鍵)及其最終計數。如下:

water 2

the 1

on 3

mapping和reducing的整個過程看起來有點像這樣,請看下列之圖表:

使用PHP做單詞計數器

我們將從MapReduce世界的「Hello World」的例子開始,那就是一個簡單的單詞計數器的實現。 我們將需要一些數據來處理。我們用已經公開的書Moby Dick來做實驗。

執行以下命令下載這本書:

在HDFS(Hadoop分散式文件系統)中創建一個工作目錄

hadoop dfs -mkdir wordcount

我們的PHP代碼從mapper開始

#!/usr/bin/php

下面是 reducer 代碼。

#!/usr/bin/php

你可以通過使用某些命令和管道的組合來在本地輕鬆測試腳本。

head -n1000 pg2701.txt | ./mapper.php | sort | ./reducer.php

我們在Apache Hadoop集群上運行它:

hadoop jar /usr/hadoop/2.5.1/libexec/lib/hadoop-streaming-2.5.1.jar -mapper "./mapper.php" -reducer "./reducer.php" -input "hello/mobydick.txt" -output "hello/result"

輸出將存儲在文件夾hello / result中,可以通過執行以下命令查看

hdfs dfs -cat hello/result/part-00000

計算年均黃金價格

下一個例子是一個更實際的例子,雖然數據集相對較小,但是相同的邏輯可以很容易地應用於具有數百個數據點的集合上。 我們將嘗試計算過去五十年的黃金年平均價格。

我們下載數據集:

wget https://raw.githubusercontent. ... a.csv

在HDFS(Hadoop分散式文件系統)中創建一個工作目錄

hadoop dfs -mkdir goldprice

將已下載的數據集複製到HDFS

hadoop dfs -copyFromLocal ./data.csv goldprice/data.csv

我的reducer看起來像這樣:

#!/usr/bin/php

我們的reducer也略有修改,因為需要計算項目數量和平均值:

#!/usr/bin/php

像單詞統計樣例一樣,我們也可以在本地測試:

head -n1000 data.csv | ./mapper.php | sort | ./reducer.php

最終在hadoop集群上運行它:

hadoop jar /usr/hadoop/2.5.1/libexec/lib/hadoop-streaming-2.5.1.jar -mapper "./mapper.php" -reducer "./reducer.php" -input "goldprice/data.csv" -output "goldprice/result"

查看平均值

hdfs dfs -cat goldprice/result/part-00000

小獎勵:生成圖表

我們經常會將結果轉換成圖表。 對於這個演示,我將使用gnuplot,你可以使用其它任何有趣的東西。

首先在本地返回結果:

hdfs dfs -get goldprice/result/part-00000 gold.dat

創建一個gnu plot配置文件(gold.plot)並複製以下內容

# Gnuplot script file for generating gold pricesset terminal pngset output "chart.jpg"set style data linesset nokeyset gridset title "Gold prices"set xlabel "Year"set ylabel "Price"plot "gold.dat"

生成圖表:

gnuplot gold.plot

這會生成一個名為chart.jpg的文件。看起來像這樣:

歡迎大家補充。

譯者:杜江(21CTO社區發起人)

作者:Glenn De Backer

原文:https://www.simplicity.be/article/big-data-php/

點擊展開全文

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 PHP技術大全 的精彩文章:

yii2中行為和Trait的區別
關於PHP的錯誤機制總結
SecLists-安全測試者的手冊
2017 最新 PHP 框架橫向對比
我的開發工具集們

TAG:PHP技術大全 |