基于docker的spark-hadoop分布式集群搭建

本文详细介绍了如何在Windows10环境下使用Docker搭建一个完全分布式的Spark-Hadoop集群,包括Docker的安装、环境配置、Hadoop的完全分布式搭建以及Spark的配置和启动。涉及的主要步骤包括:Docker安装、更换apt源、创建网络及容器、配置SSH免密登录、安装和配置Hadoop、配置Spark以及启动Spark服务。
摘要由CSDN通过智能技术生成

一、docker的安装

1.windows10专业版安装

我所用的宿主机是windows10专业版,安装docker比较方便
安装包的网盘链接:https://pan.baidu.com/s/1dzIexBLt2tohySO7xNYMHw
提取码:lhs6
在这里插入图片描述


2.windows10家庭版安装

如果是家庭版的话会有一些问题,解决方法如下:
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文件
如果系统要你重启,便重启。


2.伪装成win10专业版
以管理员身份打开cmd。
执行如下命令:
REG ADD “HKEY_LOCAL_MACHINE\software\Microsoft\Windows NT\CurrentVersion” /v EditionId /T REG_EXPAND_SZ /d Professional /F


3.下载Docker for Windows
官网下载链接(需翻墙): https://store.docker.com/editions/community/docker-ce-desktop-windows
国内镜像:
https://oomake.com/download/docker-windows (百度网盘)
https://mirrors.ustc.edu.cn/docker-ce/ (版本更新不及时)
下载后直接安装,安装时注意取消勾选window容器(默认不会勾选)。
Docker安装成功后,执行cmd命令docker version。

如果上述方法仍然存在问题,则可以把Hyper-V.bat文件内修改成
pushd “%~dp0”
dir /b %SystemRoot%\servicing\Packages*containers*.mum >containers.txt
for /f %%i in (‘findstr /i . containers.txt 2^>nul’) do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages%%i"
del containers.txt
Dism /online /enable-feature /featurename:Containers -All /LimitAccess /ALL
pause
管理员运行,重启安装即可。


3.对docker进行测试

测试是否安装成功

docker info

在这里插入图片描述
docker默认将镜像存在C盘中,如果不想占用C盘空间,则可以将其改到其他盘符
在这里插入图片描述

4.创建需要的镜像与容器

本项目搭建在ubuntu系统上,需要ubuntu镜像,一共是三个节点,一个master,两个slave,共需要三个容器,下面是镜像的获取与容器的创建:
获取ubuntu镜像:

docker pull ubuntu

在这里插入图片描述


查看已有的镜像

docker images

在这里插入图片描述


创建桥接网络,连接宿主机,master和两个slave

docker network create -d bridge spark-net
docker network ls

在这里插入图片描述


创建master节点

–name 配置容器名为master,–network将master接入spark-net网络,-h设置主机名为master,-p 8088:8888 -p 50070:50070分别是将容器的8888端口映射到宿主机的8888端口,将50070端口映射到宿主机的50070端口,将4040端口映射到宿主机的4040端口,将7077端口映射到宿主机的7077端口(这四个端口是后面配置的访问hadoop和spark web页面以及连接spark-shell的端口,由于在创建容器后再更改很麻烦,所以在创建容器的时候就设置好)

docker run -itd --name master  --network spark-net -h master -p 8888:8888 -p 50070:50070 -p 4040:4040 -p 7077:7077 ubuntu

二、环境的配置

登录master

docker exec -it master /bin/bash

在这里插入图片描述

1.更换apt源

cd /etc/apt

将原有的源文件备份

mv sources.list sources.list.bak

换为国内源,这里提供阿里的资源

echo deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse  >> sources.listecho deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse >> sources.listecho deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse >> sources.listecho deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse >> sources.listecho deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse >> sources.listecho deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse >> sources.listecho deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse >> sources.listecho deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse >> sources.listecho deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse >> sources.listecho deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse >> sources.lis

在这里插入图片描述

2.安装必要的网络工具

由于pull的ubuntu镜像中缺少很多工具,所以需要安装网络工具

apt-get update

在这里插入图片描述

apt-get upgrade

在这里插入图片描述

apt install net-tools

在这里插入图片描述

ifconfig

在这里插入图片描述
此时网络已经通了

3.将master提交作为基础镜像

避免重复安装,所以将配置好基础工具的master作为基础镜像

docker commit master base

在这里插入图片描述

4.在镜像基础上创建slave1和slave2

docker run -itd --name slave1  --network spark-net -h slave1  base
docker run -itd --name slave2  --network spark-net -h slave2  base

在这里插入图片描述


查看此时的spark-net

docker network inspect spark-ne

在这里插入图片描述
三个容器之间的网络已经配置好了

三、完全分布式hadoop的搭建

1.系统配置

IP分配

master:172.18.0.2
slave1:172.18.0.3
slave2:172.18.0.4

主机名设置

主节点为master,从节点分别为slave1和slave2(在创建容器的时候已经设置好了)

配置hosts

将各节点的IP与主机名对应,IP与主机名中间相隔一个TAB,一定要注释上面的127.0.0.1(三个节点都要配置),否则后面启动集群会检测不到节点
在这里插入图片描述

