架設好Hadoop環境後,試著建立自己的Hadoop web service,類似Amazon的mapreduce服務,只不過這是非常簡單的陽春版。讓使用者能夠通過web的介面,上傳wordcount的python程式,執行後直接在網頁上看到結果。以下僅列出overview,詳細的實作可以參考source code,參考即可XD小弟這部分沒有寫得很好。


開發環境

雲端平台:Google Compute Engine
Hadoop版本:2.6.0
網站前端:jQuery + ajax + bootstrap(bootswatch)
網站後端:Python/Django + REST


系統架構

使用Python與Django framework來實作網站,提供一個線上的hadoop map reduce服務。利用Django的,自行撰寫REST架構API,並用Ajax來做非同步的服務請求。使用者可以透過以下幾種方式來存取服務:

  • 上傳job:POST http://IP:8000/upload
    上傳的資料會存放在 /media/<user_id>/<upload_id>/<user files>,用來區分不同使用者、不同時間上傳的檔案,並將上傳資訊與時間儲存在資料庫中。
  • 刪除job:DELETE http://IP:8000/delete/<id>
    刪除資料庫中資料與/media/<user_id>/<upload_id>目錄下的所有檔案
  • 執行job:GET http://IP:8000/execute
    使用user上傳的檔案來執行map reduce,執行完後會產生output.txt檔案,最後將結果回傳給client。

以下是網站目錄結構:

hdweb
– account //管理帳號app
– hdweb
– job //處理hadoop service app
– media //上傳檔案存放位置
– static //靜態資料(css,js,fonts)
– template //網頁模板
– db.sqlite3 //資料庫
– manage.py //Django管理程式
– run.sh //開啟server
– db.sh //更新資料庫


網頁功能

  • 會員登入/登出:必須要登入網站才可以使用服務

hadoop1

成功登入畫面如下

hadoop2

  • 提交/刪除工作:下圖為工作列表,使用者可以透過”New job”新增工作,也可以透過下面的按鈕執行或刪除,會呼叫對應的Ajax request向server請求服務。Client端再透過回傳的response,來顯示請求結果。

hadoop3

按下新增紐會出現表單

hadoop4

輸入錯誤或漏填會出現警告

hadoop5

執行結果回傳畫面

hadoop6


Source code

可以參考github上的code

https://github.com/jlee58/IDCC_HW3