打怪升级之小白的大数据之旅(四十三)<Hadoop运行模式(集群搭建)>
Posted GaryLea
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了打怪升级之小白的大数据之旅(四十三)<Hadoop运行模式(集群搭建)>相关的知识,希望对你有一定的参考价值。
打怪升级之小白的大数据之旅(四十三)
Hadoop运行模式(集群搭建)
上次回顾
上一章对单个Hadoop服务器环境搭建进行分享,本章对Hadoop集群的搭建以及运行进行分享,集群是Hadoop的核心,所以本章节很重要!很重要!很重要!OK,让我们开始
Hadoop的运行模式&集群的概述
Hadoop运行模式概述
- Hadoop的运行模式分为本地模式、伪分布式模式和完全分布式模式三种,伪分布式没什么意思,我们也几乎用不到,我就不介绍了,我们的核心是完全分布模式,它就是我们Hadoop的集群
集群的概述
- 集群是什么?我们可以将它理解为多台服务器,例如我们在学校中的一个局域网,一个网段下,有很多的电脑,每一台电脑就是一台服务器,集群就是由多台服务器组成。
- 集群有以下几个特点(我自己的理解哈):
- 服务器之间可以相互连接并且无需登录
- 服务器间的数据可以共享,当其中一台服务器奔溃并不会使程序中断或数据丢失
- 可以使用多个服务器完成同一件任务,提高该任务的工作效率
Hadoop的本地模式
前面我们搭建好Hadoop后,仅仅只是使用了 version
进行了测试,下面我们使用官方的案例来进行本地模式进行Hadoop的测试,看看Hadoop是否正常运行
官网说明文档地址:http://hadoop.org/
第一步: 使用官方的wordcount,创建一个wcinput文件夹
# 进入hadoop的根目录下
cd /opt/module/hadoop-3.1.3
# 创建官方案例中需要的文件夹
mkdir wcinput
# 在wcinpput文件夹下创建一个wc.txt文件
vim wc.txt
# 编写测试数据
H 博
a 主
d 大
o 大
o 真
p 帅
我 !
来
了
!
第二步:回到Hadoop的根目录下,执行官方的程序,这个案例是什么意思我们先不管它,直接复制,后面会讲到
# 回到Hadoop根目录下
cd /opt/module/hadoop-3.1.3
在根目录下创建input文件夹
mkdir input
# 使用官方的案例
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount wcinput wcoutput
# 运行结果
! 1
H 1
a 1
d 1
o 2
p 1
主 1
了 1
博 1
大 2
帅 1
我 1
来 1
真 1
! 1
- 我来说明一下,这个案例是用来统计一个文本文件中的字符个数的,input存储的是官方案例中需要读取的文件,输出文件夹output,我们在Hadoop的根目录下会看到
_SUCCESS
和part-r-00000
两个文件,part-r-0000这个文件就是运行的结果,sucess代表的就是我们程序运行成功 - 如果运行结果是上面这个,那么恭喜你,你的hadoop环境配置没有问题,不过要注意一下,当我们再次运行时,需要删除output文件夹或者重新写一个输出的文件夹名称,否则会报错
Hadoop的完全分布模式
- 当我们本地模式没有问题了,接下来就是重点中的重点了—>Hadoop的完全分布模式
- 还记得上一章介绍的完全分布模式的步骤么?我再来提一下
- 虚拟机准备
- 集群分发脚本
- SSH无密登录
- 集群配置
- 群起集群配置
- 集群的启动与停止
- 配置历史服务器
- 配置集群的时间同步
- 下面我就根据这几个功能来为大家介绍Hadoop的完全分布模式
虚拟机准备
-
虚拟机准备就是我们上一章搭建的那三台服务器,其中hadoop102服务器是安装了jdk和hadoop并且设置了环境变量的,再次提醒一下:hadoop103和hadoop104一定记得改hostname和hosts还有静态的ip地址哈
-
首先先在103和104服务器上安装一下必须安装的那两个插件
yum install -y epel-release yum install -y psmisc nc net-tools rsync vim lrzsz ntp libzstd openssl-static tree iotop git
好了,虚拟机的基础任务全部就完成了,接下来我来介绍两个小知识点,介绍完就就要进行集群的配置了,它们分别是集群分发脚本和SSH无密登录
集群分发脚本
- 分发脚本的作用是在一台服务器上实现向别的服务器发送文件,我以hadoop102服务器举例:
- 我可以在hadoop102服务器上发送文件到103服务器或104服务器上
- 我可以从hadoop103服务器上拉取服务器中的文件到我的hadoop102服务器中
- 我也可以在hadoop服务器上将hadoop103服务器中的文件发送到hadoop104中
- 分发脚本有两种实现方式:scp和xsync,我们主要使用xsync,但为了引出xsync我先介绍scp
scp
- scp全称secure copy 它是安全拷贝
- scp可以实现服务器与服务器之间的数据拷贝
- 注意,我们进行服务器间的拷贝时,运行后需要输入yes,然后输入密码
- 基本语法
scp -r $pdir/$fname $user@hadoop$host:$pdir/$fname 命令 递归 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称
- 示例:
# 在hadoop102上,将hadoop102中/opt/module目录下的软件拷贝到hadoop103上 scp -r /opt/module hadoopuser@hadoop103:/opt/module
- 学到这里,我们需要将hadoop102module中的jdk和hadoop文件还有我们写的那个配置文件全部分发到hadoop103和hadoop104中,注意一下,我们分发的时候,使用的用户是我们创建的那个hadoopuser
scp -r /opt/module hadoopuser@hadoop103:/opt/module scp -r /opt/module hadoopuser@hadoop103:/opt/module sudo scp -r /etc/profile.d/my_env.sh hadoopuser@hadoop103:/etc/profile.d/my_env.sh # 在分发的服务上重新加载一下配置文件 source my_env.sh
xsync
- 因为scp每次运行都会将文件覆盖一次,如果我们要分发某个目录下的多个文件,它会将所有文件都覆盖一次,效率低
- 使用xsync可以提高我们分发的效率,它第一次分发的效果和scp一样,但是后面再次分发时,仅仅只会对修改的文件进行分发
- xsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点,我们通常会将它的两个参数都加上
- 基本语法
rsync -av $pdir/$fname $user@hadoop$host:$pdir/$fname 命令 选项参数 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称 # 参数说明 -a 归档拷贝 -v 显示复制的过程
- 示例:
# 把hadoop102机器上的/opt/software目录同步到hadoop103服务器的root用户下的/opt/目录 rsync -av /opt/software/ hadoop103:/opt/software
- 我们分发的脚本会经常使用,因为我们会对配置文件进行修改,于是我们可以使用shell编程,将xsync分发命令通过脚本文件进行实现
- 在上一章我们学习Hadoop目录的时候知道,Hadoop的bin目录是Hadoop存放它命令的文件夹
- 因为我们的Hadoop添加到了环境变量中,所以我们可以将我们的脚本放大bin目录,就可以在任何地方直接运行了
- 我将分发脚本和其他实用的脚本放到下面的Hadoop中一些使用小脚本中,大家可以自己复制一份到指定的目录下
SSH无密登录
SSH连接服务器
- 我们前面进行文件分发的时候,每次都需要登录,在Hadoop集群中当然不能这样,因此我们需要使用ssh无密登录
- ssh用于远程连接,它的原理类似我们的xshell
- 基本语法
ssh另一台电脑的ip地址
- 因为我们前面定义了hostname,所以我们可以直接
ssh hostname进行连接
,我现在是hadoop102服务器,例如ssh hadoop103
- 这个就是我前面一直强调修改hostname和hosts的原因,我们连接后,会出现下面这个提示,直接yes,然后需要输入密码即可成功连接到103服务器
The authenticity of host '192.168.1.103 (192.168.1.103)' can't be established. RSA key fingerprint is cf:1e:de:d7:d0:4c:2d:98:60:b4:fd:ae:b1:2d:ad:06. Are you sure you want to continue connecting (yes/no)?
无密钥配置
免密登录原理
- 有一个我们经常见到的免密登录原理图
- 它的原理很简单,我们将它理解为一把锁和一把钥匙,锁和钥匙是一对,公钥就是钥匙,私钥就是锁,我们可以配很多把钥匙用来开这把锁,我还是以hadoop102和hadoop103举例
- 当我需要让hadoop103无密连接到102时,那么我就将hadoop102的这把钥匙(公钥)发送给hadoop103,此时hadoop103就有了打开hadoop102锁的钥匙
- 当hadoop103
ssh hadoop102
时,hadoop103就会拿着这把钥匙(公钥),hadoop102就会查看这把钥匙是否能开启自己的锁(私钥),如果配对成功,那么直接就可以登录而无需密码 - 注意一下,我们接下来以及以后的所有操作都是使用我们创建的那个用户来进行的
免密登录示例,以上面例子举例,我现在是hadoop102服务器
# 进入生成公钥私钥的文件夹
cd ~/.ssh
# 生成公钥和私钥
ssh-keygen -t rsa
# 然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
# 将公钥拷贝到要免密登录的目标机器上
ssh-copy-id hadoop103
-
.ssh文件夹下存放的就是我们的公钥和私钥,
.ssh
文件夹下(~/.ssh)的文件功能解释:known_hosts
记录ssh访问过计算机的公钥(public key)id_rsa
生成的私钥id_rsa.pub
生成的公钥authorized_keys
存放授权过的无密登录服务器公钥
-
接下来我们需要每一台服务器都进行公钥私钥的生成,然后分别分发到各个的服务器中,对此我写了一个脚本,大家直接运行即可
免密登录的脚本
- 生成公钥私钥脚本
# 进入到家目录下,存放我们的脚本 cd ~ # 创建生成key的脚本文件 vim key.sh # 编写脚本文件 #!/bin/bash ssh-keygen -t rsa
- 公钥拷贝脚本
# 进入到家目录下,存放我们的脚本 cd ~ # 创建生成key的脚本文件 vim send_key.sh #!/bin/bash for host in hadoop102 hadoop103 hadoop104 do ssh-copy-id $host done
生成脚本后,使用xsync或者ssh进行分发
xsync -av ~/key.sh send_key.sh hadoopuser@hadoop103:~/
xsync -av ~/key.sh send_key.sh hadoopuser@hadoop104:~/
接着每台服务器都运行一下key.sh和send_key.sh,记住顺序哈,先key.sh再send_key.sh
运行后,最好每台服务器都使用ssh连接测试一下
ssh hadoop102
ssh hadoop103
ssh hadoop104
集群配置
集群配置的规划
配置集群前,我们需要了解的注意点以及集群配置的规划
Hadoo模块| 服务器名称 | hadoop102 | hadoop103 | hadoop104 |
---|---|---|---|
HDFS | NameNode| DataNode | DataNode | SecondaryNameNode| DataNode |
YARN | NodeManager | ResourceManager| NodeManager | NodeManager |
在我的理解看来,集群的最低配置就是三个节点
- 首先每台服务器都有存储数据的DataNode和进行任务管理的NodeManager
- 另外NameNode、ResourceManager和SecondaryNameNode都比较耗费资源,它们三个是不能在同一个节点上进行部署的,所以需要分开
- 它们三个分开还有另外一层意思就是解耦,如果它们至少有两个在同一个节点的话,当该节点异常崩溃,就会导致整个集群崩溃掉
大家注意一下:我在hadoop102 上配置的是NameNode
,在hadoop103配置的是ResourceManager
。在hadoop104节点上配置的是SecondaryNameNode
集群配置文件
配置集群的主要任务就是配置集群的文件,根据Hadoop的构成,我们会进行如下的配置文件修改:
- 核心配置文件 core-site.xml
- HDFS配置文件 hdfs-site.xml
- YARN配置文件 yarn-site.xml
- MapReduce配置文件 mapred-site.xml
-
配置文件的路径就在hadoop根目录中的etc/hadoop文件夹下,即
/opt/module/hadoop-3.1.3/etc/hadoop
-
在我们上一章进行单机运行时,Hadoop是通过加载默认配置的文件来工作的,文件就是前面我说的这些,例如: core-default.xml, hdfs-default.xml等
-
我们可以将xxx-site.xml理解成Java中的重写方法,当我们修改了xxx-site.xml后Hadoop就会直接加载我们修改的这些配置文件,下面我就直接将这些配置文件的常用信息放到下面,大家直接复制到我们的服务器中就好,直接使用vim打开即可
-
注意一下,我们的配置信息是在
<configuration> 配置信息 </configuration>
中,大家粘贴的时候,不要重复复制这个标签
core-site.xml
<configuration>
<!--指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:9820</value>
</property>
<!-- 指定Hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.1.3/data</value>
</property>
<!-- 通过web界面操作hdfs的权限 -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>atguigu</value>
</property>
<!-- 后面hive的兼容性配置 -->
<property>
<name>hadoop.proxyuser.atguigu.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.atguigu.groups</name>
<value>*</value>
</property>
</configuration>
hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:9868</value>
</property>
</configuration>
yarn-site.xml
<configuration>
<!-- Reducer获取数据的方式-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop103</value>
</property>
<!-- 环境变量通过从NodeManagers的容器继承的环境属性,对于mapreduce应用程序,除了默认值 hadoop op_mapred_home应该被添加外。属性值 还有如下-->
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
<!-- 解决Yarn在执行程序遇到超出虚拟内存限制,Container被kill -->
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
<!-- 后面hive的兼容性配置 -->
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>512</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>4096</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>4096</value>
</property>
</configuration>
mapred-site.xml
<configuration>
<!-- 指定MR运行在Yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
接下来:
- 将一台服务器中的这些配置信息修改完毕后,我们就要进行分发了,每台节点都需要进行配置信息的修改,分发的小脚本请看我下面Hadoop中一些使用小脚本那一节
xsync /opt/module/hadoop-3.1.3/etc/hadoop/
- 检查一下文件分发的情况
# 分别进入我们的三台服务器,然后使用cat查看一下配置信息是否正确修改 /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml # 后面的其他配置文件就省略了..就是修改一下最后的xxx-site.xml
群起集群配置
配置文件全部没问题之后,我们还需要设置一下群起集群,群起集群的意思就是整个集群的配置,在进行下面步骤前,先看一下注意事项:
- 我们在hadoop102上,运行NameNode格式化,然后在该服务器上启动HDFS
- 我们在hadoop103上,启动Yarn
- 我们下面的操作命令,都是基于我在环境变量中配置了Hadoop的sbin,没有配置的小伙伴运行下面命令会报找不到该命令这个错误的
第一步:配置workers,它的作用是,在我们启动集群时,就会找到该集群中工作的节点
# 设置需要运行的节点服务器名称
vim /opt/module/hadoop-3.1.3/etc/hadoop/workers
# 在该文件中添加如下信息:
hadoop102
hadoop103
hadoop104
第二步: 同样的,我们修改该配置后,进行分发,同步一下配置信息
xsync /opt/module/hadoop-3.1.3/etc
第三步:启动集群
- 如果集群是第一次启动,需要在hadoop102节点格式化NameNode(注意格式化之前,一定要先停止上次启动的所有namenode和datanode进程,然后再删除data和log数据)
# 格式化NameNode节点 hdfs namenode -format
- 格式化后启动HDFS节点
start-dfs.sh
在配置了ResourceManager的节点(hadoop103)
启动YARNstart-yarn.sh
使用web查看Hadoop运行状态
当我们启动了HDFS和YARN后,要查看是否启动成功,在浏览器中使用下面的链接
- http://hadoop102:9870/ 查看HDFS
- http://hadoop103:8088/ 查看执行过的Job
- http://hadoop104:9868/ 2NN信息的页面
- http://hadoop102:19888 查看历史服务
- 历史服务打不开是因为我们还没有配置,别急,等一下就来讲如何配置
- 我们在打开hadoop104的页面后,如不是下面这页面的话,需要修改下配置文件
# 1.进入需要修改配置的文件路径 cd $HADOOP_HOME/share/hadoop/hdfs/webapps/static # 2. 查看dfs-dust.js的第61行 return moment(Number(v)).format('ddd MMM DD HH:mm:ss ZZ YYYY'); # 3. 修改内容,将上面这一行改为下面的内容 return new Date(Number(v)).toLocaleString(); # 4. 修改完成后,清理一下浏览器缓存就好了
集群基本测试
- 当我们进行了上面的所有步骤后,我们可以使用
jps
命令来查看当前服务器Hadoop的运行状态,坐标数字是PID进程号,后面的我们运行中的服务名称,我们可以看到hadoop102成功启动了NameNode服务,103服务器成功启动了ResourceManager服务…# 查看运行的服务 ssh hadoop102 jps ssh hadoop103 jps ssh hadoop104 jps # hadoop102服务器 7284 Jps 5484 DataNode 5326 NameNode 5790 NodeManager # hadoop103服务器 20387 NodeManager 21987 Jps 19878 DataNode 20072 ResourceManager # hadoop104服务器 19298 SecondaryNameNode 21300 Jps 19180 DataNode 19388 NodeManager
第一步:前面运行没有问题,我们还需要上传文件到集群来测试一下是否成功,首先创建一个测试文件
# 在hadoop102服务器的根目录下创建一个input文件夹
mkdir input
# 在input文件夹下创建一个测试文件test.txt
vim test.txt
# 编写测试数据
我是测试数据
我爱学习大数据
第二步:在hadoop102服务器上运行命令
hadoop fs -put $HADOOP_HOME/input/test.txt /input
第三步:在web中查看我们的数据是否上传成功
我会在后面专门讲解HDFS,大家照着步骤来做就好了
集群的启动与停止
下面正式介绍一下集群的启动与停止命令,集群的启动和停止分为两部分:整体启动和各模块分开启动
- 整体启动:
# 整体启动/停止HDFS start-dfs.sh/stop-dfs.sh # 整体启动/停止YARN start-yarn.sh/stop-yarn.sh
- 分开启动
- 如果我们对其中一台服务器进行服务的启动和停止就要使用下面的方式
# 分别启动/停止HDFS组件 hdfs --daemon start/stop namenode/datanode/secondarynamenode # 启动/停止YARN yarn --daemon start/stop resourcemanager/nodemanager
Hadoop中一些实用的小脚本
xsync分发脚本
使用的时候,我们直接使用xsync 需要分发的文件/目录路径
就可以分发到其他的节点上
# 进入Hadoop的bin目录
cd /opt/module/hadoop-3.1.3/bin
# 创建分发脚本xsync
vim xsync
# 编写分发脚本
#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2. 遍历集群所有机器
for host in hadoop102 hadoop103 hadoop104
do
echo ==================== $host ====================
#3. 遍历所有目录,挨个发送
for file in $@
do
#4 判断文件是否存在
if [ -e $file ]
then
#5. 获取父目录
pdir=$(cd -P $(dirname $file); pwd)
#6. 获取当前文件的名称
fname=$(basename $file)
ssh $host "mkdir -p $pdir"
rsync -av $pdir/$fname $host:$pdir
else
echo $file does not exists!
fi
done
done
一键启动/停止集群
在前面我们启动集群时,需要在hadoop102上启动HDFS,在hadoop103上启动yarn,比较麻烦,因此,我们可以使用下面的脚本,一键启动/停止集群
# 进入Hadoop的bin目录
cd $HADOOP_HOME/bin
# 设置一键启动脚本
vim mycluster
# 编写脚本
#!/bin/bash
if [ $# -ne 1 ]
then
echo "args number error!!!please input start or stop"
exit
fi
case $1 in
"start")
ssh hadoop102 start-dfs.sh
ssh hadoop103 $HADOOP_HOME/sbin/start-yarn.sh
;;
"stop")
ssh hadoop102 stop-dfs.sh
ssh hadoop103 $HADOOP_HOME/sbin/stop-yarn.sh
;;
*)
echo "args info error!!!"
;;
esac
一键查看所有节点的运行状态
前面我们使用jps
命令查看服务器运行状态需要进入到对应的服务器中,比较麻烦,有了下面的脚本,就可以一键查看所有节点的运行状态了
# 进入Hadoop的bin目录
cd $HADOOP_HOME/bin
# 设置查看节点运行状态脚本
vim jpscall
# 编写脚本
#!/bin/bash
for host in hadoop102 hadoop103 hadoop104
do
echo "===============$host===================="
ssh $host jps
done
配置历史服务器
为了查看程序的历史运行情况,需要配置一下历史服务器。具体配置步骤如下:
第一步: 配置mapred-site.xml
# 进入Hadoop的配置文件目录下
cd /$HADOOP_HOME/etc/hadoop
# 进行配置文件设置
vim mapred-site.xml
# 配置内容
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop102:10020</value>
</property>
<!-- 历史服务器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop102:19888</value>
</property>
第二步: 分发配置
xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml
第三步: 在hadoop102启动历史服务器
mapred --daemon start historyserver
第四步: 查看历史服务器是否启动
jpscall
第五步: 查看JobHistory
http://hadoop102:19888/jobhistory
配置日志的聚集
- 日志聚集概念:应用运行完成以后,将程序运行日志信息上传到HDFS系统上。
- 日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试
- 开启日志聚集功能,需要重新启动NodeManager 、ResourceManager和HistoryManager
- 开启日志聚集功能具体步骤如下:
第一步:配置yarn-site.xml
# 还是进入etc配置文件
cd /$HADOOP_HOME/etc/hadoop
# 编辑配置文件
vim yarn-site.xml
# 编辑内容
<!-- 开启日志聚集 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 访问路径-->
<property>
<name>yarn.log.server.url</name>
<value>http://hadoop102:19888/jobhistory/logs</value>
</property>
<!-- 保存的时间7天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
第二步:分发配置
xsync $HADOOP_HOME/etc/hadoop/yarn-site.xml
第三步:关闭NodeManager 、ResourceManager和HistoryServer
在hadoop103上执行: stop-yarn.sh
在hadoop102上执行: mapred --daemon stop historyserver
第四步:启动NodeManager 、ResourceManage、Timelineserver和HistoryServer
在hadoop103上执行:start-yarn.sh
在hadoop103上执行:yarn --daemon start timelineserver
在hadoop102上执行:mapred --daemon start historyserver
第五步:删除HDFS上已经存在的输出文件
hdfs dfs -rm -R /user/atguigu/output
第六步:执行WordCount程序
# 重复我们前面测试集群是否成功的那个案例,记得在input中放入测试数据文件
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output
第七步:查看日志,
http://hadoop102:19888/jobhistory
配置集群的时间同步
- 时间同步的方式:找一个机器,作为时间服务器,所有的机器与这台集群时间进行定时的同步,比如,每隔十分钟,同步一次时间
- 因为我们的集群是一个整体,所以必须保证所以服务器是一摸一样的,这样才可以完美地进行各项任务
第一步:时间服务器配置(必须root用户)
在102上关闭ntp服务和自启动
sudo systemctl stop ntpd
sudo systemctl disable ntpd
第二步:修改ntp配置文件
# 修改ntp配置文件
sudo vim /etc/ntp.conf、
# 将下面这个的注释删除# 目的是为了设置其他节点都以这台服务器的时间为基准
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
# 将下面内容进行注释,目的是集群在局域网中,不使用其他互联网上的时间
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
# 添加下面的内容,目的是当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群中的其他节点提供时间同步
server 127.127.1.0
fudge 127.127.1.0 stratum 10
第三步:修改/etc/sysconfig/ntpd 文件
sudo vim /etc/sysconfig/ntpd
# 添加下面内容,目的是让硬件时间与系统时间一起同步
SYNC_HWCLOCK=yes
第四步:重启服务
systemctl start ntpd
systemctl enable ntpd
第五步:其他机器配置(必须root用户)
# 其他服务器设置定时脚本,我这里每10分钟同步一次时间
crontab -e
# 编写定时任务
*/10 * * * * /usr/sbin/ntpdate hadoop102
总结
- 本章节的细节点比较多,在两年前,只要是能完美完成集群搭建的人,在公司都是横着走的,当然今天这是我们大数据人员必不可少的技能
- 历史服务器和日志的聚集是为了日后我们工作中可以很方便地管理我们的集群,当然了,在我们学习这些知识点的时候,没有必要开启服务,因为它耗费资源,时间同步也是一样。当然,在我们的工作中,是必须要开启的哈
- 一定注意集群启动的位置,我已经强调了很多遍了,下一章,我会对一些常见问题进行总结,大家根据需要进行查看
以上是关于打怪升级之小白的大数据之旅(四十三)<Hadoop运行模式(集群搭建)>的主要内容,如果未能解决你的问题,请参考以下文章
打怪升级之小白的大数据之旅(四十一)<大数据与Hadoop概述>
打怪升级之小白的大数据之旅(四十八)<初识MapReduce>
打怪升级之小白的大数据之旅(四十四)<Hadoop搭建过程中的一些问题>
打怪升级之小白的大数据之旅(五十三)<Hadoop最后一个模块--Yarn>