1. 程式人生 > >為什麼我們選擇Docker來構建Crayon的資料處理平臺

為什麼我們選擇Docker來構建Crayon的資料處理平臺

隨著Hadoop成為大資料的事實標準,Hadoop的生態也在不斷完善,環境搭建的複雜性,給開發和測試帶來了不便。如何用Docker來降低Hadoop開發中的複雜性,本文中Crayon帶來了他們的方案。

  之前,企業軟體廠商都會盡可能多的控制客戶的隨著Hadoop成為大資料的事實標準,Hadoop的生態也在不斷完善,環境搭建的複雜性,給開發和測試帶來了不便。基礎安裝環境,因為如果安裝環境出錯,就可能引起很多不必要的麻煩,甚至大災難。

   最初,公司提供一個包含定製的作業系統映象的應用,作業系統映象作為軟體安裝的其中一份子,它給予了廠商從硬體到作業系統的對環境的完全的控制力。但即便是這樣也很難解決問題。企業軟體供應商不得不與其它公司形成合作關係,並且依賴這些公司,來為他們分發硬體平臺。他們必須尋找多個合作伙伴關係,以避免被鎖定在一個合作伙伴。

伺服器虛擬化
伺服器虛擬化用來解決多供應商的硬體平臺和環境問題。它幫助企業軟體供應商有效的釋出他們的軟體,通過在部分虛擬機器管理程式之上進行測試和認證。它提供了一個良好的頂層抽象,企業軟體應用能夠在其中部署和測試。在我早先工作的組織中,我們使用生成的ova映象,用來在虛擬機器管理程式上建立虛擬機器例項,對於一個完全封閉的應用,這有助於建立相同結果,更便於管理。在這裡插入圖片描述
這個模式有幾個問題無法解決。首先,構建ova映象,你需要有大量的系統級的技能。其次是管理分散式環境。當一個軟體要求分散式的安裝在多節點上,仍然有大量的手工操作包括啟動這些虛擬機器。隨著企業開始使用雲作為他們的基礎設施,不考慮應用的種類(即使當應用執行在一個節點中),管理一個分散式環境變得更重要。

Docker
Docker 的問世正好解決了這兩個問題。Docker允許任何人很簡單的快速建立、執行和測試Docker容器。有大量的框架,用於分散式Docker的管理,比如Google 的Kubernetes、CoreOS、Docker編排三劍客等等,這些都很容易和Docker結合。

   除了這些,相比於虛擬機器,Docker是非常輕量級的。如下圖所示,它避免了虛擬機器管理程式的附加層,執行一個輕量級的Docker引擎。它支援Windows 和Boot2Docker。

虛擬機器和Docker的區別在這裡插入圖片描述
我們如何選擇我們的資料處理堆疊
雖然Docker試圖解決很多問題,但是我們選擇了“構建一致的環境便於去複製”這一方面。

   最初在Crayon,在我們的開發週期中,為了測試很少的程式碼,我們不得不改變我們的MapReduce程式。我們需要將我們的程式放到AWS 環境中的生產叢集中,這主要是為了解決配置本地用於測試的Hadoop 環境的時間和精力。當一個POC 僅需要Hadoop生態系統中的一些元件來完成工作時,反覆的配置系統是沒有效率的,尤其當Hadoop生態系統的元件一直在增加時。

   我們使用SequenceIQ提供的工具來開始我們的自動化Hadoop叢集之旅,幾分鐘之內我們就能夠啟動一個多節點的Hadoop叢集。有趣的是,他們採用blueprints 的格式來抽象化叢集的配置,通過Docker的幫助來自動化叢集的配置和啟動。Hortonworks收購SequenceIQ 表明了SequenceIQ所做的自動化Hadoop叢集開發這類工作的重要性。

   SequenceIQ啟發了我們採用Docker。我們通過定製和調整SequenceIQ的Docker映象取得了一些進展。我們為資料處理構建了一個完全的Docker化平臺。

   對於我們所有使用Hadoop元件的poc,我們建立了一致的,易於複製的Docker例項,取代了之前人們試著去在本地安裝Hadoop生態系統的每個元件,對於開發和測試環境的需要,我們只需要建立一次,便能在任何時間和地點使用它。

   這就是我們達到一致的開發,測試,整合和部署的方式之旅,是無縫的。 我們期待讓Docker成為我們預設的神器,直到部署階段。 雖然在企業環境中可能存在一些挑戰,我們希望會有一個行業廣泛採用Docker。 請繼續翻看我們關於我們目前所作的嘗試和成就的詳細內容。