docker集群安装教程(使用docker部署hadoop集群的详细教程)
docker集群安装教程
使用docker部署hadoop集群的详细教程最近要在公司里搭建一个hadoop测试集群,于是采用docker来快速部署hadoop集群。
0. 写在前面
网上也已经有很多教程了,但是其中都有不少坑,在此记录一下自己安装的过程。
目标:使用docker搭建一个一主两从三台机器的hadoop2.7.7版本的集群
准备:
首先要有一台内存8G以上的centos7机器,我用的是阿里云主机。
其次将jdk和hadoop包上传到服务器中。
我安装的是hadoop2.7.7。包给大家准备好了,链接:https://pan.baidu.com/s/15n_W-1rqOd2cUzhfvbkH4g 提取码:vmzw。
1. 步骤
大致分以下几步:
- 安装docker
- 基础环境准备
- 配置网络,并启动docker容器
- 配置host及ssh免密登录
- 安装配置hadoop
1.1 安装docker
依次执行如下步骤安装docker。如果有docker环境的可以跳过。
yum update yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum install -y docker-ce systemctl start docker docker -v
1.2 基础环境准备
1.2.1 创建基础的centos7镜像拉取官方centos7镜像
docker pull centos
通过build Dockfile生成带ssh功能的centos镜像
创建Dockerfile文件
vi Dockerfile
将如下内容写入Dockerfile
FROM centos MAINTAINER mwf RUN yum install -y openssh-server sudo RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config RUN yum install -y openssh-clients RUN echo "root:qwe123" | chpasswd RUN echo "root ALL=(ALL) ALL" >> /etc/sudoers RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key RUN mkdir /var/run/sshd EXPOSE 22 CMD ["/usr/sbin/sshd", "-D"]
上述内容大概意思是:以centos镜像为基础,设置密码为wqe123,安装ssh服务并启动
构建Dockerfile
docker build -t="centos7-ssh" .
将生成一个名为centos7-ssh
的镜像,可以通过docker images
查看
1.2.2 生成有hadoop和jdk环境的镜像
- 将准备好的包放在当前目录下。
hadoop-2.7.7.tar.gz
和jdk-8u202-linux-x64.tar.gz
- 通过build Dockfile生成带hadoop和jdk环境的centos镜像
刚才已经创建了一个Dockerfile了,先将他移开。mv Dockerfile Dockerfile.bak
创建Dockerfile
vi Dockerfile
将以下内容写入:
FROM centos7-ssh ADD jdk-8u202-linux-x64.tar.gz /usr/local/ RUN mv /usr/local/jdk1.8.0_202 /usr/local/jdk1.8 ENV JAVA_HOME /usr/local/jdk1.8 ENV PATH $JAVA_HOME/bin:$PATH ADD hadoop-2.7.7.tar.gz /usr/local RUN mv /usr/local/hadoop-2.7.7 /usr/local/hadoop ENV HADOOP_HOME /usr/local/hadoop ENV PATH $HADOOP_HOME/bin:$PATH RUN yum install -y which sudo
上述内容大概意思是:以上面生成的centos7-ssh为基础,将hadoop和jdk包放进去,然后配好环境变量。
构建Dockerfile
docker build -t="hadoop" .
将生成一个名为hadoop的镜像
1.3 配置网络,并启动docker容器
因为集群间必须要能网络连通,所以要先配置好网络。
创建网络
docker network create --driver bridge hadoop-br
以上命令创建了一个名为hadoop-br
的bridge类型的网络
启动docker时指定网络
docker run -itd --network hadoop-br --name hadoop1 -p 50070:50070 -p 8088:8088 hadoop docker run -itd --network hadoop-br --name hadoop2 hadoop docker run -itd --network hadoop-br --name hadoop3 hadoop
以上命令启动了3台机器,网络都指定为hadoop-br
,hadoop1还开启了端口映射。
查看网络情况
docker network inspect hadoop-br
执行以上命令就可以看到对应的网络信息:
[ { "Name": "hadoop-br", "Id": "88b7839f412a140462b87a353769e8091e92b5451c47b5c6e7b44a1879bc7c9a", "Containers": { "86e52eb15351114d45fdad4462cc2050c05202554849bedb8702822945268631": { "Name": "hadoop1", "IPv4Address": "172.18.0.2/16", "IPv6Address": "" }, "9baa1ff183f557f180da2b7af8366759a0d70834f43d6b60fba2e64f340e0558": { "Name": "hadoop2", "IPv4Address": "172.18.0.3/16", "IPv6Address": "" }, "e18a3166e965a81d28b4fe5168d1f0c3df1cb9f7e0cbe0673864779b224c8a7f": { "Name": "hadoop3", "IPv4Address": "172.18.0.4/16", "IPv6Address": "" } }, } ]
我们可以得知3台机器对应的ip:
172.18.0.2 hadoop1 172.18.0.3 hadoop2 172.18.0.4 hadoop3
登录docker容器,互相之间就可以ping通了。
docker exec -it hadoop1 bash docker exec -it hadoop2 bash docker exec -it hadoop3 bash
1.4 配置host及ssh免密登录
1.4.1 配置host
分别在每台修改每台机器的host
vi /etc/hosts
将以下内容写入(注:docker分出来的ip对于每个人可能不一样,填你自己的):
172.18.0.2 hadoop1 172.18.0.3 hadoop2 172.18.0.4 hadoop3
1.4.2 ssh免密登录
因为上面在镜像中已经安装了ssh服务,所以直接分别在每台机器上执行以下命令:
ssh-keygen 一路回车 ssh-copy-id -i /root/.ssh/id_rsa -p 22 root@hadoop1 输入密码,如果按我的来得话就是qwe123 ssh-copy-id -i /root/.ssh/id_rsa -p 22 root@hadoop2 输入密码,如果按我的来得话就是qwe123 ssh-copy-id -i /root/.ssh/id_rsa -p 22 root@hadoop3 输入密码,如果按我的来得话就是qwe123
1.4.3 测试是否配置成功
ping hadoop1 ping hadoop2 ping hadoop3 ssh hadoop1 ssh hadoop2 ssh hadoop3
1.5 安装配置hadoop
1.5.1 在hadoop1上操作
进入hadoop1
docker exec -it hadoop1 bash
创建一些文件夹,一会在配置中要用到
mkdir /home/hadoop mkdir /home/hadoop/tmp /home/hadoop/hdfs_name /home/hadoop/hdfs_data
切换到hadoop配置的目录
cd $HADOOP_HOME/etc/hadoop/
编辑core-site.xml
<property> <name>fs.defaultFS</name> <value>hdfs://hadoop1:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>file:/home/hadoop/tmp</value> </property> <property> <name>io.file.buffer.size</name> <value>131702</value> </property>
编辑hdfs-site.xml
<property> <name>dfs.namenode.name.dir</name> <value>file:/home/hadoop/hdfs_name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/home/hadoop/hdfs_data</value> </property> <property> <name>dfs.replication</name> <value>2</value> </property> <property> <name>dfs.namenode.secondary.http-address</name> <value>hadoop1:9001</value> </property> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property>
编辑mapred-site.xml
mapred-site.xml默认不存在,要执行cp mapred-site.xml.template mapred-site.xml
<property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>hadoop1:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>hadoop1:19888</value> </property>
编辑yarn-site.xml
<property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name> <value>org.apache.hadoop.mapred.ShuffleHandler</value> </property> <property> <name>yarn.resourcemanager.address</name> <value>hadoop1:8032</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>hadoop1:8030</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>hadoop1:8031</value> </property> <property> <name>yarn.resourcemanager.admin.address</name> <value>hadoop1:8033</value> </property> <property> <name>yarn.resourcemanager.webapp.address</name> <value>hadoop1:8088</value> </property>
编辑slaves
我这里把hadoop1当成主节点,hadoop2、3作为从节点
hadoop2 hadoop3
把文件拷贝到hadoop2和hadoop3上
依次执行以下命令:
scp -r $HADOOP_HOME/ hadoop2:/usr/local/ scp -r $HADOOP_HOME/ hadoop3:/usr/local/ scp -r /home/hadoop hadoop2:/ scp -r /home/hadoop hadoop3:/
1.5.2 在每台机器上操作
分别连接每台机器
docker exec -it hadoop1 bash docker exec -it hadoop2 bash docker exec -it hadoop3 bash
配置hadoop sbin目录的环境变量
因为hadoop bin目录在之前创建镜像时就配好了,但是sbin目录没有配,所以要单独配置。分配为每台机器配置:
vi ~/.bashrc
追加如下内容:
export PATH=$PATH:$HADOOP_HOME/sbin
执行:
source ~/.bashrc
1.5.3 启动hadoop
在hadoop1上执行以下命令:
格式化hdfs
hdfs namenode -format
一键启动
start-all.sh
不出错的话,就可以庆祝一下了。出错的话,加油。
1.6 测试使用hadoopjps
# hadoop1 1748 Jps 490 NameNode 846 ResourceManager 686 SecondaryNameNode # hadoop2 400 DataNode 721 Jps 509 NodeManager # hadoop3 425 NodeManager 316 DataNode 591 Jps
上传文件
hdfs dfs -mkdir /mwf echo hello > a.txt hdfs dfs -put a.txt /mwf hdfs dfs -ls /mwf Found 1 items drwxr-xr-x - root supergroup 0 2020-09-04 11:14 /mwf
由于是云服务器,不想配端口,就不看ui界面了。
2. 最后
以上是我安装成功之后总结的过程,应该没有问题,也可能有遗漏。
3. 参考
https://cloud.tencent.com/developer/article/1084166
https://cloud.tencent.com/developer/article/1084157?from=10680
https://blog.csdn.net/ifenggege/article/details/108396249
到此这篇关于使用docker部署hadoop集群的详细教程的文章就介绍到这了,更多相关docker部署hadoop集群内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
- idea 远程部署docker(通过idea打包项目到docker的操作方法)
- idea 一键部署springboot docker(IDEA部署Docker到WSL2的详细过程)
- docker 技术认证(docker获取Let's Encrypt永久免费SSL证书的方法)
- docker部署mysql并且自动启动(Docker 部署 Mysql8.0的方法示例)
- docker数据库如何初始化(Docker启动PostgreSQL时创建多个数据库的解决方案)
- docker容器缺少很多命令怎么办(解决docker 容器设置中文语言包出现的问题)
- dockergitlab自动化教程(docker+gitlab+jenkins从零搭建自动化部署)
- docker中国加速镜像怎么设置(Docker 安装及配置镜像加速的实现)
- netcoredocker视频教程(Docker安装部署Net Core实现过程解析)
- docker快速配置redis集群(基于docker搭建redis集群的方法)
- docker的配置与使用(docker之docker-machine用法详解)
- docker 启动rabbitmq(docker安装rabbitmq无法进入管理页面的问题)
- 查看docker 镜像大小(详解六种减小Docker镜像大小的方法)
- docker安装java8(docker安装java环境的实现步骤)
- docker导出日志(excel导出在docker环境中总是失败的问题)
- docker显示出错应用图标怎么处理(docker 命令报异常permission denied的解决方案)
- 没钱可以快乐吗(没钱也能快乐吗)
- 快乐是什么(快乐就是)
- 东南亚有哪个国家(东南亚有哪个国家最发达)
- 东南亚安全吗(好不好挣钱)
- 潘长江小品《照亮全家福》台词剧本完整版(潘长江小品照亮全家福台词剧本完整版)
- 一窗通办政务服务小品剧本(一窗通办政务服务小品剧本)
热门推荐
- python中怎么实现队列的创建(python 堆和优先队列的使用详解)
- mysql的使用步骤(MySQL infobright的安装步骤)
- python中列表操作五种常用方法(Python使用paramiko操作linux的方法讲解)
- 宝塔面板服务器连接不上(宝塔面板后台登陆不显示验证码解决办法)
- vuex数据持续化(Vuex数据持久化实现的思路与代码)
- 5款好用的ftp软件推荐(10个最好的免费FTP客户端软件)
- mysql数据库三种模式(MySQL数据库是如何实现XA规范的)
- 宝塔web服务器如何安装(宝塔面板开启Nginx/Apache防火墙四层防御的方法)
- 如何用wampserver打开自己写的php(WampServer下安装多个版本的PHP、mysql、apache图文教程)
- php面向对象运用场景(PHP面向对象类型约束用法分析)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9