Hadoop学习之旅

Hadoop学习之旅

我一口气整™三台云服务器(有钱豪横)

cpucode100 2核 4 G
cpucode101 1核 2 G
cpucode102 2核 4 G

Hadoop 概述

介绍

Hadoop是一个由Apache基金会所开发的分布式系统基础架构
解决 : 海量数据的存储和海量数据的分析计算问题

在这里插入图片描述

Hadoop创始人Doug Cutting

在这里插入图片描述

Google是Hadoop的思想之源( Google在大数据方面的三篇论文)

GFS —> HDFS
Map-Reduce —> MR
BigTable —> HBase

在这里插入图片描述

Hadoop 优势

  • 高可靠性
  • 高扩展性
  • 高效性
  • 高容错性

高可靠性: Hadoop底层维护多个数据副本, 所以即使Hadoop某个计算元素或存储出现故障, 也不会导致数据的丢失

在这里插入图片描述

高扩展性:在集群间分配任务数据, 可方便的扩展数以千计的节点

在这里插入图片描述

高效性:在MapReduce的思想下, Hadoop是并行工作的, 以加快任务处理速度

在这里插入图片描述

高容错性:能够自动将失败的任务重新分配

在这里插入图片描述

Hadoop 组成

在 Hadoop1.x 时 代 ,Hadoop中的MapReduce同时处理业务逻辑运算和资源的调度, 耦合性较大。
在Hadoop2.x时代, 增加了Yarn。 Yarn只负责资 源 的 调 度 ,MapReduce 只负责运算。
Hadoop3.x在组成上没有变化

在这里插入图片描述

HDFS 架构

Hadoop Distributed File System,简称 HDFS,是一个分布式文件系统

  • NameNode(nn) :存储文件的元数据, 如文件名, 文件目录结构, 文件属性( 生成时间、 副本数、文件权限) , 以及每个文件的块列表和块所在的DataNode等

  • DataNode(dn):在本地文件系统存储文件块数据, 以及块数据的校验和

  • Secondary NameNode(2nn): 每隔一段时间对NameNode元数据备份

MapReduce 架构

MapReduce 将计算过程分为两个阶段: Map 和 Reduce

  • Map 阶段并行处理输入数据

  • Reduce 阶段对 Map 结果进行汇总

在这里插入图片描述

YARN 架构

Yet Another Resource Negotiator 简称 YARN ,另一种资源协调者, 是 Hadoop 的资源管理器

  • ResourceManager( RM) :整个集群资源( 内存、 CPU等) 的老大

  • NodeManager( NM) :单个节点服务器资源老大

  • ApplicationMaster( AM) :单个任务运行的老大

  • Container:容器,相当一台独立的服务器,里面封装了任务运行所需要的资源, 如内存、 CPU、磁盘、网络等。

在这里插入图片描述

Note :

  • 客户端可以有多个
  • 集群上可以运行多个 ApplicationMaster
  • 每个 NodeManager 上可以有多个 Container

大数据技术生态体系

在这里插入图片描述

  • Sqoop: Sqoop 是一款开源的工具,主要用于在 Hadoop、 Hive 与传统的数据库(MySQL)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL, Oracle 等)中的数据导进到 Hadoop 的 HDFS 中,也可以将 HDFS 的数据导进到关系型数据库中

  • Flume: Flume 是一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume 支持在日志系统中定制各类数据发送方,用于收集数据

  • Kafka: Kafka 是一种高吞吐量的分布式发布订阅消息系统

  • Spark: Spark 是当前最流行的开源大数据内存计算框架。可以基于 Hadoop 上存储的大数据进行计算

  • Flink: Flink 是当前最流行的开源大数据内存计算框架。 用于实时计算的场景较多

  • Oozie: Oozie 是一个管理 Hadoop 作业(job)的工作流程调度管理系统

  • Hbase: HBase 是一个分布式的、面向列的开源数据库。 HBase 不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库

  • Hive: Hive 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的 SQL 查询功能,可以将 SQL 语句转换为MapReduce 任务进行运行。其优点是学习成本低,可以通过类 SQL 语句快速实现简单的 MapReduce 统计,不必开发专门的 MapReduce 应用,十分适合数据仓库的统计分析

  • ZooKeeper:它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等

推荐系统框架图

在这里插入图片描述

配置服务器

修改服务器名

修改主机名称

