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


一、背景:

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

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

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

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

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是最流行的容器化軟件,能夠與許多開源項目集成管理和創建容器。

與傳統虛擬化技術相比,容器化技術優點為:

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

2、啟動速度快。容器技術對操作系統的資源進行再次抽象,通過這種方式,打包好的服務可以在0.05秒的時間內啟動,相比之下,可能需要幾分鍾的時間才能啟動一台虛擬機。

3、內存消耗低。容器可以允許開發者和系統管理人員對計算資源進行進一步細分,如果一個小型的虛擬機所提供的資源相對於服務運行所需要的資源來說過於龐大,或者對於系統而言,一次性地擴展出一台虛擬機會需要很多的工作量,那么容器會很好地改善這一狀況。

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

5、安全隔離,隔離不同的應用程序

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

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

虛擬機技術

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

docker容器技術

二、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

三、設計思路:

1、自動化部署大數據平台:

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

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

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

2、 安裝和配置hadoop

3、 配置文件直接導入

4、 配置SSH免密碼登錄 #免密碼登錄到節點上來啟動這個節點

5、 創建hadoop基礎鏡像

6、 創建自定義網絡 #選擇容器模式

7、 創建容器 #附帶系統環境搭建

8、 格式化Namenode

9、 啟動hadoop服務

10、驗證hadoop服務是否正常啟動

2、實施監控大規模hadoop集群:

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

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

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM