999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Docker的Hadoop完全分布式集群快速部署

2022-08-24 11:19:00胡必波劉鐘凌劉曉娟焦花花
無線互聯科技 2022年12期

胡必波,劉鐘凌,劉曉娟,焦花花

(廣州工商學院工學院,廣東 廣州 510850)

0 引言

Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然后發布到任何流行的 Linux 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何接口。當前在Hadoop技術的發展中,如何把Docker技術應用于Hadoop平臺的建立,尤其是對于Hadoop on Docker規模部署問題的解決,一直是一個備受關注的技術難點。以往Hadoop on Docker大數據平臺的部署,只在單機情況下實現過,而且過程繁瑣,耗時很長,而借助Docker作為優化手段,在大規模多機器的情況下進行一鍵部署,降低了企業安裝和使用的成本,是目前Hadoop系統架構方面最受關注的技術熱點之一。

1 系統部署與集群規劃

Docker不同于模擬硬件的虛擬機,它是一種對進程進行隔離的虛擬化技術,被隔離的進程獨立于宿主操作系統和其他隔離的進程。使用 Docker 可以不修改應用程序代碼,就能夠將現有的應用程序部署在其他機器上,具有啟動速度快,占用資源少,部署方便,成本較低等優勢,適于解決環境配置問題。基于Docker的一鍵部署自底向上分為7個層次,如圖1所示。最底層為安裝Windows10操作系統的物理主機(宿主機),第二層安裝虛擬機軟件Wmware WorkStation 15,第三層定制Linux虛擬機,第四層安裝Centos8操作系統的客戶機,并安裝部署Docker 20.10.12服務,第五層構建用于集群Docker鏡像,第六層創建集群Docker容器,第七層部署Hadoop 2.7.2集群生態圈組件[1]。其中第三層Linux虛擬機和第一層Windows物理機采用NAT網絡模式,虛擬機要聯網得先通過宿主機才能和外面進行通信,第六層Docker容器集群與第三層Linux虛擬機采用橋接模式,相對虛擬機和物理機所處網段,獨立為一個192.168.2.0虛擬網段。

圖1 基于Docker一鍵部署Hadoop集群

2 Docker環境部署

2.1 鏡像部署

Docker 基礎鏡像是指一個包含最基本應用的鏡像,通常只有最基本的 Linux 環境,和一些基礎的應用。根據部署圖規劃按自底向上的順序,創建的Linux虛擬機,安裝CentOS8操作系統,修改主機名為node01,在網卡中設置固定IP地址:192.168.137.226,配置IP地址映射。下載docker-ce.repo后執行“docker-ce-cli containerd.io --allowerasing”命令,成功安裝Docker后,還需要進行鏡像倉庫源的配置,將官方公共倉庫Docker Hub替換為國內的公共倉庫,例如阿里云、網易源等,便于加快鏡像拉取速度。Docker鏡像含有啟動容器所需要的文件系統及其內容,用于創建并啟動容器。在分層構建機制中,最底層為bootfs,用于系統引導的文件系統,例如aufs、overlay2等,容器啟動完成之后會被卸載以節約內存資源。位于bootfs之上一層是rootfs,為docker容器的根文件系統。rootfs由內核掛載為“只讀”模式,而后通過“聯合掛載”技術額外掛載一個“可寫”層。執行“docker pull centos:centos8.2.2004”命令,拉取最小化基礎鏡像(FROM scratch)。

2.2 容器部署

執行“docker run -it centos:centos8.2.2004 /bin/bash”命令,創建一個ID 為d7a9959168b5的容器。Docker支持四種網絡模式分別是 bridge,默認網絡模型,Docker啟動后默認會創建一個docker0網橋,默認創建的容器也是添加到這個網橋中;host,容器和宿主機共享一個網絡名稱空間Network namespace;container,和已經存在的容器使用同一個網絡名稱空間,網卡配置也都是相同的;none,不為容器進行任何網絡配置。執行“ping 192.168.2.1”命令,查看該容器是否能夠ping通網橋,執行“ping www.baidu.com”命令,查看該容器是否能夠ping通外網。

