基于docker的spark-hadoop分布式集群搭建
- 一、docker的安装
- 1.windows10专业版安装
- 2.windows10家庭版安装
- 3.对docker进行测试
- 4.创建需要的镜像与容器
- 二、环境的配置
- 1.更换apt源
- 2.安装必要的网络工具
- 3.将master提交作为基础镜像
- 4.在镜像基础上创建slave1和slave2
- 三、完全分布式hadoop的搭建
- 1.系统配置
- IP分配
- 主机名设置
- 配置hosts
- 重启网络
- 检查网络
- 2.创建hadoop账户
- 3.安装和配置JAVA环境
- 下载并解压JDK
- 4.SSH免密登录
- 安装并配置SSH
- 配置免密登录
- 5.安装Hdoop
- master的配置
- 配置core-site.xml
- 配置hdfs-site.xml
- 配置yarn-site.xml
- 配置slave
- 配置slave1和slave2
- 启动Hadoop
- 四、spark-hadoop的搭建
- 1.解压scala和spark
- 2.配置环境变量(master、slave1、slave2分别执行)
- 3.配置spark(只在master上配置)
- 配置slaves
- 配置spark-env.sh
- 4.配置两个slave
- 5.启动spark
一、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