如何使用Docker搭建大資料Hadoop環境?學會這9步,快速上手

pswyjz發表於2021-09-09

本文目的是幫助幾乎從未接觸過Docker和大資料Hadoop的同學,快速上手搭建Docker大資料Hadoop環境。其實Docker很簡單,你可以把它想象成一個Tomcat伺服器,之所以這樣比喻,主要是Docker容器最佳實踐場景是快速部署專案。讓我們馬上開始吧。

首先介紹一下環境:

本次搭建的平臺是基於Windows下Vmware中安裝的CentOS7虛擬機器,在虛擬機器中完成所有操作。本文重點在Docker和Hadoop,至於虛擬機器的搭建,本文不再贅述。

作業系統:CentOS Linux release 7.5.1804

Docker版本:1.13.1

Hadoop版本:hadoop-2.6.0-cdh5.14.0.tar.gz

JDK版本:jdk-8u162-linux-x64.tar.gz

一.什麼是Docker

Docker 最初是 dotCloud 公司創始人 SolomonHykes 在法國期間發起的一個公司內部專案,它是基於dotCloud 公司多年雲服務技術的一次革新,用Go 語言實現,並於 2013 年 3月以Apache 2.0 授權協議開源,主要專案程式碼在 GitHub 上進行維護。原始碼下載:

主要功能:支援應用部署。

二、為什麼要使用 Docker

更高效的利用系統資源。不需要進行硬體虛擬以及執行完整作業系統等額外開銷,Docker 對系統資源的利用率更高。

更快速的啟動時間。由於直接執行於宿主核心,無需啟動完整的作業系統,因此可以做到秒級、甚至毫秒級的啟動時間。

一致的執行環境。不會再出現“這段程式碼在我機器上沒問題啊” 這類問題。

持續交付和部署。開發人員可以透過 Dockerfile 來進行映象構建,並結合持續整合(ContinuousIntegration) 系統進行整合測試。

三、容器

Docker是容器,可以理解為輕量級的虛擬機器。但是這裡需要明確的一個概念是,容器比虛擬機器更輕量級,一個作業系統上,應該能部署上千個Docker容器,這是虛擬機器無法比擬的。Docker和虛擬機器對比如下:

圖片描述

四、三大核心概念

映象(Image)。Docker 映象是一個特殊的檔案系統。映象構建時,會一層層構建,前一層是後一層的基礎。每一層構建完就不會再發生改變,後一層上的任何改變只發生在自己這一層。

容器(Container)。映象(Image)和容器(Container)的關係,就像是物件導向程式設計中的類和例項一樣。容器是映象的一個例項。

倉庫(Repository)。儲存、分發映象的伺服器;一個伺服器可以有多個倉庫。最常使用的 Registry 公開服務是官方的 DockerHub。分發映象的伺服器=資料庫伺服器 倉庫=資料庫

五、安裝Docker

1. 對於CenterOS7系統,內建Docker,可以直接安裝

[root@hadoop111 ~]# yum install -y docker

複製程式碼

2. 啟動Docker

[root@hadoop111 ~]# service docker startRedirecting to /bin/systemctl start docker.serviceJob for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.

複製程式碼

注意:這裡你可能遇到一個問題,無法啟動Docker。大體上有如下兩個原因:

第一,firewalld.service沒有關閉。

[root@hadoop111 ~]# systemctl disable firewalld[root@hadoop111 ~]# systemctl stop firewalld

複製程式碼

第二,selinux沒有關閉。請檢視本機並關閉

[root@hadoop111 ~]# vi /etc/selinux/config

複製程式碼

修改SELINUX=disabled,如下

圖片描述

reboot重啟並檢視狀態

[root@hadoop111 ~]# sestatus

複製程式碼

SELinux status: disabled

3. 啟動Docker,很可能需要解除安裝重灌Docker才能啟動

