基於Docker一鍵部署大規模Hadoop集羣及設計思路

1、背景:java

隨着互聯網的發展、互聯網用戶的增長,互聯網中的數據也急劇膨脹。天天產生的數據量數以萬計,本地文件系統和單機CPU已沒法知足存儲和計算要求。Hadoop分佈式文件系統(HDFS)是海量數據存儲的重要技術,它將數據存儲在多個從節點上,對這些節點的硬件資源進行統一管理與分配,並向客戶端提供文件系統訪問接口,解決了本地文件系統在文件大小、文件數量、打開文件數目等的限制問題。海量數據存儲系統的數據都是經過分佈式文件系統存儲在各個節點上。經過分佈式文件系統,海量數據存儲系統能夠可靠地存儲PB級以上數據。所以,分佈式存儲和分佈式計算的應用成爲必然的趨勢。node

Hadoop集羣能夠充分利用分佈式的優越性,解決大數據的存儲和計算問題。然而就在Hadoop分佈式帶來便利的同時,其集羣的安裝和部署都有必定的侷限性,前期準備工做很是多,如配置文件之多、配置節點數量之大、部署過程涉及計算機網絡、Linux操做系統、SSH無密碼登陸、jdk環境配置、shell腳本等一系列紛繁複雜的知識,專人來作正常工做週期須要3我的部署加測試一個月左右,動輒分佈式集羣的部署還以失敗了結,並沒有從下手找出故障根源。所以也給 Hadoop 研究人員形成了不少困擾。而安裝部署 Hadoop平臺是研究大數據處理的第一步,是不可避免的必經之路,其次,在後期使用過程當中,一旦服務出錯也很難排查出是哪一個節點出現了問題,使得運維人員的難度大大提升。所以,對於Haoop集羣的自動化部署和狀態的實施監測研究是很是具備意義的課題。而目前市面上大數據監控系統由不少,但都僅僅針對各自組建的獨立監控,如Cloudea Manager,其只針對本公司產品,只監控hadoop以及hadoop相關組件Hbase等,對Redis、storm等其餘組件並不支持,其次不少組件如kafa只提供監控接口,想查看組件狀態必須本身調用監控接口,這對於非研發人員具備必定的難度,所以缺乏一款針對大數據集羣全部組件統一監控的系統。web

在過去,單機的小規模部署對於Hadoop這樣的大數據平臺是沒有任何實際意義的。此前,具備真正應用意義的多機部署也從未真正實現過。那麼,如何藉助Docker做爲優化手段,在多機大規模的狀況下進行一鍵部署,是目前Hadoop系統架構方面最受關注的技術熱點之一。過去,幾百臺規模集羣的Hadoop on Docker的部署,從未有人實現過,這也是Hadoop on Docker難以落地應用的主要緣由之一。而一鍵規模化部署則更是繞過了Hadoop on Docker在市場的適應期,下降了安裝和使用的成本,使企業用戶能夠更早更快地使用該技術,是在Hadoop技術發展和推廣中舉足輕重的一個技術突破。docker

Docker是PaaS提供商docker公司開源的一個基於LXC的輕量級虛擬化技術的容器引擎,整個項目基於go語言開發,並聽從Apache2.0協議。經過分層鏡像標準化和內核虛擬化技術,Docker使得應用開發者和運維工程師能夠以統一的方式跨平臺發佈應用,而且以幾乎沒有額外開銷的狀況下提供資源隔離的應用運行環境。Docker採用瞭如圖所示的客戶/服務器架構模式。客戶端經過TCP/REST向Docker host發送建立容器、運行容器、保存容器、刪除容器等請求,實現遠程控制。服務端主要包括daemon和container兩部分。shell

Docker daemon是服務端中一個常駐留在後臺的守護服務進程,該守護進程在後臺啓動一個server進程,其工做職責是接收客戶端發送的請求;在engine模塊中根據客戶端的請求類型,server經過路由與分發調度機制,找到相應的job來處理客戶端的請求。經過driver轉發至容器中的libcontainer庫,libcontainer提供了不少與容器相關的API,不須要依賴其餘文件庫,Docker能夠調用libcontainer庫文件直接操做,這種架構容許多個容器在共享同一個Linux內核的狀況下徹底隔離地運行。數據庫

