Windows家庭版下基于Docker的hadoop、Spark集群搭建
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设置
按顺序启动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 ~/.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的压缩包传到master的opt目录下
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的完整版本
配置java和hadoop环境变量
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查看状态)
再分别查看master、slave节点进程如下
执行自带的程序测试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集群搭建相关推荐
- Hadoop/Spark集群搭建图文全攻略
Hadoop/Spark集群搭建图文全攻略 一.安装VMware 二.创建Linux虚拟机 三.CentOS-7安装 四.Linux系统环境配置 五.其他配置 六.虚拟机克隆 七.jdk安装 八.Zo ...
- 使用VMware进行基于Ubuntu16.04LTS的Spark集群搭建
先说一下我用的软件or环境的版本: VMware14.1.1 Ubuntu16.06.03 jdk1.8.0_161 Scala2.10.5 Python2.12(装Ubuntu后自带的) Spark ...
- 基于ZooKeeper的Hadoop HA集群搭建
集群的规划 Zookeeper集群: 192.168.142.12 (bigdata12) 192.168.142.13 (bigdata13) 192.168.142.14 (bigdata14) ...
- Hadoop集群+Spark集群搭建基于VMware虚拟机教程+安装运行Docker
Hadoop集群+Spark集群搭建+安装运行Docker 目录 一.准备工作 二.在虚拟机上安装CentOS 7 三.hdfs的环境准备 四.hdfs配置文件的修改 五.克隆(复制虚拟机) 六.制作 ...
- 基于Hadoop集群的Spark集群搭建
基于Hadoop集群的Spark集群搭建 注:Spark需要依赖scala,因此需要先安装scala 一. 简单叙述一下scala的安装 (1)下载scala软件安装包,上传到集群 (2)建立一个用于 ...
- 使用docker安装部署Spark集群来训练CNN(含Python实例)
使用docker安装部署Spark集群来训练CNN(含Python实例) 本博客仅为作者记录笔记之用,不免有很多细节不对之处. 还望各位看官能够见谅,欢迎批评指正. 博客虽水,然亦博主之苦劳也. 如需 ...
- 基于Docker方式实现Elasticsearch集群
文本环境:Docker + (Elasticsearch6.8.5 * 3) 1.拉取Elasticsearch docker pull elasticsearch6.8.5 2.创建es挂载目录 创 ...
- Mac M1搭建hadoop+spark集群教程
最近一直在搞Mac虚拟机,尝试了parallel.vmware.utm,感觉效果都不是很好,踩了了很多很多坑,parallel破解直接劝退我,并且也不是很稳定:wmware for m1刚开始装了一次 ...
- Spark-----Spark 与 Hadoop 对比,Spark 集群搭建与示例运行,RDD算子简单入门
目录 一.Spark 概述 1.1. Spark是什么 1.2. Spark的特点(优点) 1.3. Spark组件 1.4. Spark和Hadoop的异同 二.Spark 集群搭建 2.1. Sp ...
最新文章
- 3dsmax 让物体变透明
- 一文助你解决90%的自然语言处理问题(附代码)
- T-SQL MD5算法实现
- C# winform单元格的formatted值的类型错误 DataGridView中CheckBox列运行时候System.FormatException异常
- [Trie] Luogu P2580 于是他错误的点名开始了
- 隐藏与显现_手机键盘摇一摇,隐藏功能立马显现,太棒了
- C# 根据地址调用 Google Map 服务得到经纬度
- 电子技术基础(三)__具有无关项逻辑函数的化简
- docker 停止、启动、删除镜像指令操作总结
- 阻焊机器人系统_点焊机器人
- java throw 和catch_Java catch与throw同时使用的操作
- 要建立亲密的关系,就必须少一些指责,多一些倾听
- BZOJ 1062: [NOI2008]糖果雨(二维树状数组)
- 关于Scrapy爬虫框架中meta参数的使用示例演示(下)
- MySQL第十四次作业
- Android手机加速
- 查看redis常用命令
- windows黑客编程技术之隐藏技术(进程伪装,傀儡进程,进程隐藏)
- android root 无法卸载应用,关于卸载android 手机预装应用的方法,无需root
- # 解决微信小程序遮罩层底部页面滚动