天天看點

centos8 安裝docker_mac上基于docker搭建hadoop叢集

1、拉取centos8的鏡像

在使用者目錄下:

centos8 安裝docker_mac上基于docker搭建hadoop叢集

docker拉取centos

2、建構叢集子網

按照叢集的架構,建立容器時需要設定固定IP,是以先要在docker使用如下指令建立固定IP的子網

docker network create --subnet=172.18.0.0/16 netgroup

對各個節點指定好功能 maseter為主節點,hadoop01 為從節點和datanode hadoop02 為yarn主節點負責各個節點的資源排程,

hadoop02,hadoop03為datanode節點

OS

hostname

IP

Centos8

hadoop-master

172.18.0.2

namenode

Centos8

hadoop01

172.18.0.3

secondnamenode datanode

Centos8

hadoop02

172.18.0.4

Yarn resourcemanger datanode

Centos8

hadoop03

172.18.0.5

datanode

3、啟動容器(注意要開放的端口提前在這裡配置好)

docker run -d --privileged -ti -v /sys/fs/cgroup:/sys/fs/cgroup --name hadoop_master -h hadoop-master --net netgroup --ip 172.18.0.2 -P -p 50070:50070 -p 8088:8088 centos:centos8-hadoop-master /usr/sbin/init

docker run -d --privileged -ti -v /sys/fs/cgroup:/sys/fs/cgroup --name hadoop-01 -h hadoop01 --net netgroup --ip 172.18.0.3 -P centos:centos8-hadoop01 /usr/sbin/init

docker run -d --privileged -ti -v /sys/fs/cgroup:/sys/fs/cgroup --name hadoop-02 -h hadoop02 --net netgroup --ip 172.18.0.4 -P centos:centos8-hadoop02 /usr/sbin/init

docker run -d --privileged -ti -v /sys/fs/cgroup:/sys/fs/cgroup --name hadoop-03 -h hadoop03 --net netgroup --ip 172.18.0.5 -P centos:centos8-hadoop03 /usr/sbin/init

4、在每一容器上部署Openssh

#cluster-master需要修改配置檔案(特殊)

#cluster-master

#換源

[[email protected] /]# yum -y install wget

[[email protected] /]# yum makecache

#安裝openssh

[[email protected] /]# yum -y install openssh openssh-server openssh-clients

[[email protected] /]# systemctl start sshd

####ssh自動接受新的公鑰

####master設定ssh登入自動添加kown_hosts

[[email protected] /]# vi /etc/ssh/ssh_config

将原來的StrictHostKeyChecking ask

設定StrictHostKeyChecking為no

儲存

[[email protected] /]# systemctl restart sshd

接着分别對slaves安裝openssh

[[email protected] /]# yum -y install wget

[[email protected] /]# yum makecache

#安裝openssh

[[email protected] /]#yum -y install openssh openssh-server openssh-clients

[[email protected] /]# systemctl start sshd

分别在hadoop02,hadoop03重複以上步驟,

cluster-master公鑰分發

在master機上執行ssh-keygen -t rsa并一路回車,完成之後會生成~/.ssh目錄,目錄下有id_rsa(私鑰檔案)和id_rsa.pub(公鑰檔案),再将id_rsa.pub重定向到檔案authorized_keys

ssh-keygen -t rsa

#一路回車

[[email protected] /]# cat ~/.ssh/id_rsa.pub > ~/.ssh/authorized_keys

檔案生成之後用scp将公鑰檔案分發到叢集slave主機

[[email protected] /]# ssh [email protected] 'mkdir ~/.ssh'

[[email protected] /]# scp ~/.ssh/authorized_keys [email protected]:~/.ssh

[[email protected] /]# ssh [email protected] 'mkdir ~/.ssh'

[[email protected] /]# scp ~/.ssh/authorized_keys [email protected]:~/.ssh

[[email protected] /]# ssh [email protected] 'mkdir ~/.ssh'

[[email protected] /]# scp ~/.ssh/authorized_keys [email protected]:~/.ssh

分發完成之後測試(ssh [email protected])是否已經可以免輸入密碼登入。另外本次實驗使用到了root使用者,如果在其他使用者下使用免密碼登入,需要確定使用者對~/.ssh/authorized_keys檔案有可操作權限。

Ansible安裝(負責對從節點進行同步檔案操作)

[[email protected] /]# yum -y install epel-release

[[email protected] /]# yum -y install ansible

#這樣的話ansible會被安裝到/etc/ansible目錄下

此時我們再去編輯ansible的hosts檔案

vi /etc/ansible/hosts

hosts檔案内容如下

[cluster]

hadoop-master

hadoop01

hadoop02

hadoop03

[master]

hadoop-master

[slaves]

hadoop01

hadoop02

hadoop03

進入master節點機器

docker exec -it hadoop_master /bin/bash

配置docker容器hosts

由于/etc/hosts檔案在容器啟動時被重寫,直接修改内容在容器重新開機後不能保留,為了讓容器在重新開機之後擷取叢集hosts,使用了一種啟動容器後重寫hosts的方法。

需要在~/.bashrc中追加以下指令

:>/etc/hosts