Docker容器是Docker系統結構中服務交付的最終體現方式,通Docker的需求與下發的命令,訂製相應的服務並運行容器。Docker Registry是存儲容器鏡像的管理倉庫,是集中存放鏡像文件的場所,當用戶建立了本身的鏡像以後就可使用push命令將它上傳到倉庫,這樣下次在另一臺機器上使用這個鏡像時,只須要從倉庫上pull下來便可。而容器鏡像是在容器被建立時,用來加載並初始化容器的文件系統與目錄。在容器的運行過程當中,Docker daemon會與Docker Registry進行進程間通訊,具備搜索鏡像、下載鏡像、上傳鏡像等基本功能。緩存

Docker底層的兩個核心技術分別是namespace和cgroups。命名空間的做用是爲容器提供進程間隔離的技術以及爲每一個容器提供不一樣的主機名。Docker使用到了羣組控制技術來管理可利用的資源,其主要具備對共享資源的分配、限制、審計及管理等功能。安全

容器化是以可移動可預測方法發佈和部署應用程序的過程,經過包裝組件及其依賴,打包成一個標準的、隔離的、輕量 的環境。Docker是最流行的容器化軟件,可以與許多開源項目集成管理和建立容器。服務器

與傳統虛擬化技術相比,容器化技術優勢爲:網絡

一、簡化部署。它將應用打包成單一地址訪問的、registry存儲的、僅經過一行命令就能夠部署完成的組件。

二、啓動速度快。容器技術對操做系統的資源進行再次抽象,經過這種方式,打包好的服務能夠在0.05秒的時間內啓動,相比之下,可能須要幾分鐘的時間才能啓動一臺虛擬機。

三、內存消耗低。容器能夠容許開發者和系統管理人員對計算資源進行進一步細分,若是一個小型的虛擬機所提供的資源相對於服務運行所須要的資源來講過於龐大,或者對於系統而言,一次性地擴展出一臺虛擬機會須要不少的工做量,那麼容器會很好地改善這一情況。

四、系統支持量高,單機支持上千個容器

五、安全隔離,隔離不一樣的應用程序

六、可移植性好,一次封裝處處運行

基於Docker一鍵部署大規模Hadoop集羣及設計思路

虛擬機技術

基於Docker一鍵部署大規模Hadoop集羣及設計思路

docker容器技術

2、Hadoop鏡像架構:

OS

hostname

IP

Ubuntu

hadoop-master

172.18.0.10

Ubuntu

hadoop-slave1

172.18.0.11

Ubuntu

hadoop-slave2

172.18.0.12

Ubuntu

hadoop-slave3

172.18.0.13

3、設計思路:

一、自動化部署大數據平臺:

採用編寫Dockerfile腳本建立鏡像的方式實現自動化部署hadoop各個組件。本文基於的Linux操做系統是Ubuntu14.04版本,

採用Dockerfile安裝hadoop基礎鏡像的具體步驟以下:

一、 安裝和配置JDK #hadoop由java語言編寫,須要jdk運行環境

二、 安裝和配置hadoop

三、 配置文件直接導入

四、 配置SSH免密碼登陸 #免密碼登陸到節點上來啓動這個節點

五、 建立hadoop基礎鏡像

六、 建立自定義網絡 #選擇容器模式

七、 建立容器 #附帶系統環境搭建

八、 格式化Namenode

九、 啓動hadoop服務

十、驗證hadoop服務是否正常啓動

二、實施監控大規模hadoop集羣:

利用docker一鍵優化部署大規模hadoop集羣后,須要監控各個組件的運行狀態, 採用JMX對集羣進行監控,它能將監控功能整合到系統或應用程序中,JMX能給絕大多數系統或設備提供相應的監控服務。提供JMX接口的hadoop組件有:hadoop,hbase,zookeeper,kafka。採用MongoDB做爲監控數據的緩存數據庫,並向web端提供監控數據。

實時監測hadoop的內容有:DFS佔有率、DFS剩餘率、數據塊佔有率、活着的節點、Namenode日誌狀態、Namenode存儲位置、Datenode信息、快照總結、啓動進程、文件系統和日誌信息等。

做者:李金澤AllenLi,清華大學碩士研究生,研究方向:大數據和人工智能。

相關文章
相關標籤/搜索