文章目录
- 前言
- 一、模板虚拟机环境准备
- 二、克隆虚拟机(以hadoop102为例)
- 三、修改克隆机的IP
- 四、安装JDK
- 五、安装Hadoop(完全分布式)
- 六、集群常用命令
- 七、配置集群
- 八、群起并测试集群
- 九、配置历史服务器
- 十、配置日志的聚集
- 十一、集群启动/停止方式总结
- 十二、其他常用脚本
- 十三、集群时间同步
前言
本文主要讲Hadoop运行环境(完全分布式)搭建。三种完全分布式客户机如下:
Hadoop运行模式有三种:本地、伪分布、完全分布模式。
运行模式 | 说明 |
---|---|
本地模式 | 数据存储在linux本地 |
伪分布模式 | 数据存储在HDFS |
完全分布模式 | 数据存储在HDFS 多台服务器工作 |
一、模板虚拟机环境准备
1、安装模板虚拟机,请参考链接:https://blog.csdn.net/sodaloveer/article/details/139795882
模板虚拟机信息:
- IP地址:192.168.10.100
- 主机名称:QF
- 内存:2G
- 硬盘:80G
2、安装XShell远程访问机,请参考链接:https://blog.csdn.net/sodaloveer/article/details/140122338
3、QF虚拟机配置要求如下(本文Linux系统版本以Linux version 3.10.0-957.el7.x86_64为例)- 使用 yum 安装前,先执行"ping www.baidu.com"命令测试下虚拟机联网情况。
如果Linux安装的是最小系统版本,还需要安装"net-tool"工具、"vim"编辑器;如果安装的是Linux桌面标准版,可以跳过,直接执行命令安装epel-release。
- 安装 net-tool 工具,执行"yum install -y net-tools "命令。
net-tool:工具包集合,包含ifconfig等命令。
- 安装 vim 编辑器,执行"yum install -y vim"命令。
- 安装 epel-release ,执行"yum install -y epel-release"命令。
4、关闭防火墙,关闭防火墙开机自启
- 执行"systemctl stop firewalld"命令。
- 执行"systemctl disable firewalld.service"命令。
5、创建atwqf用户,并修改atwaf用户的密码
执行"useradd atwqf"命令。
执行"passwd w574520."命令。
6、配置atwqf用户具有root权限,方便后期加sudo执行root权限命令。执行"vim /etc/sudoers"命令,打开文件。
修改/etc/sudoers文件,在%wheel这行下面添加一行:
atwqf ALL=(ALL) NOPASSWD:ALL
注意:atwqf 这一行不要直接放到root下面,因为所有用户都属于wheel组,你先配置了atwqf具有免密功能,但是程序执行到%wheel行时,该功能又被覆盖回需要密码,所以atwqf要入放到%wheel行下面。
7、在/opt目录下面创建文件夹,并修改所属主和所属组。
7.1. 在/opt目录下创建module、software文件夹。
执行"mkdir /opt/module"命令。
执行"mkdir /opt/software"命令。
7.2. 修改module、software文件夹的所有者和所属组均为atwqf用户。执行"mkdir atwqf:atwqf /opt/module"命令。
执行"mkdir atwqf:atwqf /opt/software"命令。
7.3. 查看module、software文件夹的所有者和所属组。执行"cd /opt/"命令。
执行"ll"命令。
8、卸载虚拟机自带的JDK,如果你的虚拟机是最小化安装可以直接跳过这一步,不需要执行。
执行"rmp -qa | grep -i java | xargs -nl rpm -e --nodes"命令。
9、重启虚拟机执行"reboot"命令。
二、克隆虚拟机(以hadoop102为例)
利用模板机QF,克隆三台虚拟机:hadoop102、hadoop103、hadoop104,下面以克隆hadoop102为例。
1、右键"管理"->"克隆"。
2、选择"创建完整克隆"。
3、填写克隆虚拟机的名称和存放位置。
4、重复上面克隆hadoop102的步骤,完成hadoop103、hadoop104的克隆。
5、如果想要彻底删除克隆机,右键"管理"->"从磁盘中删除"。
右键"移除"只是页面上移除。右键"打开",选择到对应的文件夹就可以恢复了。(参考链接:如何把vmware中已经移除的虚拟机恢复)
三、修改克隆机的IP
1、修改克隆虚拟机的静态IP。
- 执行"vim /etc/sysconfig/network-scripts/ifcfg-ens32"命令。
主要是将IPADDR从"192.168.40.100"改成"192.168.40.102"(以hadoop102为例),同理,在hadoop103克隆机上要改成"192.168.40.103",在hadoop104克隆机要改成"192.168.40.104"。
2、修改克隆机主机名。
- 执行"vim /etc/hostname"命令。
将"QF"改成"hadoop102"(以hadoop102为例),同理,在hadoop103克隆机上要改成"hadoop103",在hadoop104克隆机上要改成"hadoop104"。
3、配置Linux克隆机主机名称映射host文件,执行"vim /etc/hosts"命令打开/etc/hosts。添加下面内容:
- 192.168.40.100 qf
- 192.168.40.101 hadoop101
- 192.168.40.102 hadoop102
- 192.168.40.103 hadoop103
- 192.168.40.104 hadoop104
4、查看Linux虚拟机的"虚拟网络编辑器"
- 点击"编辑"->"虚拟网络编辑器"->"VMnet8"。
- 点击"更改设置"进入编辑。
- 点击"VMnet8",设置"子网IP",点击 "NAT 设置" 进入设置 "网关IP"。
5、查看Windows系统适配器 VMware Network Adapter VMnet8的IP地址。
- "设置"->"网络和Internet"->"更改适配器选项"
- 右键"VMware Network Adapter VMnet8"->"属性"
- "Internet 协议版本4(TPC/IPv4)"的属性
- 设置"默认网关"和"DNS服务器地址"。
保证Linux系统ifcfg-ens32文件中IP地址,虚拟网络编辑器地址和Windows系统VM8网络IP地址相同。
6、重启克隆机hadoop102,执行"reboot"命令。
7、修改Windows的主机映射文件(hosts文件),进入"C:\Windows\System32\drivers"路径hosts,添加如下内容:(提示:操作系统是Windows10,先拷贝出来,修改保存以后,再覆盖即可。)
192.168.40.100 qf192.168.40.101 hadoop101
192.168.40.102 hadoop102
192.168.40.103 hadoop103
192.168.40.104 hadoop104
四、安装JDK
以hadoop102为例。先安装到hadoop102上,再拷贝到hadoop103、hadoop104上。
0、jdk下载地址:https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html,下滑找适合项目的jdk版本,尽量下载.tar.gz后缀的方便安装。
1、卸载现有jdk,在进行安装jdk前,一定要确保提前删除了虚拟机自带的jdk。
- 执行"rpm -qa|grep java"命令,查看旧JDK,如果有执行"sudo yum -y remove 要删除jdk的名字"。
2、用XShell传输工具Xftp将JDK导入到/opt/software/文件夹下面。
3、在Linux系统下的opt目录中查看软件包是否导入成功。
- 执行"ll"命令。
4、解压JDK到/opt/module目录下。
- 执行"tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/"命令。
5、查看是否解压成功。
6、配置JDK环境变量。
- 执行"vim /etc/profile.d/my_env.sh"命令新建文件,添加下面内容:
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_212
export PATH=PATH:JAVA_HOME/bin- 执行"source /etc/profile"文件,让新的环境变量PATH生效。
7、测试JDK是否安装成功。
- 执行"java -version"命令。
五、安装Hadoop(完全分布式)
以hadoop102为例,再拷贝到hadoop103、hadoop104上。
0、hadoop-3.1.3下载地址:https://archive.apache.org/dist/hadoop/common/hadoop-3.1.3/
1、用XShell传输工具Xftp将hadoop-3.1.3.tar.gz导入到/opt/software/文件夹下面。
2、在Linux系统下的opt目录中查看软件包是否导入成功。
- 执行"ll"命令。
3、解压hadoop-3.1.3.tar.gz到/opt/module目录下。
- 执行"tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/"命令。
4、查看是否解压成功。
5、配置Hadoop添加到环境变量。
- 获取Hadoop安装路径"/opt/module/hadoop-3.1.3"。
- 执行"vim /etc/profile.d/my_env.sh"命令新建文件,添加下面内容:
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=PATH:HADOOP_HOME/bin
export PATH=PATH:HADOOP_HOME/sbin- 执行"source /etc/profile"命令,让新的环境变量PATH生效。
6、测试是否安装成功。
- 执行"hadoop version"命令。
7、查看Hadoop目录结构。
- 执行"ll"命令。
重要目录说明:
- bin目录:存放对 Hadoop 相关服务(hdfs,yarn,mapred)进行操作的脚本
- etc目录:Hadoop 的配置文件目录,存放 Hadoop 的配置文件
- lib目录:存放 Hadoop 的本地库(对数据进行压缩解压缩功能)
- sbin目录:存放启动或停止 Hadoop 相关服务的脚本
- share目录:存放 Hadoop 的依赖 jar 包、文档、和官方案例
六、集群常用命令
1、根据上面的安装步骤,现在只有hadoop102这台客户机上安装好jdk和hadoop,因此通过scp命令将hadoop102安装成功的jdk和hadoop拷贝到hadoop103、hadoop104服务器上。如下图:
命令:scp
功能:安全拷贝,可以实现服务器与服务器之间的数据拷贝。
语法:
scp -r $pdir/$fname $user@$host:$pdir/$fname
scp -r 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称
在 hadoop102、hadoop103、hadoop104 都已经创建好的/opt/module、 /opt/software 两个目录,并且已经把这两个目录修改为 atwqf:atwqf。
在hadoop102上,
执行"scp -r /opt/module/jdk1.8.0_212 atwqf@hadoop103:/opt/module"命令,将hadoop102中/opt/module/jdk1.8.0_212 目录拷贝到hadoop103 上,
执行"scp -r /opt/module/jdk1.8.0_212 atwqf@hadoop104:/opt/module"命令,将hadoop102中/opt/module/jdk1.8.0_212 目录拷贝到hadoop104 上。
在hadoop102上,
执行"scp -r /opt/module/hadoop-3.1.3 atwqf@hadoop103:/opt/module"命令,将hadoop102中/opt/module/hadoop-3.1.3 目录拷贝到hadoop103 上,
执行"scp -r /opt/module/jdk1.8.0_212 atwqf@hadoop104:/opt/module"命令,将hadoop102中/opt/module/jdk1.8.0_212 目录拷贝到hadoop104 上。
另一种方式,也可以在hadoop103上,
执行"scp -r atwqf@hadoop102:/opt/module/hadoop-3.1.3 atwqf@hadoop104:/opt/module"命令、
执行"scp -r atwqf@hadoop102:/opt/module/jdk1.8.0_212 atwqf@hadoop104:/opt/module"命令,
可以将hadoop102的jdk和hadoop拷贝到hadoop104上。
命令:rsync
功能:远程同步工具,主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
语法:
rsync -av $pdir/$fname $user@$host:$pdir/$fname
rsync -av 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名
rsync和scp区别:用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。
2、集群分发脚本:先在hadoop102客户机上部署好xsync脚本,命令可以任何路径下都可以使用。执行这个命令同时分发到hadoop103、hadoop104。
命令:xsync
功能:循环复制文件到所有节点的相同目录下。
语法:xsync 要同步的文件名称
- 2.1. xsync脚本。
执行"vim /home/atwqf/bin/xsync"命令,在/home/atwqf/bin目录下创建xsync文件。
bash
#!/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
- 2.2. 修改脚本xsync具有执行权限。
执行"chmod +x xsync"命令。
执行"ll"命令,可以看到颜色变了。
- 2.3. 将bin目录下的内容分发到hadoop103、hadoop104上。
执行"xsync /home/atwqf/bin/"命令。
- 在hadoop103上可以想看到xsync命令已经传送过去。
- 在hadoop104上可以想看到xsync命令已经传送过去。
- 2.4. 分发环境变量配置到hadoop103、hadoop104上。
执行"xsync /etc/profile.d/my_env.sh"命令(root所有者)。
- 在atwqf用户下,执行"xsync /etc/profile.d/my_env.sh"命令会报错
failed: Permission denied
。
- 在atwqf用户,下执行"sudo xsync /etc/profile.d/my_env.sh"命令会报错
sudo: xsync: command not found
。
原因:使用sudo相当于现在在root用户下,现在 xsync 命令是在/home/atwqf/bin路径下,root用户找不到这个路径,因此会报错,所以在atwqf用户下执行"sudo /home/atwqf/bin/xsync /etc/profile.d/my_env.sh"命令才可以(写清楚xsync命令存放的路径。)
- 2.5. 在hadoop103、hadoop104上,执行"cat /etc/profile.d/my_env.sh"命令查看是否分发成功。
- 2.6. 在hadoop103、hadoop104服务器上,执行"source /etc/profile"命令,让其的环境变量生效。
3、配置ssh,无密登录。
命令:ssh
功能:无密登录别的服务器。
语法:ssh 另一台电脑的IP地址
服务器间使用ssh免密登录的过程:
- 3.1. 要实现hadoop102服务器上可以免密登录hadoop103、hadoop104。
在hadoop102上,执行"ssh-keygen -t rsa"命令,生成公钥和私钥。
- 3.2. 将公钥拷贝到要免密登录的hadoop103、hadoop104服务器上。
在hadoop102上,执行"ssh-copy-id hadoop102"将公钥拷贝到要免密登录的自己身上。
在hadoop102上,执行"ssh-copy-id hadoop103"将公钥拷贝到要免密登录的hadoop103上。
在hadoop102上,执行"ssh-copy-id hadoop104"将公钥拷贝到要免密登录的hadoop104上。
同理,如果想在hadoop103对hadoop102/hadoop104服务器进行免密登录的话,在hadoop103服务器上执行上述语句。- 3.3. 执行完成3.2.后,在hadoop102上,可以无密登录hadoop103。
执行"ssh hadoop103"命令。
- 3.4. 退出。
执行"exit"命令。
- 3.5. 在/home/atwqf路径下,查看该路径下所有的文件,包括隐藏文件。
执行"ls -al"命令。
- .ssh文件夹下(~/.ssh)的文件功能解释
目录名 | 说明 |
---|---|
known_hosts | 记录 ssh 访问过计算机的公钥(public key) |
id_rsa | 生成的私钥 |
id_rsa.pub | 生成的公钥 |
authorized_keys | 存放授权过的无密码登录服务器公钥 |
- 3.6. 查看曾经访问过的hadoop102的服务器。
执行"cat known_hosts"命令。
- 3.7. 查看允许哪些服务器来免密登录我自己。
执行"cat authorized_keys"命令。
配置ssh免密登录后,xsync分发脚本可以不用输密码了。
注意:
ssh配置是在atwqf用户下进行配置的,所以在root用户下是无效的,要重新根据上面流程配置。
七、配置集群
1、集群部署规划
- NameNode 、ResourceManager、SecondaryNameNode 不要安装在同一台服务器。
hadoop102 | hadoop103 | hadoop104 | |
---|---|---|---|
HDFS | NameNode DataNode | DataNode | SecondaryNameNode DataNode |
YARN | NodeManager | ResourceManager NodeManager | NodeManager |
2、配置文件
-
配置文件说明:Hadoop配置文件分两类:默认配置文件和自定义配置文件,只有用户想修改某一默认配置值时,才需要修改自定义配置文件,更改相应属性值。
-
- 默认配置文件:
要获取的默认文件 | 文件存放在Hadoop的jar包中的位置 |
---|---|
[core-default.xml] | hadoop-common-3.1.3.jar/core-default.xml |
[hdfs-default.xml] | hadoop-hdfs-3.1.3.jar/hdfs-default.xml |
[yarn-default.xml] | hadoop-yarn-common-3.1.3.jar/yarn-default.xml |
[mapred-default.xml] | hadoop-mapreduce-client-core-3.1.3.jar/mapred-default.xml |
-
- 自定义配置文件:core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml 四个配置文件存放在
$HADOOP_HOME/etc/hadoop 这个路径上,用户可以根据项目需求重新进行修改配置。
- 自定义配置文件:core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml 四个配置文件存放在
核心配置文件:core-site.xml
- 1、执行"cd $HADOOP_HOME/etc/hadoop"命令,来到存放核心配置文件的。
- 2、执行"vim core-site.xml"命令,写入以下内容:
xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定 NameNode 的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:8020</value>
</property>
<!-- 指定 hadoop 数据的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.1.3/data</value>
</property>
<!-- 配置 HDFS 网页登录使用的静态用户为 atwqf -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>atwqf</value>
</property>
<property>
<name>hadoop.proxyuser.atwqf.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.atwqf.groups</name>
<value>*</value>
</property>
</configuration>
HDFS 配置文件:hdfs-site.xml
- 1、执行"cd $HADOOP_HOME/etc/hadoop"命令来到存放HDFS 配置文件的。
- 2、执行"vim hdfs-site.xml"命令,写入以下内容:
xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- nn web 端访问地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop102:9870</value>
</property>
<!-- 2nn web 端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:9868</value>
</property>
</configuration>
YARN 配置文件:yarn-site.xml
- 1、执行"cd $HADOOP_HOME/etc/hadoop"命令来到存放YARN 配置文件的。
- 2、执行"vim yarn-site.xml"命令,写入以下内容:
xml
<?xml version="1.0"?>
<configuration>
<!-- 指定 MR 走 shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定 ResourceManager 的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop103</value>
</property>
<!-- 环境变量的继承 -->
<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_MAP
RED_HOME</value>
</property>
</configuration>
MapReduce 配置文件: mapred-site.xml
- 1、执行"cd $HADOOP_HOME/etc/hadoop"命令来到存放MapReduce 配置文件的。
- 2、执行"vim mapred-site.xml"命令,写入以下内容:
xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定 MapReduce 程序运行在 Yarn 上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.1.3</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.1.3</value>
</property>
</configuration>
3、在hadoop102上,分发配置好的Hadoop配置文件到hadoop103、hadoop104上。
- 执行"xsync /opt/module/hadoop-3.1.3/etc/hadoop"命令。
- 在hadoop103和hadoop104上查看文件分发情况。
4、配置workers
- 4.1. 执行"vim /opt/module/hadoop-3.1.3/etc/hadoop/workers"命令,增加下面内容:
hadoop102
hadoop103
hadoop104
注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。
- 4.2. 在hadoop102上,分发配置好的workers配置文件到hadoop103、hadoop104上。
执行"xsync /opt/module/hadoop-3.1.3/etc"命令。
- 4.3. 在hadoop103和hadoop104上查看workers配置文件分发情况。
八、群起并测试集群
- 群起集群
0、如果集群是第一次启动,需要在hadoop102节点初始化NameNode。
- 执行"hdfs namenode -format"命令。
初始化完成后,"/opt/module/hadoop-3.1.3"路径下多了logs和data。
1、在hadoop102上启动hdfs,"/opt/module/hadoop-3.1.3"路径下,执行"sbin/start-dfs.sh"命令。
hadoop102
hadoop103
hadoop104
Web端查看HDFS的NameNode。
- 1、浏览器中输入:http://hadoop102:9870
- 2、查看HDFS上存储的数据信息
2、在hadoop103上启动YARN,"/opt/module/hadoop-3.1.3"路径下执行"sbin/start-yarn.sh"命令。
hadoop103
hadoop102
hadoop104
Web端查看YARN的ResourceManager。
- 1、浏览器中输入:http://hadoop103:8088
- 2、查看YARN上存储的Job信息(有任务运行的时候才有显示)
- 集群测试
1、上传文件
- 创建文件夹
执行"hadoop fs -mkdir /wcinput"命令,在HDFS的NameNode下新建文件夹wcinput。
- 上传小文件
执行"hadoop fs -put wcinput/word.txt /wcinput"命令,将/opt/module/hadoop-3.1.3/wcinput/word.txt文件上传到HDFS的NameNode下新建文件夹wcinput下。
- 上传大文件
执行"hadoop fs -put /opt/software/jdk-8u212-linux-x64.tar.gz /"命令。
2、上传文件后查看文件存放在什么位置
- 查看 HDFS 文件存储路径
执行"/opt/module/hadoop-3.1.3/data/dfs/data/current/BP-171723331-192.168.40.102-1627085800814/current/finalized/subdir0/subdir18"命令。
- 查看 HDFS 在磁盘存储文件内
执行"cat blk_1073754824"命令 。
3、拼接
- 执行"cat blk_1073754825 >> tmp.tar.gz"命令。
- 执行"cat blk_1073754826 >> tmp.tar.gz"命令。
- 执行"tar -zxvf tmp.tar.gz"命令解压到当前路径,就是一个jdk1.8.0_212。
4、hadoop具有高可用性,任何一个服务器挂了之后,还有2份副本帮忙存储。
在"http://hadoop102:9870"网页上可以看到"jdk-8u212-linux-x64.tar.gz"文件有3份副本。
hadoop102
hadoop103
hadoop104
5、执行wordcount 程序。
- 执行"hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /wcinput /output"命令。注意:输入、输出路径也要是集群的路径。
程序执行完成后,可以来到HDFS查看结果。
执行任务时可以在yarn上看到程序运行的进程。
点击history,出现下面的页面,希望看到运行的历史状态,需要配置历史服务器。
九、配置历史服务器
为了查看程序的历史运行情况,需要配置一下历史服务器,具体配置步骤如下:
1、配置mapred-site.xml,执行"vim mapred-site.xml"命令,打开文件添加如下配置:
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>
2、分发配置到hadoop103、hadoop104上。
- 执行"xsync $HADOOP_HOME/etc/hadoop/yarn-site.xml"命令。
3、先执行"jps"命令,查看yarn启动了没有,
如果没有启动的话,就先在hadoop103上,执行"sbin/start-yarn.sh"命令启动,
在hadoop102上,执行"mapred --daemon start historyserver"命令,启动历史服务器。
4、查看历史服务器是否启动。
- 执行"jps"命令。
5、配置完后,测试。
- 执行"hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /wcinput /wcoutput"命令。
点击history,出现下面的页面:
点击logs,出现下面的页面,希望查看具体的日志信息,方便出现bug时候可以定位到具体错误,因此需要配置日志的聚集显示。
十、配置日志的聚集
为了查看程序的运行日志,需要配置一下日志聚集,具体配置步骤如下:
1、配置yarn-site.xml,执行"vim yarn-site.xml"命令打开文件加入如下配置:
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>
2、分发配置到hadoop103、hadoop104。
- 执行"xsync $HADOOP_HOME/etc/hadoop/yarn-site.xml"命令。
3、因为更改了yarn配置,所以需要关闭重启。
- 在hadoop102上,执行"mapred --daemon stop historyserver"命令关闭HistoryServer。
- 在hadoop103上,执行"sbin/stop-yarn.sh"命令,关闭 NodeManager、ResourceManager。
- 在hadoop103上,执行"sbin/start-yarn.sh"命令,启动 NodeManager、ResourceManager。
- 在hadoop102上,执行"mapred --daemon start historyserver"命令开启HistoryServer。
4、配置完后,测试。
- 在$HADOOP_HOME路径下,执行"hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /wcinput /wcoutput1"。
十一、集群启动/停止方式总结
- 方法一:各个模块分开启动/停止(前提是配置ssh)
1、在hadoop102的$HADOOP_HOME路径下,执行 "sbin/start-dfs.sh" / "sbin/stop-dfs.sh" 命令,整体启动/停止HDFS。
2、在hadoop103的$HADOOP_HOME路径下,执行 "sbin/start-yarn.sh" / "sbin/stop-yarn.sh" 命令,整体启动/停止YARN。
- 方法二:各个服务组件逐一启动/停止
1、在hadoop102的$HADOOP_HOME路径下,执行"bin/hdfs --daemon start/stop namenode/datanode/secondarynamenode"命令,分别启动/停止HDFS组件。
2、在hadoop103的$HADOOP_HOME路径下,执行"bin/yarn --daemon start/stop resourcemanager/nodemanager"命令,启动/停止YARN。
注意:
根据每个集群部署规划在对应的服务器执行启动或者停止命令。
- 方法三:Hadoop集群启停脚本(包含HDFS,Yarn,Historyserver):myhadoop.sh
1、执行"cd /home/atwqf/bin"命令。
2、执行"vim myhadoop.sh"命令,写入如下内容:
bash
#!/bin/bash
if [ $# -lt 1 ]
then
echo "No Args Input..."
exit ;
fi
case $1 in
"start")
echo " =================== 启动 hadoop 集群 ==================="
echo " --------------- 启动 hdfs ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/start-dfs.sh"
echo " --------------- 启动 yarn ---------------"
ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh"
echo " --------------- 启动 historyserver ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon start
historyserver"
;;
"stop")
echo " =================== 关闭 hadoop 集群 ==================="
echo " --------------- 关闭 historyserver ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon stop
historyserver"
echo " --------------- 关闭 yarn ---------------"
ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh"
echo " --------------- 关闭 hdfs ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh"
;;
*)
echo "Input Args Error..."
;;
esac
3、保存后退出,然后执行"chmod +x myhadoop.sh"命令,赋予脚本执行权限。
4、分发脚本到hadoop103、hadoop104服务器上,保证自定义脚本在三台服务器上都可以使用。
- 执行"xsync /home/atwqf/bin/myhadoop.sh"命令。
hadoop103
hadoop104
5、配置完后,测试。
- 执行"myhadoop.sh start"命令启动hadoop集群。
- 执行"myhadoop.sh stop"命令停止hadoop集群。
十二、其他常用脚本
- 查看三台服务器Java进程脚本
1、执行"cd /home/atwqf/bin"命令。
2、执行"vim jpsall"命令,写入如下内容:
bash
#!/bin/bash
for host in hadoop102 hadoop103 hadoop104
do
echo =============== $host ===============
ssh $host jps
done
3、 保存后退出,然后执行"chmod +x jpsall"命令,赋予脚本执行权限。
4、分发脚本到hadoop103、hadoop104服务器上,保证自定义脚本在三台服务器上都可以使用。
- 执行"xsync /home/atwqf/bin"命令。
hadoop103
hadoop104
5、配置完后,测试。
- 执行"jpsall"命令,可以查看到所有服务器的jps进程。
十三、集群时间同步
集群时间同步:找一个机器,作为时间服务器,所有的机器与这台集群时间进行定时的同步。以hadoop102为时间服务器,hadoop103、hadoop104跟它对齐。
- 集群时间同步配置
1、在hadoop102上,查看所有节点ntpd服务状态和开机自启动状态。
- 执行"sudo systemctl status ntpd"命令。
- 执行"sudo systemctl start ntpd"命令。
- 执行"sudo systemctl is-enabled ntpd"命令。
2、在hadoop102上,执行" sudo vim /etc/ntp.conf " 命令打开hadoop102的ntp.conf的配置文件,根据下面三点进行修改。
- 授权 192.168.10.0-192.168.10.255 网段上的所有机器可以从这台机器上查询和同步时间,
将#restrict 192.168.10.0 mask 255.255.255.0 nomodify notrap
修改为
restrict 192.168.10.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 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
4、在hadoop102 的/etc/sysconfig/ntpd 文件添加"SYNC_HWCLOCK=yes",让硬件时间与系统时间一起同步。
- 执行"sudo vim /etc/sysconfig/ntpd""命令,添加"SYNC_HWCLOCK=yes"。
5、重新启动 ntpd 服务
- 执行"sudo systemctl start ntpd"命令。
6、设置 ntpd 服务开机启动
- 执行"sudo systemctl enable ntpd"命令。
7、其他机器配置(hadoop103、hadoop104)
- 关闭所有节点上 ntp 服务和自启动
执行"sudo systemctl stop ntpd"命令。
执行"sudo systemctl disable ntpd"命令。
hadoop103
hadoop104
- 在其他机器(hadoop103、hadoop104)配置 1 分钟与时间服务器同步一次。
执行"sudo crontab -e"命令。
编写定时任务如下:
*/1 * * * * /usr/sbin/ntpdate hadoop102
hadoop103、hadoop104上
- 修改任意机器时间
执行" sudo date -s "2024-07-01 11:11:11" "命令。- 1 分钟后查看机器是否与时间服务器同步
执行" sudo date "命令。
生产环境:如果服务器能连接外网,不需要时间同步,浪费集群性能;如果服务器连接不了外网,需要时间同步。