重启网络

/etc/init.d/networking restart

检查网络

看相互能否ping通,ping通则配置成功
在这里插入图片描述

2.创建hadoop账户

adduser hadoop

把hadoop用户加入到hadoop用户组

usermod -a -G hadoop hadoop

查看结果

cat /etc/group |grep hadoop

在这里插入图片描述
把hadoop用户赋予root权限

vim /etc/sudoers

添加下面这段

hadoop ALL=(root) NOPASSWD:ALL

3.安装和配置JAVA环境

下载并解压JDK

下载地址:链接:https://pan.baidu.com/s/1OAkGjw5g2r5zkUu7h4Zqow
提取码:66jh
新建/usr/java目录

tar -zxvf jdk-8u161-linux-x64.tar.gz -C /usr/java/

配置环境变量

vim ~/.bashrc

在最后加上下列内容(一定注意环境变量后面不要加空格,否则容易出问题,jdk版本号看自己的版本,如果用网盘里的就不用更改)

export JAVA_HOME=/usr/java/jdk1.8.0_161
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH

在这里插入图片描述
使环境变量生效

source ~/.bashrc

查看java是否安装成功

java -version

在这里插入图片描述

4.SSH免密登录

安装并配置SSH

这里首先安装ssh

apt-get install openssh-server

启动ssh

service ssh start

在这里插入图片描述
配置ssh

vim /etc/ssh/sshd_config

避免后期在登录root账户的被拒绝,在PermitRootLogin prohibit-password下面添加PermitRootLogin yes
在这里插入图片描述
将PasswordAuthentication设为yes
在这里插入图片描述

配置免密登录

首先在master上创建ssh-key

ssh-keygen -t rsa -P ""

一直回车
然后在~/.ssh/下生成两个文件:id_rsa和id_rsa.pub


在slave1和slave2上以同样的方式生成
然后分别用(这里的目录无所谓,传到哪里都行,就是将从节点的id_rsa传到主节点上)

scp id_rsa.pub hadoop@master:/tmp/slave1_id_rsa.pub
scp id_rsa.pub hadoop@master:/tmp/slave2_id_rsa.pub

在这里插入图片描述
在这里插入图片描述
然后将slave1和slave2传过来的id_rsa文件移动到~/.ssh/目录下

mv /tmp/slave1_id_rsa.pub ~/.ssh/slave1_id_rsa.pub
mv /tmp/slave2_id_rsa.pub ~/.ssh/slave2_id_rsa.pub

将id_rsa.pub、slave1_id_rsa.pub、slave2_id_rsa.pub追加到authorized_keys授权文件中

cat *.pub >>authorized_keys

这个时候已经可以免密登录本机了

ssh master

在这里插入图片描述


将master上的公钥文件传给slave1和slave2

scp authorized_keys hadoop@slave1:/tmp
scp authorized_keys hadoop@slave2:/tmp

然后将公钥移动到~/.ssh/目录下

cp /tmp/authorized_keys ~/.ssh/authorized_keys

修改公钥文件的权限

chmod 664 authorized_keys

然后测试三个虚拟机是否可以免密登录
master连接slave1和slave2
在这里插入图片描述


slave1连接master和slave2
在这里插入图片描述


slave2连接master和slave1
在这里插入图片描述

5.安装Hdoop

下载hadoop-2.7.4.tar.gz
链接:https://pan.baidu.com/s/1MnRYcE22faZpFxS6BM6yWQ
提取码:nu01


master的配置

解压到/usr/local
然后切换到/usr/local将hadoop-2.7.4重命名为hadoop,并给/usr/local/hadoop设置访问权限

cd /usr/local
sudo mv hadoop-2.7.4 hadoop 
sudo chmod 777 -R /usr/local/Hadoop

配置.bashsc文件

vim ~/.bashrc

在文件末尾追加

export HADOOP_INSTALL=/usr/local/hadoop
export PATH=$PATH:$HADOOP_INSTALL/bin
export PATH=$PATH:$HADOOP_INSTALL/sbin
export HADOOP_MAPRED_HOME=$HADOOP_INSTALL 
export HADOOP_COMMON_HOME=$HADOOP_INSTALL 
export HADOOP_HDFS_HOME=$HADOOP_INSTALL 
export YARN_HOME=$HADOOP_INSTALL 
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_INSTALL/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_INSTALL/lib"

在这里插入图片描述
执行该命令使环境变量生效

source ~/.bashrc

vim /usr/local/hadoop/etc/hadoop/hadoop-env.sh

在末尾添加下面内容

export JAVA_HOME=/usr/java/jdk1.8.0_161
export HADOOP=/usr/local/hadoop
export PATH=$PATH:/usr/local/hadoop/bin

vim /usr/local/hadoop/etc/hadoop/yarn-env.sh

在末尾添加

JAVA_HOME=/usr/java/jdk1.8.0_161

进入Hadoop的安装目录,下面操作的路径均是在此目录的基础上的相对路径

cd /usr/local/hadoop

配置core-site.xml