[root@hadoop111 ~]# yum remove docke[root@hadoop111 ~]# yum install docker[root@hadoop111 ~]# service docker start

複製程式碼

六、利用Docker獲取CentOS映象,並建立一個容器

1.下載CentOS

[root@hadoop111 ~]# docker pull centos #該命令會自動下載最新版本docker官方的centos,目前是7.5

複製程式碼

Using default tag: latestTrying to pull repository docker.io/library/centos ... latest: Pulling from docker.io/library/centos7dc0dca2b151: Pull complete Digest: sha256:b67d21dfe609ddacf404589e04631d90a342921e81c40aeaf3391f6717fa5322Status: Downloaded newer image for docker.io/centos:latest 

2. 檢視映象

[root@hadoop111 ~]# docker images

複製程式碼

REPOSITORY TAG IMAGE ID CREATED SIZE

docker.io/centos latest 49f7960eb7e4 8 daysago 200 MB

3.建立容器並啟動

[root@hadoop111 ~]# docker run --privileged=true -it --name=hadoop centos /bin/bash

複製程式碼

[root@cf869bdd4561 /]# #注意,此時你已經進入容器,你會發現root@cf869bdd4561的主機名發生變化

複製程式碼

4.檢視容器

首先克隆一個新的視窗,新視窗連線的是虛擬機器,原視窗連線的是容器

圖片描述

[root@hadoop111 ~]# docker ps #注意,請根據主機名判斷操作的到底是容器還是虛擬機器

複製程式碼

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

cf869bdd4561 centos "/bin/bash" 5 minutes ago Up 5 minutes hadoop

七、Docker容器中下載並安裝Java

1. 下載JDK

jdk-8u162-linux-x64.tar.gz獲取連結,請下載該版本或更高版本。

2. 上傳JDK到虛擬機器

圖片描述

3. 從虛擬機器把JDK複製到Docker中

在/opt目錄中建立software目錄,來存放我們的安裝包

[root@cf869bdd4561 /]# cd /opt #注意這裡是容器的連線視窗,從這裡開始,務必請讀者注意操作的是虛擬機器還是容器

[root@cf869bdd4561 opt]# ls

[root@cf869bdd4561 opt]# mkdir software

[root@cf869bdd4561 opt]# ls

複製程式碼

software

複製虛擬機器中的安裝包到Docker容器中 #注意這裡操作的是虛擬機器

[root@hadoop111 ~]# docker cp /opt/software/jdk-8u162-linux-x64.tar.gz cf869bdd4561:/opt/software

複製程式碼

有必要簡單解釋一下:89d8c85c6b03為docker容器的ID號

4. 在Docker容器中解壓JDK

[root@cf869bdd4561 software]# ls

複製程式碼

jdk-8u162-linux-x64.tar.gz

[root@cf869bdd4561 software]# tar -zxvf jdk-8u162-linux-x64.tar.gz

複製程式碼

5. 新增環境變數

[root@cf869bdd4561 software]# vi /etc/profile

複製程式碼

新增如下內容

export JAVA_HOME=/opt/software/jdk1.8.0_162

export JRE_HOME=${JAVA_HOME}/jre

export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib

export PATH=${JAVA_HOME}/bin:$PATH

複製程式碼

6.儲存退出後重新整理變數

[root@cf869bdd4561 software]# source /etc/profile

複製程式碼

7.透過java -version測試是否生效

[root@cf869bdd4561 software]# java -versionjava version "1.8.0_162"Java(TM) SE Runtime Environment (build 1.8.0_162-b12)Java HotSpot(TM) 64-Bit Server VM (build 25.162-b12, mixed mode)

複製程式碼

八、SSH的安裝以及配置

1. 透過yum 安裝 SSH

[root@cf869bdd4561 software]# yum install openssh-server #出現提示,一律輸入y[root@cf869bdd4561 software]#yum install openssh-clients #出現提示,一律輸入y

複製程式碼

