ToB企服应用市场:ToB评测及商务社交产业平台

标题: 【李老师云计算】实行三:在Docker中部署Hadoop集群 [打印本页]

作者: 惊雷无声    时间: 2024-6-25 17:26
标题: 【李老师云计算】实行三:在Docker中部署Hadoop集群
0. 前言

同样是参考了学长的几篇博客,涛哥功德无量!在整合了各种信息之后,鄙人会尽量用更精炼、简单的说明来完成这个实行,当然不敷肯定是会有的,盼望各位朋友可以斧正,同样也盼望后来的朋友可以再次为这篇博客举行升级迭代!
博客是面向实行的,因此对完成实行无关的部分会优化掉。
带★的是大概碰到的问题可以看一下,以防后续操作出问题。
内容大概来自博主自己手搓、吸取同学的经验、网络上内容的整合等等,仅供参考,更多内容可以查看大三下指南专栏。
1. Docker

1.1 安装Docker

终端输入指令:yum -y install docker 即可安装
通过输入指令:docker version 查看版本(能看到就是安装乐成了)

此时的version还略显青涩,只有Client短短的几行,只要启动了Docker它就会主动初始化了。
1.2 启动Docker

终端输入指令:systemctl start docker.service 启动Docker服务(后续如果用不了Docker下令请先查抄是否已经启动了服务)
再次输入指令:docker version 查看版本

如今就同时拥有了Client和Server版本了,安装启动乐成!
最后为了之后不消每次都手动开启,使用指令systemctl enable docker设置开机自启。
2. Dokcer部署Hadoop

由于Docker现实上是提供了一个假造环境(雷同于假造机),因此我们实在相当于是在Master假造机上再创建三个小假造机,套娃……
所以下面的操作都是在Master一台假造机上举行的。
开始之前把Master假造机重新启动一次,别的两台假造机不需要开机。
2.1 计划Hadoop集群结构

主机:master(ip或主机名)
从机:slave1、slave2(ip或主机名)
2.2 拉取Hadoop镜像

确保Docker服务已经开启
终端输入指令:docker images 查看镜像

很明显我的Docker非常的干净,啥也没有……
终端输入指令:docker pull registry.cn-beijing.aliyuncs.com/jing-studio/centos7-hadoop 拉取Hadoop的镜像

终端输入指令:docker images 查看镜像,拉取乐成了。

2.3 ★解决拉取镜像时 - no space left on device(磁盘不敷)

我在拉取镜像时出现了以下的错误:no space left on device

参考假造机扩容
2.4 创建Docker容器

实行完下令之后大概会跳到登录界面,如果没进入GUI,可以ctrl + alt + F2切换,但是大概会没有鼠标。
猜测是Docker的下令行抢占了GUI,而GUI被迫排到了原来CentOS下令行的位置(F1有鼠标,F2没有鼠标),如果有方法解决可以分享一下。
下面操作都是在Master一台假造机操作:
下面的master60、slave1-60、slave2-60只是容器的名字,可以起别的!
(1)终端输入指令:docker run -d --name master60 -h master60 \(注意修改主机名),在新出现的下令行依次输入:
(2)终端输入指令:docker run -d --name slave1-60 -h slave1-60 \(注意修改主机名),在新出现的下令行依次输入:
(3)终端输入指令:docker run -d --name slave2-60 -h slave2-60 \(注意修改主机名),在新出现的下令行依次输入:
最后通过指令docker ps查看已经启动的容器

2.5 ★解决docker ps没有内容

docker ps是查看已经启动的容器,如果没有找到可以通过docker ps -a查看容器的ID(最前面的),之后再通过docker start 容器ID打开。
2.6 通过终端进入容器

开头就提到过,每个容器就雷同于一个小的假造机,我们可以直接连接到容器再对其举行操作。
下面的操作全都是在Master一台假造机上举行的!
首先打开三个终端,分别通过以下指令进入三个容器。

进来之后顺便看了一下IP:
  1. 172.17.0.2 master60
  2. 172.17.0.3 slave1-60
  3. 172.17.0.4 slave2-60
