Windows家庭版下基于Docker的hadoop、Spark集群搭建

目录

  • Windows家庭版下基于Docker的hadoop、Spark集群搭建
  • 1、实验目的
  • 2、实验平台
  • 3、实验内容和要求
    • 3.1 docker环境安装
      • 3.1.1 开启Hyper-V
      • 3.1.2 伪装成win10专业版
      • 3.1.3 下载Docker for Windows
    • 3.2 基于docker创建spark集群
      • 3.2.1 拉取centos镜像
      • 3.2.2 ip设置
      • 3.2.3 创建容器
      • 3.2.4 配置ssh实现节点间免密登陆
      • 3.2.5 Ansible安装
      • 3.2.6 修改docker的hosts文件
      • 3.2.7 使用ansible在在集群中安装openjdk
      • 3.2.8 修改hadoop配置文件
      • 3.2.9 打包并分发hadoop文件
      • 3.2.10 格式化namenode
      • 3.2.11 启动集群
    • 3.3 spark集群搭建
      • 3.3.1 下载spark、Scala、zookeeper
      • 3.3.2 安装zookeeper
      • 3.3.3 安装spark
      • 3.3.4 安装Scala
      • 3.3.5 将spark、Scala、zookeeper传到slave
      • 3.3.6 修改slave节点的~/.bashrc文件和myid文件
      • 3.3.7 集群启动
      • 3.3.8 集群关闭
  • 4、实验中遇到问题及解决
  • 5、实验心得

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.txtfor /f %%i in ('findstr /i . hyper-v.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i"del hyper-v.txtDism /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设置

按顺序启动masterslave1slave2,这样不会造成ip紊乱。


3.2.3 创建容器

执行如下代码,创建容器masterslave1slave2

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 ~/.bashrc
cat /etc/hosts

查看

然后用ansible分发 .bashrc 至集群slave

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

slave节点执行

source ~/.bashrc
cat /etc/hosts

3.2.7 使用ansible在在集群中安装openjdk

进入master,执行

ansible cluster -m yum -a "name=java-1.8.0-openjdk,java-1.8.0-openjdk-devel state=latest"

出现如下情况,表示成功。


3.2.8 修改hadoop配置文件

我将本地的hadoop2.7.4的压缩包传到masteropt目录下

docker cp F:/hadoop-2.7.4.tar.gz 97c444c90ca7:/opt

上面hadoop压缩包的路径必须是绝对路径。
进入opt,解压

tar -xzvf hadoop-2.7.4.tar.gz

执行

ls /usr/lib/jvm/

查看openjdk的完整版本


配置javahadoop环境变量

vi ~/.bashrc

注意 ~/.bashrc 文件,后续还要在里面添加spark等环境变量。
在末尾添加

# hadoop
export HADOOP_HOME=/opt/hadoop-2.7.4
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH#java
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.272.b10-1.el8_2.x86_64
export PATH=$JAVA_HOME/bin:$PATH

再执行

source ~/.bashrc

在三个节点依次执行

依次执行

yum install which -y

再分别执行

java -version
hadoop version

可打印出版本如下

进入hadoop-2.7.4/etc/hadoop目录

修改 core-site.xml

<configuration><property><name>hadoop.tmp.dir</name><value>/home/hadoop/tmp</value><description>A base for other temporary directories.</description></property><!-- file system properties --><property><name>fs.default.name</name><value>hdfs://master:9000</value></property><property><name>fs.trash.interval</name><value>4320</value></property>
</configuration>

修改 hdfs-site.xml

<configuration>
<property><name>dfs.namenode.name.dir</name><value>/home/hadoop/tmp/dfs/name</value></property><property><name>dfs.datanode.data.dir</name><value>/home/hadoop/data</value></property><property><name>dfs.replication</name><value>3</value></property><property><name>dfs.webhdfs.enabled</name><value>true</value></property><property><name>dfs.permissions.superusergroup</name><value>staff</value></property><property><name>dfs.permissions.enabled</name><value>false</value></property>
</configuration>

复制并修改 mapred-site.xml

复制

cp mapred-site.xml.template mapred-site.xml

修改

<configuration>
<property><name>mapreduce.framework.name</name><value>yarn</value>
</property>
<property><name>mapred.job.tracker</name><value>master:9001</value>
</property>
<property><name>mapreduce.jobtracker.http.address</name><value>master:50030</value>
</property>
<property><name>mapreduce.jobhisotry.address</name><value>master:10020</value>
</property>
<property><name>mapreduce.jobhistory.webapp.address</name><value>master:19888</value>
</property>
<property><name>mapreduce.jobhistory.done-dir</name><value>/jobhistory/done</value>
</property>
<property><name>mapreduce.intermediate-done-dir</name><value>/jobhisotry/done_intermediate</value>
</property>
<property><name>mapreduce.job.ubertask.enable</name><value>true</value>
</property>
</configuration>

修改 yarn-site.xml

<configuration>#<property>#<name>yarn.nodemanager.resource.memory-mb</name>#<value>2048</value>#</property>#<property>#<name>yarn.nodemanager.resource.cpu-vcores</name>#<value>1</value>#</property><property><name>yarn.resourcemanager.hostname</name><value>master</value></property><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:18040</value></property>
<property><name>yarn.resourcemanager.scheduler.address</name><value>master:18030</value></property><property><name>yarn.resourcemanager.resource-tracker.address</name><value>master:18025</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>
<property><name>yarn.log-aggregation-enable</name><value>true</value></property>
<property><name>yarn.log-aggregation.retain-seconds</name><value>86400</value></property>
<property><name>yarn.log-aggregation.retain-check-interval-seconds</name><value>86400</value></property>
<property><name>yarn.nodemanager.remote-app-log-dir</name><value>/tmp/logs</value></property>
<property><name>yarn.nodemanager.remote-app-log-dir-suffix</name><value>logs</value></property>
</configuration>

修改slaves文件,将原有内容替换为

slave1
slave2

3.2.9 打包并分发hadoop文件

opt 目录下打包

tar -cvf hadoop-dis.tar hadoop-2.7.4

创建 hadoop-dis.yaml 文件,内容如下

---
- hosts: clustertasks:- name: copy .bashrc to slavescopy: src=~/.bashrc dest=~/notify:- exec source- name: copy hadoop-dis.tar to slavesunarchive: src=/opt/hadoop-dis.tar dest=/opthandlers:- name: exec sourceshell: source ~/.bashrc

执行

ansible-playbook hadoop-dis.yaml

分发完毕后显示如下


3.2.10 格式化namenode

hadoop namenode -format

出现以下结果,表明成功

注意,这里我一开始出错了,原因是在上面配置文件的时后没有将原先的标签对给替换,以至于出现格式化错误。源文件如下

<configuration>
</configuration>

在修改源文件时必须将上面的标签对替换。


3.2.11 启动集群

start-all.sh

使用 jps 查看进程,master 节点和 slave 节点如下

执行hadoop自带程序

hadoop jar /opt/hadoop-2.7.4/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.4.jar pi 5 5

结果如下


表明运行成功。
输入http://192.168.43.50:60070/ 还可以看到集群状态(我的master容器端口为60070


3.3 spark集群搭建

3.3.1 下载spark、Scala、zookeeper

wget http://mirrors.tuna.tsinghua.edu.cn/apache/spark/spark-2.4.7/spark-2.4.7-bin-hadoop2.7.tgz
wget http://archive.apache.org/dist/zookeeper/zookeeper-3.4.9/zookeeper-3.4.9.tar.gz

Scala2.11.11我是在本机下载上传的

docker cp F:/scala-2.11.11.tgz 97c444c90ca7:/opt

3.3.2 安装zookeeper

进入opt目录解压

tar xvzf zookeeper-3.4.9.tar.gz

修改 ~/.bashrc 文件,增加zookeeper的环境变量,内容如下

#zookeeper
export ZOOKEEPER_HOME=/opt/zookeeper-3.4.9
export PATH=$PATH:$ZOOKEEPER_HOME/bin
source ~/.bashrc

修改 zookeeper 的配置信息

cd zookeeper-3.4.9/conf/
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg

修改、添加如下信息

#修改
dataDir=/opt/zookeeper-3.4.9/tmp
#添加
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888

接下来添加 myid 文件

cd ../
mkdir tmp
cd tmp
vi myid
#在master的myid文件中写1,slave1写2,slave2写3

3.3.3 安装spark

依旧回到 opt 目录,解压 spark

tar xvzf spark-2.4.7-bin-hadoop2.7.tgz

修改 ~/.bashrc, 配置 spark 环境变量,增加内容如下

#spark
export SPARK_HOME=/opt/spark-2.4.7-bin-hadoop2.7
export PATH=$SPARK_HOME/bin:$SPARK_HOME/sbin:$PATH
source ~/.bashrc

修改 spark 配置文件

export SPARK_MASTER_IP=master
export SPARK_WORKER_MEMORY=128m
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.272.b10-1.el8_2.x86_64
export SCALA_HOME=/opt/scala-2.11.11
export SPARK_HOME=/opt/spark-2.4.7-bin-hadoop2.7
export HADOOP_CONF_DIR=/opt/hadoop-2.7.4/etc/hadoop
export SPARK_LIBRARY_PATH=$SPARK_HOME/lib
export SCALA_LIBRARY_PATH=$SPARK_LIBRARY_PATH
export SPARK_WORKER_CORES=1
export SPARK_WORKER_INSTANCES=1
export SPARK_MASTER_PORT=7077

创建slaves文件并写入slave节点

vi slaves

写入

slave1
slave2

3.3.4 安装Scala

回到 opt 目录,解压 Scala

tar xvzf scala-2.11.11.tgz

修改 ~/.bashrc, 配置 Scala 环境变量,内容如下

#scala
export SCALA_HOME=/opt/scala-2.11.11
export PATH=$PATH:$SCALA_HOME/bin

3.3.5 将spark、Scala、zookeeper传到slave

执行如下代码

scp -r /opt/spark-2.4.7-bin-hadoop2.7 root@slave1:/opt
scp -r /opt/scala-2.11.11 root@slave1:/opt
scp -r /opt/zookeeper-3.4.9 root@slave1:/opt
scp -r /opt/spark-2.4.7-bin-hadoop2.7 root@slave2:/opt
scp -r /opt/scala-2.11.11 root@slave2:/opt
scp -r /opt/zookeeper-3.4.9 root@slave2:/opt

3.3.6 修改slave节点的~/.bashrc文件和myid文件


3.3.7 集群启动

#启动hadoop
start-dfs.sh
start-yarn.sh
#启动spark
start-all.sh
#启动zookeeper(目前spark集群不需要zookeeper,不启动zookeeper也能正常启动spark)
zkServer.sh start(三个节点都执行才能使用zkServer.sh status查看状态)

再分别查看masterslave节点进程如下

执行自带的程序测试spark集群

run-example SparkPi

输出结果


输入本机网址和端口号即可以看到集群运行状态


3.3.8 集群关闭

一定要输入命令结束集群运行,不然下次启动很有可能报错!

stop-all.sh
stop-yarn.sh
stop-dfs.sh

4、实验中遇到问题及解决

1.在拉取镜像的时候,我只添加了一个镜像源,发现下载很慢,后来我在Daemon中添加了多个镜像源,发现速度快了许多;

2.我在进入容器下载文件的时候,嫌下载的太慢,想调整镜像源,于是忘记退出就把docker重启了,结果发现master端口出错,无奈只得上传镜像再拉回来使用;

3.我在修改配置文件的时后,有一个没有将多余的标签对替换,于是出错;

4.我在启动容器时没有按照顺序启动,于是报了ip错误;

5、实验心得

1.得下功夫搭环境,首先得建立信心;

2.不要盲目更改配置,在重启或者关机之前一定要确认是否关闭容器;

3.要学会看日志,看报错的具体是什么错,不要盲目改;

4.学会了Markdown编辑文本,实验报告较为美观。

最后,感谢博主 @https://blog.csdn.net/qq_43034505/article/details/109975833
本文从此处获得很多帮助,感谢这位大佬。

Windows家庭版下基于Docker的hadoop、Spark集群搭建相关推荐

  1. Hadoop/Spark集群搭建图文全攻略

    Hadoop/Spark集群搭建图文全攻略 一.安装VMware 二.创建Linux虚拟机 三.CentOS-7安装 四.Linux系统环境配置 五.其他配置 六.虚拟机克隆 七.jdk安装 八.Zo ...

  2. 使用VMware进行基于Ubuntu16.04LTS的Spark集群搭建

    先说一下我用的软件or环境的版本: VMware14.1.1 Ubuntu16.06.03 jdk1.8.0_161 Scala2.10.5 Python2.12(装Ubuntu后自带的) Spark ...

  3. 基于ZooKeeper的Hadoop HA集群搭建

    集群的规划 Zookeeper集群: 192.168.142.12 (bigdata12) 192.168.142.13 (bigdata13) 192.168.142.14 (bigdata14) ...

  4. Hadoop集群+Spark集群搭建基于VMware虚拟机教程+安装运行Docker

    Hadoop集群+Spark集群搭建+安装运行Docker 目录 一.准备工作 二.在虚拟机上安装CentOS 7 三.hdfs的环境准备 四.hdfs配置文件的修改 五.克隆(复制虚拟机) 六.制作 ...

  5. 基于Hadoop集群的Spark集群搭建

    基于Hadoop集群的Spark集群搭建 注:Spark需要依赖scala,因此需要先安装scala 一. 简单叙述一下scala的安装 (1)下载scala软件安装包,上传到集群 (2)建立一个用于 ...

  6. 使用docker安装部署Spark集群来训练CNN(含Python实例)

    使用docker安装部署Spark集群来训练CNN(含Python实例) 本博客仅为作者记录笔记之用,不免有很多细节不对之处. 还望各位看官能够见谅,欢迎批评指正. 博客虽水,然亦博主之苦劳也. 如需 ...

  7. 基于Docker方式实现Elasticsearch集群

    文本环境:Docker + (Elasticsearch6.8.5 * 3) 1.拉取Elasticsearch docker pull elasticsearch6.8.5 2.创建es挂载目录 创 ...

  8. Mac M1搭建hadoop+spark集群教程

    最近一直在搞Mac虚拟机,尝试了parallel.vmware.utm,感觉效果都不是很好,踩了了很多很多坑,parallel破解直接劝退我,并且也不是很稳定:wmware for m1刚开始装了一次 ...

  9. Spark-----Spark 与 Hadoop 对比,Spark 集群搭建与示例运行,RDD算子简单入门

    目录 一.Spark 概述 1.1. Spark是什么 1.2. Spark的特点(优点) 1.3. Spark组件 1.4. Spark和Hadoop的异同 二.Spark 集群搭建 2.1. Sp ...

最新文章

  1. 3dsmax 让物体变透明
  2. 一文助你解决90%的自然语言处理问题(附代码)
  3. T-SQL MD5算法实现
  4. C# winform单元格的formatted值的类型错误 DataGridView中CheckBox列运行时候System.FormatException异常
  5. [Trie] Luogu P2580 于是他错误的点名开始了
  6. 隐藏与显现_手机键盘摇一摇,隐藏功能立马显现,太棒了
  7. C# 根据地址调用 Google Map 服务得到经纬度
  8. 电子技术基础(三)__具有无关项逻辑函数的化简
  9. docker 停止、启动、删除镜像指令操作总结
  10. 阻焊机器人系统_点焊机器人
  11. java throw 和catch_Java catch与throw同时使用的操作
  12. 要建立亲密的关系,就必须少一些指责,多一些倾听
  13. BZOJ 1062: [NOI2008]糖果雨(二维树状数组)
  14. 关于Scrapy爬虫框架中meta参数的使用示例演示(下)
  15. MySQL第十四次作业
  16. Android手机加速
  17. 查看redis常用命令
  18. windows黑客编程技术之隐藏技术(进程伪装,傀儡进程,进程隐藏)
  19. android root 无法卸载应用,关于卸载android 手机预装应用的方法,无需root
  20. # 解决微信小程序遮罩层底部页面滚动

热门文章

  1. Macbook pro 总是自动关机
  2. 展锐平台userdebug版本关闭ylog
  3. PVA刷擦洗对CMP后清洗过程的影响
  4. 在虚拟机的CentOS系统下安装pycharm的用户须知
  5. python 中0到100
  6. 升级鸿蒙系统流畅度,华为mate9很卡,升级鸿蒙系统,流畅度基本超越iOS12?
  7. 零基础学会PS抠图拼贴
  8. 二分 - Enduring Exodus - CodeForces - 655C
  9. Microsoft Excel 教程:如何在 Excel 中使用迷你图显示数据趋势?
  10. Mac 定时关机、重启、休眠命令