• 
    

    
    

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

      利用Docker容器技術(shù)構(gòu)建大數(shù)據(jù)實驗室

      2018-04-11 06:36:08劉亞軍
      實驗室研究與探索 2018年2期
      關(guān)鍵詞:鏡像虛擬化容器

      應 毅, 劉亞軍, 俞 琰

      (1.三江學院 計算機科學與工程學院,南京 210012;2.東南大學 計算機科學與工程學院,南京 210096;3.南京工業(yè)大學 信息服務部,南京 210009)

      0 引 言

      在大數(shù)據(jù)及云計算產(chǎn)業(yè)高速發(fā)展的背景下,國內(nèi)外很多高校已經(jīng)開始進行大數(shù)據(jù)人才的培養(yǎng)[1]。大數(shù)據(jù)是一個典型的交叉學科,涉及到數(shù)學/統(tǒng)計學、數(shù)據(jù)庫/數(shù)據(jù)挖掘、分布式系統(tǒng)、計算機編程等眾多領域,人才培養(yǎng)不僅關(guān)注理論知識的傳授,更注重工程能力的培養(yǎng),教學過程中強調(diào)實驗及實踐課程。實踐教學質(zhì)量的高低在很大程度上取決于實驗室的建設水平。

      Apache Hadoop是由Java語言實現(xiàn)的開源大數(shù)據(jù)平臺,它集成了數(shù)據(jù)存儲、數(shù)據(jù)處理、系統(tǒng)管理等功能,形成了完善的生態(tài)圈(海量存儲、并行計算、分析/挖掘、NoSQL等),已經(jīng)成為大數(shù)據(jù)領域事實上的標準[2]。然而,Hadoop的集群性(一般至少3個節(jié)點)、配置復雜、只支持Linux操作系統(tǒng)等特點,對高校實驗室建設是一個新挑戰(zhàn)。

      當前,高校建設大數(shù)據(jù)實驗室大致有3種方法:

      (1) 直接在學生機上安裝Linux,在Linux上安裝Hadoop[3]。

      (2) 原有的機房環(huán)境不變,額外購置服務器/小型機等高性能硬件設備[4]。

      (3) 在Windows系統(tǒng)下安裝虛擬機軟件(VMWare、VirtualPC等),在虛擬機上安裝Linux,在Linux上安裝Hadoop[5]。

      受到資源限制,很多高校實驗室不單獨安裝Linux系統(tǒng),而且Linux學生機管理復雜,機房可復用性差。額外購置硬件對資金要求很高[6]。傳統(tǒng)的虛擬機技術(shù)[7]完整地安裝整個操作系統(tǒng),即使底層操作系統(tǒng)相同,幾個Guest OS之間也不能共享,對于Host OS的硬件資源利用率低,無法達到真實物理主機的水平。通常難以在一臺普通PC上虛擬出一個多節(jié)點集群。

      借助于LXC和AUFS技術(shù),Docker以幾乎沒有額外開銷的代價提供資源隔離的應用運行環(huán)境,其秒級的啟動速度相比于虛擬機有了數(shù)量級的提高,而且資源占用極少,一臺普通服務器能運行數(shù)百個容器(Container)[8]。本文利用Docker容器技術(shù)在單臺Windows計算機上構(gòu)建多節(jié)點Hadoop集群。

      1 Docker容器技術(shù)

      Docker是dotCloud公司于2013年發(fā)布的輕量級容器引擎,基于Go語言開發(fā),遵循Apache 2.0開源協(xié)議。Docker的設計哲學是“Build, Ship, and Run Any App, Anywhere”[9](一處封裝,處處運行)。通過分層鏡像標準化和內(nèi)核虛擬化技術(shù),Docker可以將應用軟件、依賴包和所需環(huán)境打包制作成鏡像(image),發(fā)布到任何一臺安裝有Docker引擎的計算機(Linux、Mac或Windows平臺)上運行。

      1.1 Decker的技術(shù)優(yōu)勢

      傳統(tǒng)的Xen、KVM以及VMWare都是一種平臺虛擬化技術(shù)[10],需要提供一個完善的硬件虛擬層,從而讓一個Guest OS完整地安裝在虛擬機中。一個完整的操作系統(tǒng)雖然功能強大,但也造成了很大的資源浪費。在實際使用中,有時用戶需要的僅僅是一些應用軟件和高效的運行環(huán)境而非整個操作系統(tǒng)。

      遵循物盡其用的原則,Docker采用了LXC(Linux Containers)內(nèi)核虛擬化技術(shù)。LXC能夠在同一個服務器上同時支持數(shù)千臺仿真系統(tǒng)[11],它不提供指令解釋機制以及全虛擬化的其它復雜性,不需要完全對真實硬件進行模擬,省去了虛擬化層調(diào)度硬件的開銷,這使得Docker容器的資源利用率和執(zhí)行效率比傳統(tǒng)虛擬主機高,接近于真實物理機[12]。

      在文件系統(tǒng)方面,Docker使用了AUFS(Advanced multi-layered Unification Filesystem)技術(shù),它能實現(xiàn)容器對基礎鏡像的共享。運行容器時,最底層的操作系統(tǒng)鏡像被掛載為Readonly文件層,然后在此基礎上設置一個頂層的Writable文件層供容器寫入數(shù)據(jù)。利用這種層級結(jié)構(gòu),Docker不僅可以將多個具有層次關(guān)系的應用服務疊加在一起,形成新的鏡像,還可以共享基礎鏡像,不必像傳統(tǒng)虛擬主機那樣重復安裝Guest OS。

      基于以上兩點,作為面向應用的虛擬化技術(shù)[13],Docker很好地平衡了虛擬化的初衷和對資源的消耗,在啟動速度、磁盤占用、物理資源利用率、隔離度等方面具有很大優(yōu)勢。

      1.2 Docker Hub和Registry

      Docker Hub是Docker提供的官方鏡像服務網(wǎng)站,以公開或私有的方式存放了各種操作系統(tǒng)、中間件框架、數(shù)據(jù)庫服務、開發(fā)環(huán)境鏡像資源。Docker Registry組件提供了針對鏡像的存儲、搜索、上傳、下載等一系列API服務。任何組織和個人都可以在Docker Hub上獲取已發(fā)布的鏡像,也可以創(chuàng)建自己的鏡像并使用push命令上傳到資源倉庫,供其他人使用。

      1.3 鏡像與容器

      Docker中有兩個重要概念:鏡像和容器。

      鏡像類似于虛擬機模板。開發(fā)者從Docker Registry上獲取基礎鏡像,它一般是一個純凈的操作系統(tǒng),在此基礎上做修改,比如安裝軟件、進行配置,最后封裝成一個標準的、隔離的、輕量級環(huán)境。這種構(gòu)建鏡像的繼承關(guān)系可以是多層的。

      容器是從鏡像創(chuàng)建的運行實例,鏡像可以從Docker Registry上下載,也可以來自本地創(chuàng)建或本地緩存。在功能上,鏡像與一個完整的Linux系統(tǒng)基本一致,它有兩個不同的狀態(tài):運行態(tài)(Running)、退出態(tài)(Exited)。對容器而言,鏡像是只讀的。當Docker引擎運行容器時,會在鏡像之上增加一個可寫層,對正在運行的容器的一切操作都會永久地寫到容器的文件系統(tǒng)中,而不是鏡像中。也可以使用同一個鏡像啟動多個容器,這些容器在啟動后是相互隔離的。

      1.4 Deckerfile

      Docker提供了兩種制作鏡像的方式:

      (1) 使用基礎鏡像運行容器,在容器中安裝軟件和相關(guān)操作,退出后使用“docker commit”命令將容器封裝成一個新的鏡像;

      (2) 以基礎鏡像為基礎,根據(jù)業(yè)務需求,編寫Dockerfile,使用“docker build”命令自動構(gòu)建新的鏡像。

      Dockerfile是基于DSL(Domain Specific Language)語法的腳本,由一條一條的指令組成,每條指令對應一條Linux命令,Docker引擎負責指令的翻譯。與直接給出鏡像相比,Dockerfile腳本清晰地表明鏡像是怎樣生成的,當需要定制額外需求時,只要在Dockerfile上添加或修改指令即可。這種增量發(fā)布的能力,具有更好的靈活性、透明性、可重復性以及冪等性[14]。本文在制作Hadoop鏡像時,將會使用Dockerfile方式。

      2 Hadoop的Docker化

      以Ubuntu 14.04.4為基礎鏡像,采用Dockerfile方式制作Hadoop鏡像,關(guān)鍵步驟包括:

      (1) 安裝JDK,OpenJDK 7。

      (2) 安裝SSH,OpenSSH 2。

      (3) 下載、安裝Hadoop,版本選擇Hadoop 2.7.2。與1.x分支相比,Hadoop 2.x(YARN)是一個通用的計算框架管理平臺,不僅支持MapReduce,也支持其它計算引擎(如Spark)。

      (4) 配置環(huán)境變量,JAVA_HOME、HADOOP_HOME、PATH。

      (5) 配置SSH無密碼登錄。

      (6) 配置Hadoop。準備Hadoop的配置文件:core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml、hadoop-env.sh、slaves,并將它們拷貝至Hadoop的安裝目錄。

      (7) 格式化NameNode。

      制作流程如圖1所示。

      圖1Hadoop image制作流程

      Dockerfile的核心內(nèi)容如下:

      FROM ubuntu,14.04

      WORKDIR /root

      # 安裝OpenSSH、OpenJDK、Hadoop

      RUN apt-get update && apt-get install -y openssh-server openjdk-7-jdk wget

      RUN wget hadoop-2.7.2.tar.gz && tar -xzvf hadoop-2.7.2.tar.gz && mv hadoop-2.7.2 /usr/hadoop/

      # 配置環(huán)境變量

      ENV JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/

      ENV HADOOP_HOME=/usr/hadoop/

      ENV PATH=PATH:/usr/hadoop/bin:/usr/hadoop/sbin

      # 配置SSH無密碼登錄

      RUN ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ''

      RUN cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

      RUN mv /tmp/ssh_config ~/.ssh/config

      # 配置Hadoop

      COPY config/* /tmp/

      RUN mv /tmp/hadoop-env.sh /usr/hadoop/etc/hadoop/hadoop-env.sh

      RUN mv /tmp/hdfs-site.xml HADOOP_HOME/etc/hadoop/hdfs-site.xml

      RUN mv /tmp/core-site.xml HADOOP_HOME/etc/hadoop/core-site.xml

      RUN mv /tmp/mapred-site.xml HADOOP_HOME/etc/hadoop/mapred-site.xml

      RUN mv /tmp/yarn-site.xml HADOOP_HOME/etc/hadoop/yarn-site.xml

      RUN mv /tmp/slaves HADOOP_HOME/etc/hadoop/slaves

      # 格式化NameNode

      RUN mkdir -p ~/hdfs/namenode

      RUN mkdir -p ~/hdfs/datanode

      RUN /usr/hadoop/bin/hdfs namenode -format

      最后使用“docker build”命令生成Hadoop鏡像,給它命名為“hadoop:base”(base其實是鏡像的tag),它的大小大約只有780M,比在傳統(tǒng)虛擬主機中安裝Linux小的多。

      3 構(gòu)建大數(shù)據(jù)實驗室

      利用分布式系統(tǒng)的優(yōu)勢,Hadoop是解決大數(shù)據(jù)問題的高效工具。依托進程級虛擬化技術(shù),Docker以應用為中心,輕巧便捷,特別適合用于需要橫向擴展的應用。運行封裝有Hadoop的Docker容器,可以快速地在單個PC上搭建Hadoop集群。

      3.1 實驗室部署

      由于準備在一臺機器上運行3個Docker容器(1個Master、2個Slave),所以選擇硬件較好的計算機機房,PC配置為:Intel i7-4770四核CPU(處理器必須支持硬件虛擬化)、8GB RAM、1TB硬盤(7200轉(zhuǎn)64M緩存)。操作系統(tǒng)為:Windows7 64位。部署過程只有3步:

      (1) 安裝DockerToolbox 1.13并啟動。Docker的Toolbox是一個能在Windows平臺上使用運行的輕量級虛擬機引擎。

      (2) 獲取Hadoop鏡像,命令

      docker pull hadoop:base

      (3) 以bridge模式為Hadoop集群創(chuàng)建單獨的網(wǎng)絡,給它命名為“hadoop”,命令

      docker network create—driver=bridge hadoop

      單機部署完成后,可以通過噢易OSS等網(wǎng)絡同傳工具拷貝到每臺學生機上。由于Docker的資源隔離機制,每臺機器之間的Hadoop集群相互不干擾。

      3.2 運行Hadoop容器

      學生上機時,首先打開DockerToolbox,然后運行容器,啟動Hadoop集群。

      (1) 運行容器。基于相同的hadoop:base鏡像運行多個容器。在啟動時,使用“—net=hadoop”選項,將所有容器放置在hadoop網(wǎng)絡中,它們可以通過容器名稱進行通信。

      運行Master節(jié)點上的容器:

      docker run -itd —net=hadoop —name hadoop-master —hostname hadoop-master -p 50070:50070 -p 8088:8088 hadoop:base

      運行2個Slave節(jié)點上的容器:

      docker run -itd —net=hadoop —name hadoop-slave1 —hostname hadoop-slave1 hadoop:base

      docker run -itd —net=hadoop —name hadoop-slave2 —hostname hadoop-slave2 hadoop:base

      (2) 進入Master容器的root目錄:

      docker exec -it hadoop-master bash

      (3) 啟動Hadoop:

      HADOOP_HOME/sbin/start-dfs.sh

      HADOOP_HOME/sbin/start-yarn.sh

      Hadoop提供了NodeManager和ResourceManager的Web管理功能,地址分別為:http://MasterIP:50070/、http://MasterIP:8088/。

      Hadoop容器運行流程如圖2所示。

      3.3 測試Hadoop集群

      編寫一個runWC.sh腳本,調(diào)用Hadoop自帶的WordCount程序,測試Hadoop集群是否正常工作。

      圖2Hadoop Container運行流程

      runWC.sh腳本代碼如下:

      mkdir input

      echo "Hello Hadoop" >input/file1.txt

      echo "Hello Docker" >input/file2.txt

      hadoop fs -mkdir -p input

      hdfs dfs -put ./input/* input

      hadoop jar HADOOP_HOME/share/hadoop/mapreduce/sources/hadoop-mapreduce-examples-2.7.2-sources.jar org.apache.hadoop.examples.WordCount input output

      echo -e " WordCount output:"

      hdfs dfs -cat output/part-r-00000

      執(zhí)行結(jié)果如圖3所示。

      圖3runWC.sh腳本執(zhí)行結(jié)果

      3.4 配置開發(fā)環(huán)境[6]

      編程實驗課需要使用Eclipse進行Hadoop方面的程序開發(fā)。

      安裝Hadoop Eclipse插件:下載hadoop-eclipse-plugin-1.0.4.jar,將其放置在Eclipse安裝目錄的plugins文件夾內(nèi),重啟Eclipse。如果在打開透視圖對話框中能夠看到“Map/Reduce”選項,表明插件安裝成功。在“Map/Reduce”透視圖中,右鍵點擊“New Hadoop Location”,根據(jù)Hadoop的安裝情況,填寫正確的Map/Reduce、DFS配置信息。至此,Eclipse開發(fā)環(huán)境配置完畢,可以選擇“Map/Reduce Project”來開發(fā)并行應用程序。

      4 鏡像的遷移

      以往,受時間因素和實驗環(huán)境的制約,學生只能在實驗課上做實驗。大數(shù)據(jù)課程的實驗比較復雜,有時光靠實驗課的時間是無法完成的。所以,很多學生有在自己計算機上安裝Hadoop集群的需求。Docker在這方面提供了便利。

      Docker具有標準的鏡像格式、標準的容器運行環(huán)境、標準的構(gòu)建方法。當需要在新環(huán)境部署應用時,只需要到Docker Hub上下載所需的鏡像,啟動容器即可,極大的簡化了應用程序的安裝和管理。

      所以,學生私人計算機上部署Hadoop集群和實驗室部署Hadoop集群的方法完全一致。

      5 結(jié) 語

      大數(shù)據(jù)實驗室是大數(shù)據(jù)人才培養(yǎng)不可或缺的重要部分,為實驗教學提供硬件支撐。通過在Windows平臺下安裝Docker軟件運行容器,實現(xiàn)了多節(jié)點Hadoop集群在單PC上的部署。一方面,保持眾多學生機的原有狀況不變,沒有給實驗室的維護增加負擔;另一方面,不需要使用高性能硬件或購置新設備,節(jié)省了實驗室資金。該大數(shù)據(jù)實驗室已實際運行在網(wǎng)絡機房中,每次實驗課有50-60名學生同時上機,經(jīng)實踐證明運行穩(wěn)定、維護方便,可供大家在建設大數(shù)據(jù)實驗室時參考與借鑒。

      參考文獻(References):

      [1]何海地.美國大數(shù)據(jù)專業(yè)碩士研究生教育的背景、現(xiàn)狀、特色與啟示——全美23所知名大學數(shù)據(jù)分析碩士課程網(wǎng)站及相關(guān)信息分析研究[J].圖書與情報,2014(2):48-56.

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

      [3]蔣寧,李文,李鴻彬.基于Hadoop的云計算輔助教學平臺研究[J].中國遠程教育,2012(9):79-82.

      [4]姚占雷,許鑫,葉德磊.云計算架構(gòu)下經(jīng)管類實驗教學環(huán)境搭建與應用實踐[J].現(xiàn)代教育技術(shù),2013(7):111-116.

      [5]孔藝權(quán).面向開源軟件的“云計算”仿真實驗設計[J].實驗技術(shù)與管理,2013(2):122-125.

      [6]付偉,嚴博,吳曉平.云計算實驗平臺建設關(guān)鍵技術(shù)研究[J].實驗室研究與探索,2013(11):78-81.

      [7]何增穎.虛擬機技術(shù)的實驗教學應用[J].實驗科學與技術(shù),2010(1):80-82,87.

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

      [9]Xie B, Sun G, Ma G. Docker based overlay network performance evaluation in large scale streaming system[C]// Advanced Information Management, Communicates, Electronic and Automation Control Conference (IMCEC), 2016 IEEE. IEEE, 2016: 366-369.

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

      [11]金海,廖小飛.面向計算系統(tǒng)的虛擬化技術(shù)[J].中國基礎科學,2008(6):12-18.

      [12]謝超群.Docker容器技術(shù)在高校數(shù)據(jù)中心的應用[J].貴陽學院學報(自然科學版),2015(4):27-29.

      [13]伍陽.基于Docker的虛擬化技術(shù)研究[J].信息技術(shù),2016(1):121-123,128.

      [14]James Turnbull. 第一本Docker書[M]. 北京:人民郵電出版社, 2016.

      猜你喜歡
      鏡像虛擬化容器
      Different Containers不同的容器
      鏡像
      當代黨員(2020年20期)2020-11-06 04:17:52
      難以置信的事情
      基于OpenStack虛擬化網(wǎng)絡管理平臺的設計與實現(xiàn)
      電子制作(2019年10期)2019-06-17 11:45:10
      鏡像
      小康(2018年23期)2018-08-23 06:18:52
      對基于Docker的虛擬化技術(shù)的幾點探討
      電子制作(2018年14期)2018-08-21 01:38:20
      虛擬化技術(shù)在計算機技術(shù)創(chuàng)造中的應用
      電子測試(2017年11期)2017-12-15 08:57:56
      存儲虛擬化還有優(yōu)勢嗎?
      取米
      鏡像
      小康(2015年4期)2015-03-31 14:57:40
      江门市| 荥阳市| 东至县| 莆田市| 徐闻县| 息烽县| 麟游县| 论坛| 聂拉木县| 开鲁县| 吉水县| 万年县| 云梦县| 西城区| 固阳县| 应用必备| 珠海市| 灵山县| 客服| 潮安县| 固始县| 新和县| 淅川县| 恩施市| 东阿县| 长海县| 隆林| 眉山市| 聊城市| 义乌市| 读书| 广宁县| 蚌埠市| 吴旗县| 五河县| 宝丰县| 包头市| 龙井市| 九龙县| 宣城市| 平原县|