如何使用Docker搭建大資料Hadoop環境?學會這9步,快速上手
本文目的是幫助幾乎從未接觸過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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用Ambari快速部署Hadoop大資料環境Hadoop大資料
- 使用docker快速搭建hive環境DockerHive
- 從 0 開始使用 Docker 快速搭建 Hadoop 叢集環境DockerHadoop
- 大資料學習之--hadoop2.7.3環境搭建大資料Hadoop
- 本地使用 docker 快速搭建一個 PHP7.4 學習環境DockerPHP
- Docker環境Oracle資料庫搭建DockerOracle資料庫
- 基於ECS快速搭建Docker環境Docker
- GitChat·大資料 | 史上最詳細的Hadoop環境搭建Git大資料Hadoop
- 使用docker搭建laravel環境DockerLaravel
- 快速搭建本地docker的開發環境Docker開發環境
- 使用 Docker 搭建 Laravel 本地環境DockerLaravel
- 使用docker搭建tomcat環境DockerTomcat
- 使用docker搭建gitlab環境DockerGitlab
- 大資料技術之Hadoop(入門)第3章 Hadoop執行環境搭建大資料Hadoop
- 使用 Docker 搭建本地開發環境!Docker開發環境
- 使用 Docker 搭建 PHP 開發環境DockerPHP開發環境
- 使用 docker 搭建 web 服務環境DockerWeb
- hadoop3.1.0 HDFS快速搭建偽分散式環境Hadoop分散式
- 如何使用docker搭建一個全家桶開發環境Docker開發環境
- Day2——基於ECS快速搭建Docker環境Docker
- docker搭建php環境DockerPHP
- docker搭建lnmp環境DockerLNMP
- Docker 搭建laravel環境DockerLaravel
- docker 搭建 lnmp 環境DockerLNMP
- docker搭建前端環境Docker前端
- docker本地環境搭建Docker
- Docker 搭建MongoDB環境DockerMongoDB
- 學習centos之快速搭建LNMP環境CentOSLNMP
- docker 快速上手Docker
- 大資料實戰之環境搭建(八)大資料
- 使用 PhpStorm + Docker 搭建開發環境PHPORMDocker開發環境
- 使用 Docker 搭建 Tomcat 執行環境DockerTomcat
- 五分鐘用 Docker 快速搭建 Go 開發環境DockerGo開發環境
- 體驗有禮:基於ECS快速搭建Docker環境Docker
- 使用 kind 快速搭建 kubernetes 環境
- Hadoop2.7.5環境搭建Hadoop
- Hadoop+hive環境搭建HadoopHive
- 搭建Hadoop開發環境Hadoop開發環境