Windows家庭版下基于Docker的hadoop、Spark集群搭建
目录
1、实验目的
(1)掌握在docker的安装方法;
(2)熟悉docker基本命令;
(3)基于Docker创建spark集群。
2、实验平台
操作系统:可以使windows或者Linux;
Spark版本:2.4.5;
Hadoop版本:2.7。
3、实验内容和要求
3.1 docker环境安装
3.1.1 开启Hyper-V
新建hyperv.cmd文件,内容如下:
pushd "%~dp0"
dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txt
for /f %%i in ('findstr /i . hyper-v.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i"
del hyper-v.txt
Dism /online /enable-feature /featurename:Microsoft-Hyper-V-All /LimitAccess /ALL
如下
然后以管理员身份执行hyperv.cmd文件,若需重启即重启。
然后打开控制面板——程序——启用或关闭Windows功能,如下
3.1.2 伪装成win10专业版
以管理员身份打开cmd。
执行如下命令:
REG ADD "HKEY_LOCAL_MACHINE\software\Microsoft\Windows NT\CurrentVersion" /v EditionId /T REG_EXPAND_SZ /d Professional /F
3.1.3 下载Docker for Windows
我用的是百度网盘里的,直接下载安装,完成后桌面上会有如下图标:
打开右下角会有小鲸鱼标志,进入setting可进行镜像源以及其他的配置
显示已经安装完成。
3.2 基于docker创建spark集群
3.2.1 拉取centos镜像
我拉的是centos8。
docker pull daocloud.io/library/centos:latest
接下来查看一下拉的镜像
docker images
看到如下:
3.2.2 ip设置
按顺序启动master、slave1、slave2,这样不会造成ip紊乱。
3.2.3 创建容器
执行如下代码,创建容器master、slave1、slave2。
docker run -d --privileged -ti -v /sys/fs/cgroup:/sys/fs/cgroup --name master -h master -p 50070:50070 -p 8080:8080 -p 7077:7077 -p 18088:18088 daocloud.io/library/centos /usr/sbin/init
上面是创建master容器,创建slave容器时只需将master替换成容器名并删去端口部分代码即可。例如创建slave1代码如下
docker run -d --privileged -ti -v /sys/fs/cgroup:/sys/fs/cgroup --name slave1 -h slave1 daocloud.io/library/centos /usr/sbin/init
创建完后,输入命令
docker ps -a
可以看到创建的三个容器以及他们的容器名、状态,如下
可以输入不同的容器id来进入容器,具体命令如下
docker exec -it 容器id /bin/bash
想要退出的话按Ctrl+P+Q即可。
例如进入master容器,如下
3.2.4 配置ssh实现节点间免密登陆
先换yum源,执行如下命令
yum -y install wget
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo
yum makecache
安装openssh
yum -y install openssh openssh-server openssh-clients
systemctl start sshd
修改配置文件,使得master设置ssh登录自动添加known_hosts,ssh自动接收新的密钥
vi /etc/ssh/ssh_config
将原来的StrictHostKeyChecking ask设置StrictHostKeyChecking为no,再执行
systemctl restart sshd
对于slave节点,只安装,不修改配置文件
在slave节点执行如下命令
yum -y install openssh openssh-server openssh-clients
systemctl start sshd
三个节点修改hosts文件
vi /etc/hosts
如下
公钥的互相分发
在三个节点上执行如下命令
ssh-keygen -t rsa
只需一路按回车
cat ~/.ssh/id_rsa.pub > ~/.ssh/authorized_keys
然后将各自 ~/.ssh/authorized_keys文件中的秘钥复制到其他两个节点的 ~/.ssh/authorized_keys文件中去(进入容器,修改 ~/.ssh/authorized_keys文件)
在master执行
ssh root@slave1
ssh root@slave2
可登陆两个slave节点,输入exit退回master节点。
3.2.5 Ansible安装
下载镜像源和Ansible
yum -y install epel-release
yum -y install ansible
编辑host文件
vi /etc/ansible/hosts
内容如下:
[cluster]
master
slave1
slave2
[master]
master
[slaves]
slave1
slave2
3.2.6 修改docker的hosts文件
由于 /etc/hosts 文件在容器启动时被重写,直接修改内容在容器重启后不能保留,为了让容器在重启之后获取集群 hosts,使用了一种启动容器后重写hosts的方法。需要在修改 ~/.bashrc 文件,在末尾追加以下指令
:>/etc/hosts
cat >>/etc/hosts<<EOF
127.0.0.1 localhost
172.17.0.2 master
172.17.0.3 slave1
172.17.0.4 slave2
EOF
然后执行命令
source ~