vim etc/hadoop/core-site.xml

将configuration替换为下面内容

 <configuration>
                            <property>
                                    <name>hadoop.tmp.dir</name>
                                    <value>file:/usr/local/hadoop/tmp</value>
                                    <description>Abase for other temporary directories.</description>
                            </property>
                            <property>
                                    <name>fs.defaultFS</name>
                                    <value>hdfs://master:9000</value>
                            </property>
</configuration>

在这里插入图片描述

配置hdfs-site.xml

vim etc/hadoop/hdfs-site.xml
<configuration>

                            <property>
                                    <name>dfs.replication</name>
                                    <value>2</value>
                            </property>
                            <property>
                                    <name>dfs.namenode.name.dir</name>
                                    <value>file:/usr/local/hadoop/tmp/dfs/name</value>
                            </property>
                            <property>
                                    <name>dfs.datanode.data.dir</name>
                                    <value>file:/usr/local/hadoop/tmp/dfs/data</value>
                            </property>
</configuration>

在这里插入图片描述

配置yarn-site.xml

vim  etc/hadoop/yarn-site.xml
<configuration>

<!-- Site specific YARN configuration properties -->

                    <property>| 
                            <name>yarn.nodemanager.aux-services</name>| 
                            <value>mapreduce_shuffle</value>| 
                      </property>| 
                      <property>| 
                            <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>| 
                            <value>org.apache.hadoop.mapred.ShuffleHandler</value>| 
                      </property>| 
                      <property>| 
                            <name>yarn.resourcemanager.address</name>| 
                            <value>master:8032</value>| 
                     </property>| 
                     <property>| 
                            <name>yarn.resourcemanager.scheduler.address</name>| 
                            <value>master:8030</value>| 
                     </property>| 
                     <property>| 
                            <name>yarn.resourcemanager.resource-tracker.address</name>| 
                            <value>master:8031</value>| 
                     </property>
                     <property>
                            <name>yarn.resourcemanager.admin.address</name>
                            <value>master:18141</value>
                     </property>
                     <property>
                            <name>yarn.resourcemanager.webapp.address</name>
                            <value>master:18088</value>
                     </property>
</configuration>

在这里插入图片描述

配置slave

vim etc/hadoop/slaves

加上两个从节点的主机名即可

slave1
slave2

在这里插入图片描述
这个时候master的hadoop已经完全配置好了
接下来将master的hadoop传到slave1和slave2

配置slave1和slave2

scp -r /usr/local/hadoop hadoop@slave1:/usr/local
scp -r /usr/local/hadoop hadoop@slave2:/usr/local

启动Hadoop

在master节点上执行(只在master上执行)

hdfs namenode -format

运行启动脚本

start-all.sh

在这里插入图片描述

可以看到启动正常,并且有两个节点
在这里插入图片描述
测试hadoop集群是否正常运行

hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.4.jar pi 10 10

在这里插入图片描述
在这里插入图片描述

四、spark-hadoop的搭建

下载scala和spark
链接:https://pan.baidu.com/s/1VEVgNsQTow0-a4GO7Hg2Aw
提取码:bh60

1.解压scala和spark

tar -zxvf scala-2.11.8.tgz
tar -zxvf spark-2.4.7-bin-hadoop2.7.tgz

2.配置环境变量(master、slave1、slave2分别执行)

export SCALA_HOME=/usr/local/scala-2.11.8
export SPARK_HOME=/usr/local/spark-2.4.7-bin-hadoop2.7
export PATH=$PATH:$SCALA_HOME/bin:$SPARK_HOME/bin:$SPARK_HOME/sbin

在这里插入图片描述

source ~/.bashrc

3.配置spark(只在master上配置)

进入conf目录下

cd /usr/local/spark-2.4.7-bin-hadoop2.7/conf/

将spark-env.sh.template、slaves.template分别替换为spark-env.sh、slaves

mv spark-env.sh.template spark-env.sh
mv slaves.template slaves

在这里插入图片描述

配置slaves

原来红框处为localhost,改为slave1和slave2
在这里插入图片描述

配置spark-env.sh

SPARK_MASTER_WEBUI_PORT=8888

export SPARK_HOME=/usr/local/spark-2.4.7-bin-hadoop2.7
export HADOOP_HOME=/usr/local/hadoop
export MASTER=spark://master:7077
export SCALA_HOME=/usr/local/scala-2.11.8
export SPARK_MASTER_HOST=master


export JAVA_HOME=/usr/java/jdk1.8.0_161

export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

export SPARK_WORKER_MERMORY=4G

在这里插入图片描述
此时master已经配置好了

4.配置两个slave

只需要将master上配置好的spark传到slave中即可

scp -rp /usr/local/spark-2.4.7-bin-hadoop2.7/ root@slave1:/usr/local/
scp -rp /usr/local/spark-2.4.7-bin-hadoop2.7/ root@slave2:/usr/local/

5.启动spark

进入目录/usr/local/spark-2.4.7-bin-hadoop2.7/sbin
输入spark的启动命令

./start-all.sh

在这里插入图片描述

在这里插入图片描述

  • 8
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值