Secure Shell(SSH)是由 IETF制定的建立在應用層基礎上的安全網絡協議。它采用了非對稱加密技術(RSA)加密了所有傳輸的數據,并提供基于口令的安全驗證和基于密鑰的安全驗證兩種級別的驗證方法。與第一種級別相比,采用第二種級別不僅加密所有傳輸的數據,也不需要在網絡上傳送口令,因此安全性更高,可以有效防止中間人攻擊。由于Hadoop集群節點比較多且頻繁,需要在這些節點之間執行指令時采用無須輸入密碼的認證方式。執行“ssh-keygen -t rsa”命令,連續按4次回車,生成兩個文件id_rsa(私鑰)、id_rsa.pub(公鑰),可在隱藏文件夾/root/.ssh/下查看上述兩個文件,再執行“ssh-copy-id node01”命令復制.ssh/id_rsa.pub 至遠程主機節點的.ssh /authorized _ keys 文 件中,實現集群任意兩節點的無密碼登錄。Docker 提供兩種制作鏡像的方法:一種是基于官方鏡像,按照生產環境的需求編寫 Dockerfile文件,以此作為依據生成新的鏡像;另一種是基于官方鏡像創建容器后進行相關環境的部署,然后使用commit命令將配置好的容器封裝成一個新的鏡像。執行“docker commit d7a9959168b5 centos8_ssh”命令,將配置好的容器保存為一個新鏡像[2]。圖2為 Docker容器網絡連接示意圖。

圖2 Docker容器網絡連接

3 一鍵部署Hadoop集群

Hadoop是一個由Apache基金會開發的開源軟件,具有可靠性、擴展性的分布式的計算存儲系統。Hadoop的框架核心的設計是HDFS、MapReduce,其中HDFS為海量的數據提供了存儲,而MapReduce為海量的數據提供了計算。Hadoop2.0以后MapReduce1.0中的資源管理調度功能,被單獨分離出來形成了YARN,它是一個純粹的資源管理調度框架,而不是一個計算框架。被剝離了資源管理調度功能的MapReduce 框架就變成了MapReduce2.0,它是運行在YARN之上的一個純粹的計算框架,不再自己負責資源調度管理服務,而是由YARN為其提供資源管理調度服務[3-5]。

3.1 一鍵部署HDFS集群

Docker數據卷的設計目的就是數據的持久化,可用于持續存儲或共享數據。數據卷完全獨立于容器的生命周期,docker不會在刪除容器時刪除其掛載的數據卷。執行“docker run -v /usr/local/myshare/nn01:/usr/local/dfs/centos8_ssh /usr/sbin/sshd -D”命令,重啟一個ID為64f2889ebb77新容器。將Hadoop安裝包解壓到虛擬機node01的/usr/local目錄下,修改/hadoop/etc/hadoop/目錄下core-site.xml、hadoop-env.sh、hdfs-site.xml等配置文件后,掛載到Docker容器映射目錄/usr/local/myshare下,執行“cp -r hadoop /usr/local/”命令,復制到容器/usr/local目錄下。執行“./hdfs namenode -format”命令格式化,執行“./start-dfs.sh”命令,啟動hdfs集群測試。執行“docker commit 64f2889ebb77 centos8_hadoop:v3”命令,將配置好的容器保存為一個新鏡像。執行“./hdfs.sh”腳本命令后,部署效果如圖3所示,實現一鍵部署HDFS集群的hdfs.sh腳本代碼如下:

圖3 一鍵部署HDFS

#!/bin/bash

#刪除本機已有的容器,防止和新啟動的容器沖突

……

#創建Bridge網絡cluster_bridge,并設置子網

bridge_name=cluster_bridge

……

#指定鏡像名

IMG=centos8_hadoop

#腳本第一個參數為集群節點個數,賦值給total_node_num(默認值為1)

total_node_num=1

……

host_node="node01"