vim /etc/hostname

查看主机名称

cat /etc/hostname

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

修改映射 hosts 文件

修改所有服务器的 hosts 文件

修改映射 hosts 文件

vim /etc/hosts

在 cpucode102 上 , 注意 , 云服务必须使用内网ip

xxx.xxx.xxx.xxx cpucode100
xxx.xxx.xxx.xxx cpucode101
内网ip cpucode102

查看映射 hosts 文件

cat /etc/hosts

在这里插入图片描述

安装 epel-release

Extra Packages for Enterprise Linux 是为“红帽系”的操作系统提供额外的软件包,适用于 RHEL、 CentOS 和 Scientific Linux。相当于是一个软件仓库, 大多数 rpm 包在官方 repository 中是找不到的)

yum install -y epel-release

在这里插入图片描述

安装 net-tool

工具包集合,包含 ifconfig 等命令

yum install -y net-tools

安装 vim

编辑器

yum install -y vim

关闭防火墙

systemctl stop firewalld

关闭防火墙开机自启

systemctl disable firewalld.service

卸载服务器自带的 JDK

查看是否有JDK

rpm -qa | grep -i java
  • rpm -qa: 查询所安装的所有 rpm 软件包
  • grep -i:忽略大小写

在这里插入图片描述

删除JDK

rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps
  • xargs -n1:表示每次只传递一个参数
  • rpm -e --nodeps:强制卸载软件

在这里插入图片描述

创建文件夹

在/opt 目录下创建文件夹

cd /opt
mkdir module
mkdir software

在这里插入图片描述

安装JDK

上传文件

在这里插入图片描述

下载 JDK

jdk-8u212-linux-x64.tar.gz

在这里插入图片描述

解压 JDK

到 /opt/module 目录下

tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/

在这里插入图片描述

配置 JDK 环境变量

新建/etc/profile.d/my_env.sh 文件

sudo vim /etc/profile.d/my_env.sh

添加如下内容

#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_212
export PATH=$PATH:$JAVA_HOME/bin

保存后退出

:wq

在这里插入图片描述

让新的环境变量 PATH 生效

source /etc/profile

测试 JDK

是否安装成功

java -version

在这里插入图片描述

安装 Hadoop

下载 Hadoop

hadoop-3.1.3.tar.gz

解压

安装文件到/opt/module 下面

tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/

环境变量

在 my_env.sh 文件末尾添加如下内容

sudo 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

保存并退出

:wq

在这里插入图片描述

修改后的文件生效

source /etc/profile

测试安装

hadoop version

在这里插入图片描述

Hadoop 目录结构

在这里插入图片描述

  • bin 目录 :存放对 Hadoop 相关服务(hdfs, yarn, mapred)进行操作的脚本
  • etc 目录 : Hadoop 的配置文件目录,存放 Hadoop 的配置文件
  • lib 目录 :存放 Hadoop 的本地库(对数据进行压缩解压缩功能)
  • sbin 目录 :存放启动或停止 Hadoop 相关服务的脚本
  • share 目录 :存放 Hadoop 的依赖 jar 包、 文档、 和官方案例

重启服务器

reboot

Hadoop 运行模式

  • 本地模式
  • 伪分布式模式
  • 完全分布式模式

本地模式:单机运行,只是用来演示一下官方案例。 生产环境不用

伪分布式模式: 也是单机运行,但是具备 Hadoop 集群的所有功能, 一台服务器模拟一个分布式的环境。 缺钱的公司用来测试,生产环境不用

完全分布式模式: 多台服务器组成分布式环境。 生产环境使用

本地运行模式(玩具)

演示 官方 WordCount

准备工作

创建文件夹

mkdir wcinput

创建文件

cd wcinput
vim word.txt

文件中输入如下内容

cpucode cpu
code
cpuc cpucode
code
cpu

保存退出: :wq

在这里插入图片描述

执行程序

bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount ./wcinput/ ./wcoutput

在这里插入图片描述

查看结果

cat wcoutput/part-r-00000

在这里插入图片描述

完全分布式运行模式

准备

  • 准备 3 台客户机(关闭防火墙、静态 IP、主机名称)
  • 安装 JDK
  • 配置环境变量
  • 安装 Hadoop
  • 配置环境变量
  • 配置集群
  • 单点启动
  • 配置 ssh
  • 群起并测试集群