复制代码
2.7 关闭防火墙

在三个终端都举行如下操作:
输入指令:systemctl stop iptables.service
为了防止重启后防火墙重启,再举行如下操作:
输入指令:vi ~/.bashrc,之后再文件末端添加上这段关闭指令systemctl stop iptables.service即可。
2.8 设置SSH

2.8.1 设置主机名

首先明白容器的主机名和容器名没有关系,和假造机的主机名也没有关系。
但是建议是不要和假造机的主机名雷同,由于之后大概会产生辩论导致只能用IP来举行操作。
这句话是我后来加上的所以我这里没有修改,但是盼望可以起雷同于Dmaster60的主机名,当然要是害怕之后出问题,也可以不改。
在每一个终端都举行如下操作(共3次):
输入指令:vi /etc/sysconfig/network
然后添加下面的内容,其中HOSTNAME=XXX是终端代表的假造机的主机名。
  1. NETWORKING=yes
  2. HOSTNAME=master60
复制代码

直接中键复制大概会少几个字母!!!请确保完全同等,否则后续大概会出现问题!!!
2.8.2 添加映射关系

在每一个终端都举行如下操作(共3次):
输入指令:vi /etc/hosts
然后把之前得到的容器IP添加到文件末端:
  1. 172.17.0.2 master60
  2. 172.17.0.3 slave1-60
  3. 172.17.0.4 slave2-60
复制代码

由于容器的/etc/hosts每次重启都会重置,这样我们再举行如下的操作:
输入指令:vi ~/.bashrc,然后在末端添加如下内容(注意修改):
  1. echo "172.17.0.2 master60" >> /etc/hosts
  2. echo "172.17.0.3 slave1-60" >> /etc/hosts
  3. echo "172.17.0.4 slave2-60" >> /etc/hosts
复制代码

2.8.3 重置暗码、生成秘钥

使用passwd指令重新设置暗码(!!!之后大概会用),直接123456两次就可以。三个容器最好都重置暗码。

大概如今的版本创建的时候就已经自带秘钥了?没有设置就可以免密登录了。

分别在每个终端ssh其他的机器试试有没有免密,如果没有的话参考涛哥的博客step3 - 4。
2.9 设置分享Hadoop文件

在master60容器(终端)上完成设置,之后再分享给别的两个容器(终端)。
首先输入指令:cd /usr/local/hadoop/etc/hadoop
这个和之前的实行逐一样,写错了一点就险些不大概乐成运行,因此请认真查对自己的相关设置!
2.9.1 core-site.xml

先进入到设置文件:vi core-site.xml
在末端追加以下内容:
  1. <configuration>
  2.         <property>
  3.                 <name>fs.defaultFS</name>
  4.                 <value>hdfs://master60:9000</value>
  5.          </property>
  6.          
  7.          <property>
  8.                  <name>hadoop.tmp.dir</name>
  9.                  <value>/home/data/hadoopdata</value>
  10.          </property>
  11. </configuration>
复制代码

之后,返回到终端创建两个文件:
mkdir -p /home/data
mkdir -p /home/data/hadoopdata
2.9.2 hdfs-site.xml

先进入到设置文件:vi hdfs-site.xml
在末端追加以下内容:
  1. <configuration>
  2.         <property><!--配置存储namenode数据的目录-->
  3.                 <name>dfs.namenode.name.dir</name>
  4.                 <value>/home/data/hadoopdata/name</value>
  5.         </property>
  6.        
  7.         <property><!--配置存储datanode数据的目录-->
  8.                 <name>dfs.datanode.data.dir</name>
  9.                 <value>/home/data/hadoopdata/data</value>
  10.         </property>
  11.      
  12.         <property><!--配置副本数量-->
  13.                 <name>dfs.replication</name>
  14.                 <value>1</value>
  15.         </property>  
  16.      
  17.         <property><!--配置第二名称节点-->
  18.             <name>dfs.secondary.http.address</name>
  19.             <value>master60:50090</value>
  20.       </property>
  21. </configuration>
复制代码