2. 啟動sshd,但是出現錯誤,無法正常啟動

[root@cf869bdd4561 software]# /usr/sbin/sshdCould not load host key: /etc/ssh/ssh_host_rsa_keyCould not load host key: /etc/ssh/ssh_host_ecdsa_keyCould not load host key: /etc/ssh/ssh_host_ed25519_key

複製程式碼

解決方法如下:

[root@cf869bdd4561 hadoop]# ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N ''

[root@cf869bdd4561 hadoop]# ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ''

[root@cf869bdd4561 hadoop]# ssh-keygen -t dsa -f /etc/ssh/ssh_host_ed25519_key -N ''

複製程式碼

Generating public/private dsa key pair.Your identification has been saved in /etc/ssh/ssh_host_ed25519_key.Your public key has been saved in /etc/ssh/ssh_host_ed25519_key.pub.The key fingerprint is:SHA256:vvGgz78OpXzh2appyJIHfoos8PYzfHPBJvU14In5X6o root@cf869bdd4561The key's randomart image is:+---[DSA 1024]----+| || . || + o || + o o || oSoo. . ||. . .o++o+ . ||.. o + +B.+..o ||..o.B BooO .o || oo.oO.=*+Eo |+----[SHA256]-----+

ssh-keygen 中的引數 -q 表示以quiet方式執行,也就是不輸出執行情況。 -t 表示生成的host key 的型別

3. 設定root密碼,並測試登陸到本機

[root@cf869bdd4561 ssh]# yum install net-tools #安裝網路工具,出現提示,一律輸入y

[root@cf869bdd4561 ssh]# /usr/sbin/sshd #開啟sshd服務

[root@cf869bdd4561 ssh]# ps -ef|grep ssh #檢視是否開啟成功

[root@cf869bdd4561 ssh]# passwd root

複製程式碼

Changing password for user root.New password:BAD PASSWORD: The password fails the dictionary check - it does not contain enough DIFFERENT charactersRetype new password:passwd: all authentication tokens updated successfully.

4. 設定本機免密碼登陸

[root@cf869bdd4561 ~]# ssh-keygen

複製程式碼

Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): # 按enter, 使用預設的目錄和檔名Enter passphrase (empty for no passphrase): # 按enter, 使用空密碼Enter same passphrase again: # 按enter, 重複密碼Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub.The key fingerprint is:c5:3b:1f:cc:07:d5:6b:e3:12:57:c2:84:a3:2e:97:32 root@f795f10ac377The key's randomart image is:+--[ RSA 2048]----+| +o. || . o.o o|| o... .o|| ..+ o = || S.o.+ * .|| E +o + . || = . . || || |+-----------------+

這時在~/.ssh/目錄下就會出現公鑰和私鑰

[root@cf869bdd4561 .ssh]# pwd/root/.ssh

[root@cf869bdd4561 .ssh]# lsid_rsa id_rsa.pub

複製程式碼

建立authorized_keys檔案,並把公鑰複製到檔案中

[root@cf869bdd4561 .ssh]# cp id_rsa.pub authorized_keys

[root@cf869bdd4561 .ssh]# ssh root@localhost #直接登入沒有輸入密碼

複製程式碼

The authenticity of host 'localhost (::1)' can't be established.ECDSA key fingerprint is SHA256:Eqz14YEENUCrAShfwmT5ip+PSlhycE6iBOg93CZusL8.ECDSA key fingerprint is MD5:14:c7:1a:d2:39:e5:fd:1b:27:b6:77:8c:ae:a5:de:d4.Are you sure you want to continue connecting (yes/no)? yes #可能會需要輸入yes,第二次再SSH不需要Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.[root@cf869bdd4561 ~]# exitlogoutConnection to localhost closed.

九、Hadoop安裝以及配置

1. 下載Hadoop的tar包

hadoop-2.6.0-cdh5.14.0.tar.gz獲取連結如下,請下載本版本或更高版本