cat >>/etc/hosts<

127.0.0.1 localhost

172.18.0.2 cluster-master

172.18.0.3 cluster-slave1

172.18.0.4 cluster-slave2

172.18.0.5 cluster-slave3

EOF

source ~/.bashrc

使配置檔案生效,可以看到/etc/hosts檔案已經被改為需要的内容

[[email protected] ansible]# cat /etc/hosts

127.0.0.1 localhost

172.18.0.2 cluster-master

172.18.0.3 cluster-slave1

172.18.0.4 cluster-slave2

172.18.0.5 cluster-slave3

用ansible分發.bashrc至叢集slave下

ansible cluster -m copy -a "src=~/.bashrc dest=~/"

到這裡好不容易到了搭建Hadoop這個步驟,感覺部落客了解的東西真的是好多啊從docker一直到ansible-playbook,真是不容易啊.

Hadoop

在叢集中安裝openjdk

使用ansible在在叢集中安裝openjdk

[[email protected] ansible]# ansible cluster -m yum -a "name=java-1.8.0-openjdk,java-1.8.0-openjdk-devel state=latest"

在cluster-master上安裝hadoop

将hadoop安裝包下載下傳至/opt目錄下

這裡采用Hadoop 2.x系列最穩定的stable版本2.7.4 你可以選擇更新成hadoop-3.x beta版本 或者 hadoop 2.8.2,隻要你能駕馭的了

[[email protected] opt]# wget http://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.7.4/hadoop-2.7.4.tar.gz

下載下傳完成之後解壓安裝包,并建立連結檔案

[[email protected] opt]# tar -xzvf hadoop-2.7.4.tar.gz

[[email protected] opt]# ln -s hadoop-2.7.4 hadoop

設定java和hadoop環境變量(.bashrc)

# hadoop

export HADOOP_HOME=/opt/hadoop

export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

#java

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.151-1.b12.el7_4.x86_64/

export PATH=$JAVA_HOME/bin:$PATH

注意一下,這裡的JAVA_HOME的版本java-1.8.0-openjdk-1.8.0.151-1.b12.el7_4.x86_64/需要以實際情況為準,你可以打開你的/usr/lib/jvm/目錄進行自行确認,此處為實際設定。

修改hadoop運作所需配置檔案

掌握過Hadoop的朋友都知道,Hadoop叢集搭建需要修改幾個必要的配置檔案以及xml參數設定,此處不深究.

進入hadoop的安裝目錄

cd $HADOOP_HOME/etc/hadoop/

首先我們修改**core-site.xml**這個檔案:

vi core-site.xml

hadoop.tmp.dir

/home/hadoop/tmp

A base for other temporary directories.

fs.default.name

hdfs://hadoop-master:9000

fs.trash.interval

4320

hdfs-site.xml

dfs.namenode.name.dir

/home/hadoop/tmp/dfs/name

dfs.datanode.data.dir

/home/hadoop/data

dfs.replication

3

dfs.secondary.http.address

hadoop01:50090

secondarynamenode運作節點的資訊 和namenode不同節點

mapred-site.xml

mapreduce.framework.name

yarn

yarn-site.xml

yarn.resourcemanager.hostname

hadoop02

yarn.nodemanager.aux-services

mapreduce_shuffle

yarn.nodemanager.aux-services.mapreduce.shuffle.class

org.apache.hadoop.mapred.ShuffleHandler

打包hadoop檔案

将hadoop連結檔案和hadoop-2.7.4打包成一個檔案友善ansible分發到slave主機

[[email protected] opt]# tar -cvf hadoop-dis.tar hadoop hadoop-2.7.4

使用ansible-playbook分發.bashrc和hadoop-dis.tar至slave主機

建立 hadoop-dis.yaml,内容如下:

分發檔案

---

- hosts: cluster

tasks:

- name: copy .bashrc to slaves

copy: src=~/.bashrc dest=~/

notify:

- exec source

- name: copy hadoop-dis.tar to slaves

unarchive: src=/opt/hadoop-dis.tar dest=/opt

handlers:

- name: exec source

shell: source ~/.bashrc

并執行

[[email protected] opt]# ansible-playbook hadoop-dis.yaml

hadoop-dis.tar會自動解壓到slave主機的/opt目錄下

格式化hdfs

hadoop namenode -format

此時如果你看到return 0 ;Sucessfully formatted等字樣說明HDFS叢集格式化成功了.如有不成功,可先自行查找錯誤

啟動hadoop叢集

到這一步已經可以開始hadoop之旅了,啟動比較簡單,在$HADOOP_HOME/sbin下有幾個啟動和停止的腳本如下:

centos8 安裝docker_mac上基于docker搭建hadoop叢集

hadoop啟動相關指令

啟動hdfs start-dfs.sh 在任意節點

啟動yarn start-yarn.sh 在yarn節點

在master節點執行jsp 隻能看到

centos8 安裝docker_mac上基于docker搭建hadoop叢集
centos8 安裝docker_mac上基于docker搭建hadoop叢集
centos8 安裝docker_mac上基于docker搭建hadoop叢集
centos8 安裝docker_mac上基于docker搭建hadoop叢集