2.9.3 mapred-site.xml

输入指令:cp mapred-site.xml.template mapred-site.xml
然后输入:vi mapred-site.xml
在末端追加以下内容:
  1. <configuration>
  2.           <property>
  3.             <name>mapreduce.Framework.name</name>
  4.             <value>yarn</value>
  5.         </property>
  6. </configuration>
复制代码

2.9.4 yarn-site.xml

先进入到设置文件:vi yarn-site.xml
在末端追加以下内容:
  1. <configuration>
  2.         <property> <!--配置yarn主节点-->
  3.                 <name>yarn.resourcemanager.hostname</name>
  4.                 <value>master60</value>
  5.         </property>
  6.    
  7.         <property><!--配置执行的计算框架-->
  8.                 <name>yarn.nodemanager.aux-services</name>
  9.                 <value>mapreduce_shuffle</value>
  10.         </property>
  11. </configuration>
复制代码

2.9.5 slaves

先进入到设置文件:vi slaves
在末端追加以下内容:
  1. master60
  2. slave1-60
  3. slave2-60
复制代码

不消localhost是由于之后要传给其他的容器,而localhost代表"本机"。
2.9.6 分享设置文件给其他容器

首先确保能互相ping通(一样平常有网就行),这里不多做演示。
确保主容器在hadoop目次下,cd /usr/local/hadoop/etc/hadoop。
①先传给slave1,记得改IP!!!
  1. scp slaves root@slave1-60:/usr/local/hadoop/etc/hadoop/
  2. scp mapred-site.xml root@slave1-60:/usr/local/hadoop/etc/hadoop
  3. scp yarn-site.xml root@slave1-60:/usr/local/hadoop/etc/hadoop/  
  4. scp hdfs-site.xml root@slave1-60:/usr/local/hadoop/etc/hadoop
  5. scp core-site.xml root@slave1-60:/usr/local/hadoop/etc/hadoop
  6. scp -r /home/data/hadoopdata root@slave1-60:/home/
复制代码

要是出现了这个就yes,似乎是我的hosts设置的不是很好主动帮我修改了。
②再传给slave2,记得改IP!!!
  1. scp slaves root@slave2-60:/usr/local/hadoop/etc/hadoop/
  2. scp mapred-site.xml root@slave2-60:/usr/local/hadoop/etc/hadoop
  3. scp yarn-site.xml root@slave2-60:/usr/local/hadoop/etc/hadoop/  
  4. scp hdfs-site.xml root@slave2-60:/usr/local/hadoop/etc/hadoop
  5. scp core-site.xml root@slave2-60:/usr/local/hadoop/etc/hadoop
  6. scp -r /home/data/hadoopdata root@slave2-60:/home/
复制代码
2.10 格式化节点

在三个容器(终端)都使用指令:hadoop namenode -format,轻松拿下。

2.11 终极无敌启动Hadoop!!

在主机使用指令/usr/local/hadoop/sbin/start-all.sh
然后经典jps查看状态,太康健了!

然后访问一下172.17.0.2:50070当然IP可以用主机名代替,但是我假造机主机名和容器主机名是辩论的(主机名不区分巨细写),因此有时候我无法通过master60:50070来访问。

◆终端实行jps,证实假造器Hadoop集群没有启动Hadoop,需要截图[1]。

◆终端实行进入容器下令,用report下令体现Docker Hadoop集群状态,这个需要截屏[2]。
使用hadoop dfsadmin -report指令。
实在有三部分下面只截了172.17.0.2的信息。

关闭终端不代表关闭容器,可以再次进入,Hadoop也不会断开。重开假造时机关闭容器,需要重新连接。
2.12 设置与运行Hadoop WordCount程序

直接按照步骤一步一步来:


似乎由于容器和假造机巴拉巴拉之间缘故原由,用网页大概是无权操作的,因此这么做就行了。
如果要删除就使用hadoop fs -rm -r /output,不删除不能再次运行。
2.13 ★重启假造机后的操作

