• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于Docker的分布式環(huán)境快速搭建

      2018-02-27 13:29鄒行健王同喜
      電腦知識(shí)與技術(shù) 2018年35期
      關(guān)鍵詞:分布式

      鄒行健 王同喜

      摘要:隨著大數(shù)據(jù)熱度的不斷提升,大數(shù)據(jù)學(xué)習(xí)的熱潮已然來(lái)臨。然而在學(xué)習(xí)大數(shù)據(jù)的過(guò)程中,常常由于各種原因需要重新配置相應(yīng)的實(shí)驗(yàn)環(huán)境,這會(huì)浪費(fèi)大量的時(shí)間。該文針對(duì)大數(shù)據(jù)實(shí)驗(yàn)環(huán)境的部署,提出一種基于容器技術(shù)在單臺(tái)或多臺(tái)計(jì)算機(jī)上搭建Hadoop集群的方法,為短時(shí)間搭建分布式實(shí)驗(yàn)環(huán)境提供參考。

      關(guān)鍵詞:Docker;Hadoop;分布式;環(huán)境搭建

      中圖分類號(hào):TP393? ? ?文獻(xiàn)標(biāo)識(shí)碼:A? ? ? 文章編號(hào):1009-3044(2018)35-0024-03

      1 背景

      作為開(kāi)源的大數(shù)據(jù)平臺(tái),Apache Hadoop已經(jīng)形成了完善的生態(tài)圈。它集成了存儲(chǔ)和數(shù)學(xué)數(shù)據(jù),系統(tǒng)管理等功能,并在海量數(shù)據(jù)存儲(chǔ)和處理,并行計(jì)算和數(shù)據(jù)挖掘領(lǐng)域具有交叉擴(kuò)展功能。目前而言,Apache Hadoop已經(jīng)成為大數(shù)據(jù)領(lǐng)域?qū)嶋H上的標(biāo)準(zhǔn)[1]。與此同時(shí),Hadoop平臺(tái)的多節(jié)點(diǎn)特性、復(fù)雜配置等特點(diǎn),對(duì)大數(shù)據(jù)、Hadoop的學(xué)習(xí)人員帶來(lái)了一些困難,例如計(jì)算機(jī)不夠,或是配置失敗只能重新開(kāi)始配置,甚至在多處進(jìn)行相同的復(fù)雜配置。

      對(duì)于計(jì)算機(jī)不夠的問(wèn)題,學(xué)習(xí)人員有的借助學(xué)校的多臺(tái)學(xué)生機(jī),在上面安裝Linux系統(tǒng),以此搭建完整的Hadoop平臺(tái);有的在單臺(tái)計(jì)算機(jī)上安裝多臺(tái)虛擬機(jī)進(jìn)行配置,這對(duì)計(jì)算機(jī)性能有較高要求,并且對(duì)宿主機(jī)的硬件利用率較低,無(wú)法達(dá)到真實(shí)物理機(jī)的水平。而對(duì)于配置失敗的問(wèn)題,只能多次嘗試,在搭建環(huán)境的過(guò)程中浪費(fèi)較多時(shí)間。

      Docker借助LXC(Linux Container)技術(shù)和AUFS(Advanced Union File System)技術(shù),可以憑借極低的額外開(kāi)銷換取隔離性的運(yùn)行環(huán)境。一臺(tái)普通服務(wù)器就能運(yùn)行數(shù)百個(gè)容器(Container)[2]。

      2 Docker容器技術(shù)

      Docker 是一個(gè)開(kāi)源的應(yīng)用容器引擎。Docker可以使用分層鏡像標(biāo)準(zhǔn)化與內(nèi)核虛擬化技術(shù),將開(kāi)放環(huán)境、依賴包體、應(yīng)用軟件等制作成鏡像,并發(fā)布到任何一臺(tái)安裝有Docker的不限制系統(tǒng)的計(jì)算機(jī)上。

      2.1 Docker的優(yōu)勢(shì)

      Docker采用了LXC內(nèi)核虛擬化技術(shù),而不是對(duì)硬件虛擬層有較高依賴的傳統(tǒng)虛擬化技術(shù)。它不提供指令解釋機(jī)制和全虛擬化的其他復(fù)雜性,也不需要完整的硬件虛擬層,從而省去了虛擬化層調(diào)度硬件的開(kāi)銷。這使得Docker容器擁有高于傳統(tǒng)虛擬機(jī)的資源利用率和執(zhí)行效率,接近于真實(shí)的物理機(jī)[3]。

      Docker采用了聯(lián)合文件系統(tǒng)(UnionFS)技術(shù),并對(duì)其變體也有較高兼容性,如AUFS、btrfs、vfs和DeviceMapper。這種通過(guò)創(chuàng)建圖層進(jìn)行操作的文件系統(tǒng)使得它能實(shí)現(xiàn)容器對(duì)基礎(chǔ)鏡像的共享。運(yùn)行容器時(shí),最底層的操作系統(tǒng)鏡像作為只讀層掛載,其上層設(shè)置有頂層的可寫(xiě)層供寫(xiě)入數(shù)據(jù)。通過(guò)這種圖層結(jié)構(gòu),docker不僅可以將多個(gè)具有層級(jí)關(guān)系的應(yīng)用服務(wù)集成為新的鏡像,還可以將鏡像部署到他處,而不需要重復(fù)安裝。

      基于以上兩點(diǎn),作為面向應(yīng)用的虛擬化技術(shù)[4],docker在啟動(dòng)速度、磁盤(pán)占用、硬件資源利用率等方面有很大優(yōu)勢(shì)。

      2.2 鏡像與容器

      在Docker技術(shù)中,鏡像與容器是兩個(gè)最為重要的概念。

      鏡像相似于虛擬機(jī)模板。以一個(gè)原生系統(tǒng)作為模板,然后在其中可以進(jìn)行部署開(kāi)發(fā)環(huán)境、安裝應(yīng)用、修改系統(tǒng)參數(shù)等操作,最后打包形成一個(gè)新的鏡像。這種繼承關(guān)系可以是多層的。

      容器是基于鏡像創(chuàng)建的實(shí)例。對(duì)容器而言,鏡像是只讀的。在運(yùn)行容器時(shí),將首先在鏡像層之上新增一層,這一層是可寫(xiě)的。此時(shí),對(duì)該容器一切操作都會(huì)保存到這個(gè)可寫(xiě)層的文件系統(tǒng)中,而不是鏡像中。因此,基于相同的一個(gè)鏡像可以創(chuàng)建多個(gè)彼此之間相互隔離的容器。

      2.3 DockerSwarm

      Swarm是一套集群管理工具。Docker Swarm能將若干Docker宿主機(jī)虛擬化為一臺(tái)獨(dú)立的Docker主機(jī)。Swarm使用了標(biāo)準(zhǔn)的Docker API接口,這意味著它兼容任何支持標(biāo)準(zhǔn)API的docker客戶端。

      Swarm daemon在整個(gè)架構(gòu)匯中起到了路由器與調(diào)度器的作用。Swarm負(fù)責(zé)連通整個(gè)網(wǎng)絡(luò)與分配任務(wù)。每當(dāng)收到來(lái)自Client的請(qǐng)求時(shí),Swarm將容器分配到空閑的或者合適的節(jié)點(diǎn)上。當(dāng)Swarm的daemon進(jìn)程意外中止時(shí),其他節(jié)點(diǎn)依然會(huì)正常運(yùn)行。而后,當(dāng)Swarm進(jìn)程恢復(fù)時(shí),它會(huì)收集相關(guān)信息以重建集群日志。

      圖1為Swarm架構(gòu)圖。

      2.4 DockerHub和Register

      Docker Hub可看做官方提供的一個(gè)在線鏡像倉(cāng)庫(kù)。DockerHub中存放了各種原生系統(tǒng)與用戶們自行修改的定制系統(tǒng)與框架。Docker Register組件提供了一組API服務(wù),用于鏡像的存儲(chǔ)、搜索、上傳、下載等。任何個(gè)人或組織都可以在Docker Hub獲取已經(jīng)發(fā)布的鏡像,或創(chuàng)建和發(fā)布自己的鏡像,以供后續(xù)重復(fù)使用或分享給其他人使用。

      2.5 Dockerfile

      為了方便用戶制作自己的鏡像,Docker提供給用戶兩種方法:一種是基于官方鏡像,按照生產(chǎn)環(huán)境的需求編寫(xiě)Dockerfile文件,以此作為依據(jù)生成新的鏡像;另一種是基于官方鏡像創(chuàng)建容器后進(jìn)行相關(guān)環(huán)境的部署,然后使用commit命令將配置好的容器封裝成一個(gè)新的鏡像。

      Dockerfile是基于DSL(Domain Specific Language,特定領(lǐng)域語(yǔ)言)的腳本, 由命令行組成。其中的每條語(yǔ)句都對(duì)應(yīng)了一條Linux命令, Docker引擎則將這些語(yǔ)句翻譯成對(duì)應(yīng)的命令。相比于直接從Hub拉取鏡像,Dockerfile腳本清晰地表明鏡像相比于原生系統(tǒng)做了哪些配置, 如果需要進(jìn)行其他修改, 只需要添加或修改Dockerfile中的命令即可。該文將使用這種方法制作鏡像。

      3 制作Hadoop鏡像

      在編碼制作Hadoop鏡像的Dockerfile文件時(shí),主要有以下步驟:

      1) 聲明原始鏡像;

      2) 聲明工作環(huán)境;

      3) 安裝openssh、openjdk、wget;

      4) 安裝Hadoop;

      5) 配置環(huán)境變量;

      6) 配置無(wú)密碼訪問(wèn);

      7) 配置Hadoop,將下列修改好的配置文件拷貝至Hadoop目錄;

      8) 格式化namenode;

      9) 如果要加入eclipse等應(yīng)用,與上面同理。

      4 分布式環(huán)境搭建

      得益于進(jìn)程級(jí)虛擬化技術(shù), Docker以應(yīng)用為中心, 輕巧便捷,適合用于需要橫向擴(kuò)展的應(yīng)用。運(yùn)行集成了Hadoop的容器,即可在計(jì)算機(jī)上快速部署Hadoop集群環(huán)境。

      4.1 環(huán)境部署

      1) 準(zhǔn)備好一臺(tái)或多臺(tái)準(zhǔn)備作為Hadoop節(jié)點(diǎn)的計(jì)算機(jī),并在每臺(tái)計(jì)算機(jī)上安裝好Docker。

      2) 在主節(jié)點(diǎn)(master)上獲取Hadoop鏡像,pull后面是制作好的鏡像的名字。

      3) 建立Swarm網(wǎng)絡(luò),在master節(jié)點(diǎn)運(yùn)行以下命令,以此獲得用于加入swarm網(wǎng)絡(luò)的令牌。將獲取的令牌整個(gè)粘貼到每個(gè)slave節(jié)點(diǎn)上運(yùn)行。如果僅有一臺(tái)計(jì)算機(jī)則可以跳過(guò)此步驟。

      4) 為Hadoop集群創(chuàng)建一個(gè)專用網(wǎng)絡(luò)。一般來(lái)說(shuō),實(shí)驗(yàn)不會(huì)直接使用swarm的默認(rèn)網(wǎng)絡(luò),用以下命令新建一個(gè)hadoop專用網(wǎng)絡(luò)。

      4.2 啟動(dòng)容器服務(wù)

      如果是多PC節(jié)點(diǎn),則在主節(jié)點(diǎn)上運(yùn)行以下命令,然后查看docker的運(yùn)行服務(wù)列表??梢园l(fā)現(xiàn)Hadoop的三個(gè)節(jié)點(diǎn)已經(jīng)分別分配到三個(gè)PC節(jié)點(diǎn)上了。

      如果只有一臺(tái)PC,則在作為主節(jié)點(diǎn)(master)的容器上運(yùn)行:

      在每個(gè)作為從節(jié)點(diǎn)(slave)的容器上運(yùn)行:

      其中[slavename]替換成slave節(jié)點(diǎn)的名字。

      4.3 啟動(dòng)并驗(yàn)證Hadoop

      在master節(jié)點(diǎn)用ps命令查看并確認(rèn)容器ID,而后用exec命令進(jìn)入Hadoop集群的主節(jié)點(diǎn)。在每臺(tái)計(jì)算機(jī)上使用ping命令,測(cè)試它們之間的網(wǎng)絡(luò)是否正常;用ssh連接每個(gè)從節(jié)點(diǎn)以確認(rèn)無(wú)密碼訪問(wèn)是否正常。若無(wú)問(wèn)題,則可以找到start腳本來(lái)啟動(dòng)Hadoop集群。

      如果啟動(dòng)過(guò)程中沒(méi)有生成錯(cuò)誤日志,則可以認(rèn)為集群運(yùn)行成功。接下來(lái)測(cè)試啟動(dòng)過(guò)程是否出錯(cuò)。運(yùn)行Hadoop自帶的字?jǐn)?shù)統(tǒng)計(jì)腳本(run-wordcount.sh),查看輸出;用jps命令查看每個(gè)容器節(jié)點(diǎn)的進(jìn)程確認(rèn)是否正常。下圖為驗(yàn)證結(jié)果:

      5 鏡像遷移

      不同于傳統(tǒng)的虛擬機(jī)環(huán)境或固定的集群環(huán)境,當(dāng)Docker下的Hadoop集群需要進(jìn)行遷移時(shí),只需要將原環(huán)境打包成鏡像發(fā)布到Docker Hub上,然后在新環(huán)境上下載,重新運(yùn)行容器即可,極大簡(jiǎn)化了應(yīng)用程序的安裝與管理。

      6 結(jié)束語(yǔ)

      在大數(shù)據(jù)的學(xué)習(xí)與研究過(guò)程中,分布式環(huán)境是不可或缺的一部分。Docker可以在多種平臺(tái)上搭建Hadoop集群,這為廣大學(xué)習(xí)者節(jié)省了大量學(xué)習(xí)成本,且經(jīng)長(zhǎng)時(shí)間使用測(cè)試證明運(yùn)行穩(wěn)定,可供其他人進(jìn)行參考。

      參考文獻(xiàn):

      [1] 孟小峰, 慈祥. 大數(shù)據(jù)管理:概念、技術(shù)與挑戰(zhàn)[J]. 計(jì)算機(jī)研究與發(fā)展, 2013(1):146-169.

      [2] 強(qiáng)焜. 基于Docker的舊機(jī)房虛擬化改造探討[J]. 科技創(chuàng)新與應(yīng)用, 2016(35):58.

      [3] 謝超群. Docker容器技術(shù)在高校數(shù)據(jù)中心的應(yīng)用[J]. 貴陽(yáng)學(xué)院學(xué)報(bào): 自然科學(xué)版, 2015,10(4):27-29.

      [4] 汪愷, 張功萱, 周秀敏. 基于容器虛擬化技術(shù)研究[J]. 計(jì)算機(jī)技術(shù)與發(fā)展, 2015,25(8):138-141.

      +[通聯(lián)編輯:謝媛媛]

      猜你喜歡
      分布式
      基于預(yù)處理MUSIC算法的分布式陣列DOA估計(jì)
      西門(mén)子 分布式I/O Simatic ET 200AL
      家庭分布式儲(chǔ)能的發(fā)展前景
      玉屏| 阿勒泰市| 马鞍山市| 五台县| 浠水县| 东明县| 霍山县| 石景山区| 阳原县| 喜德县| 昭平县| 枣庄市| 临江市| 阿尔山市| 北辰区| 济宁市| 黑龙江省| 方城县| 白朗县| 左云县| 建瓯市| 宣威市| 板桥市| 微山县| 巴中市| 四平市| 陆丰市| 北辰区| 英吉沙县| 龙泉市| 三台县| 白朗县| 兰州市| 河间市| 土默特左旗| 彰化市| 佳木斯市| 南阳市| 利辛县| 广东省| 绿春县|