#設置集群的起始IP為192.168.2.1,cluster_bridge設備地址占用

start_ip=192.168.2.1

#獲取起始IP的前綴,即192.168.2

……

node_num=0

#循環執行total_node_num次

let start_ip_num++

node_name="nn01"

#合成容器IP

nn01_ip=${ip_prefix}.${start_ip_num}

cmd="docker run --network $bridge_name --ip $nn01_ip --add-host $host_node:$start_ip -h $node_name --name $node_name -v /usr/local/myshare/$node_name:/usr/local/dfs -p 50070∶50070 $IMG /usr/sbin/sshd -D"

$cmd &

echo $cmd

#刪除原有從節點文件

rm slaves

#echo $node_name >> workers

while [ $i -lt $total_node_num ]

do

#start_ip_num加一

let start_ip_num++

#node_num加一

let node_num++

#合成節點主機名

node_name="dn"$node_num

#合成容器IP

container_ip=${ip_prefix}.${start_ip_num}

#創建Host上的映射目錄,每個容器會在Host的/usr/local/myshare下主機名目錄,以此映射到容器的/usr/local/dfs/datanode下

mkdir -p /usr/local/myshare/$node_name

#合成容器啟動命令,命令末行傳入兩個參數,用來測試容器默認程序,能否接收用戶參數

cmd="docker run --network $bridge_name --ip $container_ip --add-host $host_node:$start_ip -h $node_name --name $node_name -v /usr/local /share/$node_name:/usr/local/dfs $IMG /usr/sbin/sshd -D"

echo $cmd

#運行容器

$cmd &

#等待1秒啟動下一個容器

sleep 1

let i++

echo $node_name >>slaves

done

sleep 15

#重新設置從節點文件

scp slaves ${nn01_ip}:/usr/local/hadoop/etc/hadoop/

#啟動HDFS集群

ssh $nn01_ip "cd /usr/local/hadoop;./sbin/start-dfs.sh"

3.2 一鍵部署YARN集群

執行“./hdfs.sh 1”腳本命令,啟動ID為7013a665bd3a新容器。切換到/usr/local目錄下,修改/hadoop/etc/hadoop/目錄下yarn-env.sh、mapred-site.xml、yarn-site.xml等配置文件后,執行“docker commit 7013a665bd3a centos8_hadoop:v4”,將配置好的容器保存為一個新鏡像。容器中可以運行一些網絡應用,要讓外部也可以訪問這些應用,可以通過 -P(大寫)或 -p (小寫)參數來指定端口映射。執行“.yarn.sh”腳本命令后,實現一鍵部署YARN集群的yarn.sh腳本代碼與hdfs.sh腳本代碼類似,YARN集群服務需要映射8088端口,日志服務需要映射19888端口,腳本末尾增加兩行啟動YARN集群代碼如下:

#!/bin/bash

……

cmd="docker run --network $bridge_name --ip $nn01_ip --add-host $host_node:$start_ip -h $node_name --name $node_name -v /usr/local/myshare/$node_name:/usr/local/dfs -p 50070∶50070 -p 8088∶8088 -p 19888∶19888 $IMG /usr/sbin/sshd -D"

……

ssh $nn01_ip " cd /usr/local/hadoop;./sbin/mr-jobhistory-daemon.sh start historyserver"

ssh $nn01_ip " cd /usr/local/hadoop;./sbin/start-yarn.sh"

4 結語

在系統部署前先進行集群規劃,然后再定制Linux虛擬機并采用NAT網絡模式安裝Centos8客戶機操作系統,完成更新安裝源、卸載防火墻、配置固定IP地址以及SSH無密碼登錄等基礎操作,如果帶圖形化界面安裝還需要先刪除 podman組件,避免和Docker發生沖突。安裝Docker后可選擇阿里云、網易源等鏡像倉庫源完成鏡像加速。以橋接模式啟動容器后,需要保證容器所在網段與Host宿主機所在的網段網絡暢通并可連接外網[6,7]。Hadoop一鍵安裝部署圍繞HDFS集群和YARN集群展開。Docker容器對于宿主機器來說只是一個運行在Linux上的應用,因此它的數據存儲還是會依賴宿主機器,Docker是通過掛載宿主機文件系統或內存的方式來實現數據存儲,掛載方式有3種:volume,bind mount和tmpfs。