scp(secure copy) 安全拷贝

scp 可以实现服务器与服务器之间的数据拷贝(from server1 to server2)

scp -r $pdir/$fname $user@$host:$pdir/$fname
  • scp : 命令
  • -r : 递归
  • $pdir/$fname : 要拷贝的文件路径/名称
  • $user@$host:$pdir/$fname : 目的地用户@主机:目的地路径/名称

note :

在 所有服务器 都要创建好的 /opt/module、/opt/software 两个目录

在 cpucode100 机器上

将 cpucode100 中/opt/module/jdk1.8.0_212 目录拷贝到 cpucode101 上

scp -r /opt/module/jdk1.8.0_212 root@cpucode101:/opt/module/

在这里插入图片描述

在 cpucode101 机器上

将 cpucode100 中/opt/module/hadoop-3.1.3 目录拷贝到 cpucode101 上

scp -r root@cpucode100:/opt/module/hadoop-3.1.3 /opt/module/

在这里插入图片描述

将 cpucode100 中/opt/module 目录下所有目录拷贝到 cpucode102 上

scp -r root@cpucode100:/opt/module/* root@cpucode102:/opt/module/

rsync 远程同步工具

rsync 主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。

rsync 和 scp 区别:

  • rsync 做文件的复制要比 scp 的速度快, rsync 只对差异文件做更新
  • scp 是把所有文件都复制过去
rsync -av $pdir/$fname $user@$host:$pdir/$fname
  • -a 归档拷贝
  • v 显示复制过程

测试

删除

rm -rf wcinput/ wcoutput/

在这里插入图片描述

在 cpucode102

同步 cpucode100 中的/opt/module/* 到 cpucode102

rsync -av root@cpucode100:/opt/module/* /opt/module

在这里插入图片描述

在这里插入图片描述

集群分发脚本 xsync

需求:

循环复制文件到所有节点的相同目录下

需求分析:

  • rsync 命令原始拷贝:
rsync -av /opt/module/* root@cpucode101:/opt/module
  • 期望脚本:xsync 要同步的文件名称

  • 期望脚本在任何路径都能使用(脚本放在声明了全局环境变量的路径)

查看全局环境变量

echo $PATH

在这里插入图片描述

脚本实现

在 /usr/local/sbin/ 目录下创建 xsync 文件

cd /usr/local/sbin/

在这里插入图片描述

编辑

vim xsync
#!/bin/bash

#1. 判断参数个数
if [ $# -lt 1 ]
then
	echo Not Enough Arguement!
	exit;
fi

#2. 遍历集群所有机器
for host in cpucode100 cpucode101 cpucode102
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

在这里插入图片描述

强制保存退出

:wq!

修改脚本 xsync 具有执行权限

chmod 777 xsync

在这里插入图片描述

测试

用了 sudo,那么 xsync 一定要给它的路径补全

sudo /usr/local/sbin/xsync /etc/profile.d/my_env.sh

在这里插入图片描述

查看是否成功

cat /etc/profile.d/my_env.sh

在这里插入图片描述

在这里插入图片描述

让环境变量生效

source /etc/profile

`

SSH 无密登录配置

免密登录原理

在这里插入图片描述

生成公钥和私钥

ssh-keygen -t rsa

敲(三个回车),就会生成两个文件 id_rsa(私钥)、 id_rsa.pub(公钥)

在这里插入图片描述

cd /root/.ssh/

在这里插入图片描述

将公钥拷贝到要免密登录的目标机器上

所有服务器配置

ssh-copy-id cpucode100
ssh-copy-id cpucode101
ssh-copy-id cpucode102

在这里插入图片描述

.ssh

  • known_hosts : 记录 ssh 访问过计算机的公钥(public key)
  • id_rsa : 生成的私钥
  • id_rsa.pub : 生成的公钥
  • authorized_keys : 存放授权过的无密登录服务器公钥

ssh 连接

ssh cpucode100

退回

exit

在这里插入图片描述

无密传输

传输 xsync 脚本

xsync ./xsync

在这里插入图片描述

集群配置

集群部署规划

注意:

  • NameNode 和 SecondaryNameNode 不要安装在同一台服务器
  • ResourceManager 也很消耗内存,不要和 NameNode、 SecondaryNameNode 配置在同一台机器上
cpucode100 cpucode101 cpucode102
HDFS NameNode SecondaryNameNode
DataNode DataNode DataNode
YARN ResourceManager
NodeManager NodeManager NodeManager

配置文件说明

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

自定义配置文件:

四个配置文件存放在 $HADOOP_HOME/etc/hadoop 这个路径上, 用户可以根据项目需求重新进行修改配置

  • core-site.xml
  • hdfs-site.xml
  • yarn-site.xml
  • mapred-site.xml

在这里插入图片描述

配置集群

  • 核心配置文件
  • HDFS 配置文件
  • YARN 配置文件
  • MapReduce 配置文件

核心配置文件

core-site.xml

vim core-site.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://cpucode100:8020</value>
	</property>
	
	<property>
	      <name>dfs.name.dir</name>
	      <value>/opt/module/hadoop-3.1.3/data/namenode</value>
	</property>

	<property>
	      <name>dfs.data.dir</name>
	      <value>/opt/module/hadoop-3.1.3/data/datanode</value>
	</property>

	<!-- 指定 hadoop 数据的存储目录 -->
	<property>
		<name>hadoop.tmp.dir</name>
		<value>/opt/module/hadoop-3.1.3/data</value>
	</property>
	<!-- 配置 HDFS 网页登录使用的静态用户为 cpucode -->
	<property>
		<name>hadoop.http.staticuser.user</name>
		<value>cpucode</value>
	</property>
</configuration>

在这里插入图片描述

HDFS 配置文件

配置 hdfs-site.xml

vim hdfs-site.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>cpucode100:9870</value>
	</property>
	<!-- 2nn web 端访问地址-->
	<property>
		<name>dfs.namenode.secondary.http-address</name>
		<value>cpucode101:9868</value>
	</property>
</configuration>

在这里插入图片描述

YARN 配置文件

配置 yarn-site.xml

vim yarn-site.xml

文件内容 :

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
	<!-- 指定 MR 走 shuffle -->
	<property>
		<name>yarn.nodemanager.aux-services</name>
		<value>mapreduce_shuffle</value>
	</property>
	<!-- 指定 ResourceManager 的地址-->
	<property>
		<name>yarn.resourcemanager.hostname</name>
		<value>cpucode102</value>
	</property>
	<property>
	    <name>yarn.resourcemanager.webapp.address</name>
	    <value>172.17.174.67:8888</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_MAPRED_HOME</value>
	</property>
</configuration>

在这里插入图片描述

MapReduce 配置文件

配置 mapred-site.xml

vim mapred-site.xml

文件内容 :

<?xml version="1.0" encoding="UTF-8"?>
<?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>
	<property>
	    <name>mapreduce.reduce.env</name>
	    <value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.1.3</value>
	</property>
</configuration>

在这里插入图片描述

分发配置好的 Hadoop 配置文件

xsync /opt/module/hadoop-3.1.3/etc/hadoop/

在这里插入图片描述

查看文件分发

cat /opt/module/hadoop-3.1.3/etc/hadoop/core-size.xml

在这里插入图片描述

群起集群

配置 workers

vim /opt/module/hadoop-3.1.3/etc/hadoop/workers

note :
该文件中添加的内容结尾不允许有空格,文件中不允许有空行

内容:

cpucode100
cpucode101
cpucode102

在这里插入图片描述

同步所有节点配置文件

xsync /opt/module/hadoop-3.1.3/etc

在这里插入图片描述

启动集群

如果集群是第一次启动

需要在 cpucode100 节点格式化 NameNode

注意:
格式化 NameNode, 会产生新的集群 id, 导致 NameNode 和 DataNode 的集群 id 不一致,集群找不到已往数据。
如果集群在运行过程中报错,需要重新格式化 NameNode 的话, 一定要先停止 namenode 和 datanode 进程, 并且要删除所有机器的 data 和 logs 目录,然后再进行格式化。

hdfs namenode -format

在这里插入图片描述

启动 HDFS

在这里插入图片描述

./start-dfs.sh

在这里插入图片描述

在配置了 ResourceManager 的节点(cpucode102) 启动 YARN

./start-yarn.sh

查看进程

jps

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

错误 :

but there is no HDFS_NAMENODE_USER defined. Aborting operation.

Web 端查看 HDFS 的 NameNode

http://cpucode100地址:9870

在这里插入图片描述

Web 端查看 YARN 的 ResourceManager

http://cpucode102地址:8888

在这里插入图片描述

集群基本测试

上传文件到集群

上传小文件

创建目录

hadoop fs -mkdir /input

在这里插入图片描述

上传

hadoop fs -put $HADOOP_HOME/wcinput/word.txt /input

在这里插入图片描述

上传大文件

hadoop fs -put  /opt/software/jdk-8u212-linux-x64.tar.gz /

在这里插入图片描述

查看 HDFS 文件存储路径

pwd

在这里插入图片描述

/opt/module/hadoop-3.1.3/data/dfs/data/current/BP-467004637-127.0.0.1-1637042927129/current/finalized/subdir0/subdir0

查看 HDFS 在磁盘存储文件内容

cat blk_1073741825

在这里插入图片描述

拼接

cat blk_1073741826>>tmp.tar.gz
cat blk_1073741827>>tmp.tar.gz

在这里插入图片描述

解压

tar -zxvf tmp.tar.gz

在这里插入图片描述

下载

hadoop fs -get /jdk-8u212-linux-x64.tar.gz ./

在这里插入图片描述

执行 wordcount 程序

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output

在这里插入图片描述

在这里插入图片描述

配置历史服务器

为了查看程序的历史运行情况,需要配置一下历史服务器

配置 mapred-site.xml

vim mapred-size.xml

内容增加

	<!-- 历史服务器端地址 -->
	<property>
		<name>mapreduce.jobhistory.address</name>
		<value>cpucode100:10020</value>
	</property>
	
	<!-- 历史服务器 web 端地址 -->
	<property>
		<name>mapreduce.jobhistory.webapp.address</name>
		<value>cpucode100:19888</value>
	</property>

分发配置

xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml

在这里插入图片描述

启动历史服务器

在 cpucode100

mapred --daemon start historyserver

在这里插入图片描述

查看 JobHistory

http://cpucode100地址:19888/jobhistory

在这里插入图片描述

配置日志的聚集

日志聚集概念:应用运行完成以后,将程序运行日志信息上传到 HDFS 系统上

在这里插入图片描述

日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。

Note:
开启日志聚集功能, 需要重新启动 NodeManager 、 ResourceManager 和 HistoryServer。

配置 yarn-site.xml

vim yarn-site.xml

内容增加

	<!-- 开启日志聚集功能 -->
	<property>
		<name>yarn.log-aggregation-enable</name>
		<value>true</value>
	</property>
	
	<!-- 设置日志聚集服务器地址 -->
	<property>
		<name>yarn.log.server.url</name>
		<value>http://cpucode100:19888/jobhistory/logs</value>
	</property>
	
	<!-- 设置日志保留时间为 7 天 -->
	<property>
		<name>yarn.log-aggregation.retain-seconds</name>
		<value>604800</value>
	</property>

在这里插入图片描述

分发配置

xsync hadoop/

在这里插入图片描述

关闭 NodeManager 、 ResourceManager 和 HistoryServer

在 cpucode102

sbin/stop-yarn.sh

在这里插入图片描述

在 cpucode100

mapred --daemon stop historyserver

在这里插入图片描述

启动 NodeManager 、 ResourceManager 和 HistoryServer

在 cpucode102

./sbin/start-yarn.sh

在这里插入图片描述

在 cpucode100

mapred --daemon start historyserver

在这里插入图片描述

删除 HDFS 上已经存在的输出文件

hadoop fs -rm -r /output

在这里插入图片描述

在这里插入图片描述

执行 WordCount 程序

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output

在这里插入图片描述

查看日志

历史服务器地址

http://cpucode100地址:19888/jobhistory

历史任务列表
在这里插入图片描述

查看任务运行日志

在这里插入图片描述

运行日志详情

在这里插入图片描述

集群启动/停止方式总结

各个模块分开启动/停止(配置 ssh 是前提)

整体启动/停止 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 集群常用脚本

Hadoop 集群启停脚本(包含 HDFS, Yarn, Historyserver): myhadoop.sh

cd /user/local/sbin
vim myhadoop.sh

内容 :

#!/bin/bash

if [ $# -lt 1 ]
then
	echo "No Args Input..."
	exit ;
fi

case $1 in
"start")
	echo " =================== 启动 hadoop 集群 ==================="
	
	echo " --------------- 启动 hdfs ---------------"
	ssh cpucode100 "/opt/module/hadoop-3.1.3/sbin/start-dfs.sh"
	echo " --------------- 启动 yarn ---------------"
	ssh cpucode102 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh"
	echo " --------------- 启动 historyserver ---------------"
	ssh cpucode100 "/opt/module/hadoop-3.1.3/bin/mapred --daemon start historyserver"
;;
"stop")
	echo " =================== 关闭 hadoop 集群 ==================="
	
	echo " --------------- 关闭 historyserver ---------------"
	ssh cpucode100 "/opt/module/hadoop-3.1.3/bin/mapred --daemon stop historyserver"
	echo " --------------- 关闭 yarn ---------------"
	ssh cpucode102 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh"
	echo " --------------- 关闭 hdfs ---------------"
	ssh cpucode100 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh"
;;
*)
	echo "Input Args Error..."
;;
esac

保存后退出,然后赋予脚本执行权限

chmod 777 myhadoop.sh

在这里插入图片描述

测试

myhadoop.sh stop

在这里插入图片描述

 myhadoop.sh start

在这里插入图片描述

查看三台服务器 Java 进程脚本: jpsall

cd /user/local/sbin
vim jpsall

内容 :

#!/bin/bash
for host in cpucode100 cpucode101 cpucode102
do
	echo =============== $host ===============
	ssh $host jps
done

在这里插入图片描述

保存后退出,然后赋予脚本执行权限

chmod 777 jpsall

在这里插入图片描述

发 /user/local/sbin目录,保证自定义脚本在三台机器上都可以使用

xsync /user/local/sbin

在这里插入图片描述

测试

jpsall

在这里插入图片描述

常用端口号说明

端口名称 Hadoop2.x Hadoop3.x
NameNode 内部通信端口 8020 / 9000 8020 / 9000 / 9820
NameNode HTTP UI 50070 9870
MapReduce 查看执行任务端口 8088 8088
历史服务器通信端口 19888 19888

常用的配置文件

Hadoop2.x Hadoop3.x
核心配置文件 core-site.xml core-site.xml
HDFS 配置文件 hdfs-site.xml hdfs-site.xml
YARN 配置文件 yarn-site.xml yarn-site.xml
MapReduce 配置文件 mapred-site.xml mapred-site.xml
slaves workers

集群时间同步

如果服务器在公网环境(能连接外网),可以不采用集群时间同步,因为服务器会定期和公网时间进行校准

如果服务器在内网环境,必须要配置集群时间同步,否则时间久了,会产生时间偏差,导致集群执行任务时间不同步

需求

找一个机器,作为时间服务器,所有的机器与这台集群时间进行定时的同步, 生产环境根据任务对时间的准确程度要求周期同步。 测试环境为了尽快看到效果,采用 1 分钟同步一次。

在这里插入图片描述

时间服务器配置(必须 root 用户)

查看所有节点 ntpd 服务状态和开机自启动状态

sudo systemctl status ntpd
sudo systemctl start ntpd
sudo systemctl is-enabled ntpd

修改 cpucode100 的 ntp.conf 配置文件

sudo vim /etc/ntp.conf

修改内容如下

  • 修改 1(授权 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
  • 修改 2(集群在局域网中,不使用其他互联网上的时间)
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
  • 添加 3(当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群中的其他节点提供时间同步)
server 127.127.1.0
fudge 127.127.1.0 stratum 10
  • 修改 hadoop102 的/etc/sysconfig/ntpd 文件
sudo vim /etc/sysconfig/ntpd
  • 增加内容如下(让硬件时间与系统时间一起同步)
SYNC_HWCLOCK=yes
  • 重新启动 ntpd 服务
sudo systemctl start ntpd
  • 设置 ntpd 服务开机启动
sudo systemctl enable ntpd

其他机器配置(必须 root 用户)

  • 关闭所有节点上(cpucode101, cpucode102) ntp 服务和自启动
sudo systemctl stop ntpd
sudo systemctl disable ntpd

在其他机器(cpucode101, cpucode102) 配置 1 分钟与时间服务器同步一次

sudo crontab -e

编写定时任务如下:

*/1 * * * * /usr/sbin/ntpdate cpucode100

修改任意机器时间

sudo date -s "2021-11-11 11:11:11"

1 分钟后查看机器是否与时间服务器同步

sudo date

猜你喜欢

转载自blog.csdn.net/qq_44226094/article/details/121275790