架設好 Hadoop 環境後,試著建立自己的 Hadoop Web Service,類似 Amazon 的 MapReduce 服務,只不過這是非常簡單的陽春版。讓使用者能夠通過網頁介面,上傳 Wordcount Python 程式,執行後直接在網頁上看到結果。
詳細的實作可以參考 Source code,參考即可,小弟這部分沒有寫得很好。
開發環境
- 雲端平台:Google Cloud Platform
- Hadoop 版本:2.6.0
- 網站前端:jQuery + ajax + bootstrap (bootswatch)
- 網站後端:Python/Django + REST
系統架構
使用 Python 與 Django Framework 來實作網站,提供一個線上的 Hadoop MapReduce服務,自行撰寫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上傳的檔案來執行 MapReduce,執行完後會產生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 //更新資料庫
網頁功能
- 會員登入/登出:必須要登入網站才可以使用服務
成功登入畫面如下
- 提交/刪除工作:下圖為工作列表,使用者可以透過「New job」新增工作,也可以透過下面的按鈕執行或刪除,會呼叫對應的Ajax request 向 Server 請求服務。Client 端再透過回傳的 Response,來顯示請求結果。
按下新增紐會出現表單
輸入錯誤或漏填會出現警告
執行結果回傳畫面
Source code
可以參考 GitHub
https://github.com/jlee58/IDCC_Homework/tree/master/homework3