bind mounts(綁定掛載)可以存儲在宿主機器任何一個地方,依賴宿主機器的目錄結構,非docker進程和docker進程都可以修改該路徑下的文件。使用綁定安裝時,會將主機上的文件或目錄安裝到容器中,文件或目錄由主機上的完整或相對路徑引用,該文件或目錄不需要在Docker主機上已經存在,如果不存在,則按需創建。bind mounts性能非常好,因此一鍵部署時可通過bind mount方式完成Hadoop集群的數據持久化存儲,確保集群數據不會丟失。Hadoop on Docker規模一鍵快速部署可以在一個虛擬機上,使用一個命令快速構建指定數量的HDFS、YARN集群。與傳統VMware部署上百集群相比,它只需要一個存儲鏡像即可部署上萬集群,具有靈活方便、開銷更小、效率更高、可擴展性強等優勢,在Hadoop on Docker基礎上,后續可在學習和生產環境下實現任意節點HBase,Hive,Spark等生態圈組件一鍵部署。

主站蜘蛛池模板: 91在线一9|永久视频在线| 91系列在线观看| 91精品国产91欠久久久久| 国产人妖视频一区在线观看| 在线a网站| 五月激激激综合网色播免费| 人妻无码一区二区视频| 日韩精品久久无码中文字幕色欲| 波多野结衣在线一区二区| 国产精品lululu在线观看| 国产欧美日韩专区发布| 91娇喘视频| 婷婷色婷婷| 99国产精品免费观看视频| 亚洲乱码精品久久久久..| 成人福利免费在线观看| 一级片一区| 国产精品污视频| 4虎影视国产在线观看精品| 制服丝袜亚洲| 成色7777精品在线| 在线免费亚洲无码视频| 国产成人综合日韩精品无码不卡| 亚洲人成网站18禁动漫无码| 日韩不卡免费视频| 国产亚洲精久久久久久久91| 久久香蕉国产线看观看式| 午夜在线不卡| 欧美精品一区在线看| 99久久精品国产综合婷婷| 人妻一本久道久久综合久久鬼色| 午夜激情福利视频| 国产av一码二码三码无码| 成人伊人色一区二区三区| 成人自拍视频在线观看| 2020精品极品国产色在线观看| 久久亚洲国产一区二区| 久久先锋资源| 26uuu国产精品视频| 2022精品国偷自产免费观看| 欧美激情视频一区| 狠狠干综合| 免费亚洲成人| 免费人成在线观看成人片| 国产视频 第一页| 在线精品自拍| 国产高清在线观看| 91成人在线免费视频| 19国产精品麻豆免费观看| 国产欧美日韩专区发布| 人妻丰满熟妇αv无码| 午夜a级毛片| 国产在线观看一区精品| 国产精品19p| 国产人成在线观看| 国模在线视频一区二区三区| 精品久久人人爽人人玩人人妻| 亚洲男人天堂久久| 在线观看无码a∨| 国产微拍一区| 久热99这里只有精品视频6| 国产精品三级专区| 国产精品无码制服丝袜| 欧美高清国产| 曰韩人妻一区二区三区| 无遮挡国产高潮视频免费观看 | 日韩中文欧美| 中文字幕在线一区二区在线| 欧美成人午夜影院| 自拍偷拍欧美日韩| 麻豆国产精品一二三在线观看| 草逼视频国产| 99九九成人免费视频精品| 一本一道波多野结衣av黑人在线| 日韩欧美国产成人| 区国产精品搜索视频| 黄色成年视频| 亚洲欧美综合另类图片小说区| 99青青青精品视频在线| 国产 在线视频无码| 国产玖玖玖精品视频| 狠狠色综合网|