最初接觸Docker是在2013年初,當時Docker纔剛起步不久,知之甚少。在不到一年的時間裏,Docker已經家喻戶曉,成爲時下最熱門的雲計算技術之一,出現了許多圍繞docker的新興產品(僅供參考):html
什麼是Docker。Docker是一個開源的引擎,能夠輕鬆的爲任何應用建立一個輕量級的、可移植的、相互隔離的容器。開發者在筆記本上編譯測試經過的容器能夠批量地在生產環境中部署,包括VMs(虛擬機)、OpenStack 集羣和其餘的基礎應用平臺。 node
Docker應用場景:mysql
本文主要介紹docker在大數據方面的應用,通過一段時間的研究和實際操做,提出了Hadoop on Docker架構。大概思路就是將硬件(或雲服務器)經過Docker搭建成爲一個「超級服務器」,這裏的超級是指,擁有足夠的CPU,內存,而且提供7*24小時不宕機服務(除非同一時間全部物理主機全宕機)。每一個Docker容器做爲超級服務器資源的一個實例,能夠根據需求動態增長實例,以知足計算性能要求。下圖是整個Hadoop on Docker的架構git
從上自下,依次爲:web
1. 將datanode容器掛載到外部文件存儲系統中,能夠經過增長外部文件系統的磁盤大小來提升hdfs存儲能力。sql
2. 將全部配置文件存放在公共文件系統中,能夠方便整個系統的配置管理,減小重複操做。docker
有人會有疑問:現在服務器已經很廉價,徹底能夠在不一樣服務器上運行不一樣服務,不必使用docker。數據庫
若是硬件服務器對你來講確實是廉價的,以致於搭建100個節點的hadoop集羣,大多數狀況下運行mapreduce job的節點書不超過10個,剩餘90臺服務器常年處於休息狀態,對你來講也可有可無的話,我無話可說。拋開硬件成本不說,docker容器的隔離機制也是集羣部署中的一大亮點!服務器
本文的目的是經過docker容器,使用更少的硬件資源來運行一樣的job,容器相對於服務器來講是更細粒度的資源。同時因爲容器的隔離機制,一個容器發生故障並不影響到其餘容器及宿主主機。此外這種架構還解決了單點故障問題,每臺服務器運行着相同的docker鏡像,經過定時向zookeeper發送心跳,來監控全部容器的健康狀態,心跳是一份包含該服務器上全部運行着的容器的名單。那麼有可能發生兩種突發狀況:架構
對於第一種狀況,因爲心跳包含全部運行着容器的名單,當服務器某個容器掛掉,好比mysql意外終止,zookeeper經過兩次心跳對比,發現缺乏mysql,因而啓動應急措施,重啓該服務器的mysql容器。若是宿主主機宕機,zookeeper在一段時間內未接受該服務器的心跳,發現宕機,而後在其他剩下的服務器中重啓上一次心跳名單中運行着的容器,如圖所示
整個系統的實現還有一個前提,就是使不一樣宿主主機上的docker容器可以通訊,能夠參見這篇。
最終的目的是使整個架構看起來像在一臺超級服務器(cpu,內存足夠大,而且永不宕機)上運行hadoop。
本文持續更新。。。