https://www.cloudera.com/documentation/enterprise/release-notes/topics/cdh_vd_cdh_package_tarball_514.html#cm_vd_cdh_package_tarball_514

圖片描述

2. 上傳至虛擬機器

圖片描述

3. 複製到Docker容器中,注意這個動作是在虛擬機器下

[root@hadoop111 ~]#docker cp /opt/software/hadoop-2.6.0-cdh5.14.0.tar.gzcf869bdd4561:/opt/software

複製程式碼

4. 解壓

[root@cf869bdd4561software]# tar -zxvf hadoop-2.6.0-cdh5.14.0.tar.gz #注意,操作的是容器

複製程式碼

5. 新增Hadoop相關的環境變數

[root@cf869bdd4561software]# vi /etc/profile

複製程式碼

新增以下內容

export HADOOP_HOME=/opt/software/hadoop-2.6.0-cdh5.14.0

export PATH=${JAVA_HOME}/bin:${HADOOP_HOME}/bin:$PATH

複製程式碼

重新整理檔案

[root@cf869bdd4561 software]# source /etc/profile

複製程式碼

6. 修改配置檔案

cd到Hadoop的配置檔案路徑/opt/software/hadoop-2.6.0-cdh5.14.0/etc/hadoop

[root@cf869bdd4561 hadoop]# vi core-site.xml

複製程式碼

新增如下內容

hadoop.tmp.dir

file:/data/hadoop/tmp

fs.defaultFS

hdfs://localhost:9000

複製程式碼

[root@cf869bdd4561 hadoop]# vi hdfs-site.xml

複製程式碼

新增如下內容

dfs.replication

1

dfs.namenode.name.dir

file:/data/hadoop/dfs/name

dfs.datanode.data.dir

file:/data/hadoop/dfs/data

複製程式碼

[root@cf869bdd4561 hadoop]# vi hadoop-env.sh

複製程式碼

新增如下內容

JAVA_HOME=/opt/software/jdk1.8.0_162

複製程式碼

7. 格式化namenode

[root@cf869bdd4561 hadoop]# mkdir -p /data/hadoop/tmp #建立資料存放檔案

[root@cf869bdd4561 hadoop]# yum install which #如果沒有which命令會影響後續的工作,所以需要安裝

[root@cf869bdd4561 hadoop]# hdfs namenode -format

複製程式碼

8. 啟動

[root@cf869bdd4561 sbin]# ./start-all.sh #建立檔案,注意sbin目錄沒有加到環境變數下,所以需要在該目錄下執行啟動命令

[root@cf869bdd4561 sbin]# jps

複製程式碼

1457 NameNode

1570 DataNode

1955 NodeManager

1717 SecondaryNameNode

1863 ResourceManager

2254 Jps

9. 測試

[root@cf869bdd4561sbin]# hdfs dfs -mkdir /data

複製程式碼

18/06/1209:57:01 WARN util.NativeCodeLoader: Unable to load native-hadoop library foryour platform... using builtin-java classes where applicable

[root@cf869bdd4561sbin]# hdfs dfs -ls / #檢視檔案

複製程式碼

18/06/1209:57:08 WARN util.NativeCodeLoader: Unable to load native-hadoop library foryour platform... using builtin-java classes where applicable

Found 1 items

drwxr-xr-x - root supergroup 0 2018-06-12 09:57 /data

好了,恭喜大家,到此一個Docker下的Hadoop環境搭建完畢。

10. 為了分享給別人使用,你可以把它儲存成映象

[root@hadoop111~]# docker commit cf869bdd4561hadoopone #注意操作的是虛擬機器

複製程式碼

圖片描述

下次,該映象可以直接建立容器。你的環境真正做到了,一次搭建,到處執行。



作者:解放號社群
連結:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/755/viewspace-2805809/,如需轉載,請註明出處,否則將追究法律責任。

相關文章