重启假造机后容器没有开启,docker ps是看不到容器的由于这个指令是看正在运行的容器的;
通过docker ps -a指令查看容器的ID,然后再通过docker start ID来启动。
直接一次开三个,跳转到GUI的概率大一点

然后先打开三个终端,分别通过以下指令进入三个容器。
最后再打开Docker的Hadoop就行了/usr/local/hadoop/sbin/start-all.sh。
3. Docker PLUS

终端关了就行了,如今是别的的内容了,之后是在假造机的终端上举行。
之后操作在假造机终端!!假造机终端!!假造机终端!!
3.1 制作自己的镜像

直接实行下令:

  1. FROM alpine:latest
  2. ADD ./hello.sh /hello.sh
  3. RUN chmod +x /hello.sh
  4. CMD ["/bin/sh","-c","/hello.sh"]
复制代码

不乐成可以搞一个镜像加速
◆终端使用Docker build创建Hello-Docker镜像截屏,需要截屏[3]。

这个第一次失败了,又运行一遍就乐成了……有点玄学。
用docker images查看镜像列表,创建乐成了。

也可以用docker run --name hello-docker hello-docker来运行一下,当然实行中没有提到就不多说明白。
3.2 镜像注册,创建个人实例,关联GitHub

用阿里云是由于要有关联GitHub的过程?由于要完成实行,所以只举行到实行需要的部分。PS.为什么不消阿里云要用星星的Docker Hub!
阿里云官网
3.2.1 阿里云关联GitHub

似乎如今Docker Hub必须是高级VIP才能使用关联GitHub的功能,囊中羞涩只能用阿里云来表演一下关联GitHub这个操作了。
阿里云容器镜像服务
点击代码源,然后绑定GitHub就可以了。

3.2.2 阿里云创建个人实例

点击镜像堆栈->创建镜像堆栈。

然后关联一下GitHub,之退却出革新一下页面就出来了(提示堆栈已存在)。
3.3 把自己的镜像发布到Docker Hub

上面的阿里云只是走个过场,这个才是要真提交的。
Docker Hub官网直接注册就行了……注册就不多说了Register。
3.3.1 Docker Hub创建堆栈

点击上面的Repositories,然后新建一个堆栈。

3.3.2 在Docker上登录Docker Hub

终端输入:docker login -u 用户名 -p 暗码,账号暗码自己知道。

3.3.3 推送镜像

由于我假造机大概存在一些问题(大概率是网络问题)无法push到Docker Hub(用阿里云没问题),有的人大概没有这个问题。
由于我暂时没有使用Docker Hub因此之后的步骤用的是同学提供的截图!
非常感谢!

   docker tag [镜像id] [网站上的位置]:[自定义Tag名字]
  标准化一下,先打个标签docker tag hello-docker:latest fengjiahuan/fengjh032:version_1.0。(tag自己起没有标准)
其中fengjiahuan/fengjh032是Docker Hub的用户名/堆栈名。

   docker push [网站上的位置]:[自定义Tag名字]
  ◆终端推送Hello-Docker到DockerHub的截屏,需要截屏[4]
直接实行docker push fengjiahuan/fengjh032:version_1.0 如果不带tag就默认是latest。

3.3.4 验证是否乐成

◆在网页进入DockerHub用户,查看推送的Hello-Docker镜像截屏,需要截屏[7]

3.4 拉取验证自己的发布的镜像

最后一部分用阿里云代替了,应该差不多一样。
   docker pull docker.io/[用户名]/[堆栈名]:[镜像版本号]
  ◆终端实行pull从DockerHub拉取Hello-Docker镜像截屏,截屏[5]。
docker pull registry.cn-qingdao.aliyuncs.com/wtcsky/hello_docker:v1.0

最后查看一下
◆终端实行Docker Images截屏(赤色框圈中刚刚拉取的镜像),截屏[6]。

4. 番外篇

博客按照使命的顺序编写,中央小节按照需要截图的来分配。
通过Ctrl + F开启搜索,搜索关键字符◆就可以找到七个截图的位置(当然会搜索到8个,由于这句话里也有一个)。

…写的挺水的,有问题随时修改吧。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4