尚硅谷大数据开发Day02

这个博客是学习尚硅谷大数据课程所作的笔记,课程原地址可以访问https://www.bilibili.com/video/BV1Qp4y1n7EN?p=7&spm_id_from=pageDriver,感谢尚硅谷免费提供的课程资料,同时感谢尚硅谷大海老师的讲解。

第 1 章 Hadoop 概述

1.1 Hadoop 是什么

1)Hadoop是一个由Apache基金会所开发的分布式系统基础架构。

2)主要解决,海量数据的存储和海量数据的分析计算问题

3)广义上来说,Hadoop通常是指一个更广泛的概念——Hadoop生态圈。

1.2 Hadoop 发展历史(了解)

1)Hadoop创始人Doug Cutting,为 了实 现与Google类似的全文搜索功能,他在Lucene框架基础上进行优 化升级,查询引擎和索引引擎。 Hadoop创始人Doug Cutting

2)2001年年底Lucene成为Apache基金会的一个子项目。

3)对于海量数据的场景,Lucene框 架面 对与Google同样的困难,存 储海量数据困难,检 索海 量速度慢。

4)学习和模仿Google解决这些问题的办法 :微型版Nutch。

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

6)2003-2004年,Google公开了部分GFS和MapReduce思想的细节,以此为基础Doug Cutting等人用 了2年业余时间实现了DFS和MapReduce机制,使Nutch性能飙升。

7)2005 年Hadoop 作为 Lucene的子项目 Nutch的一部分正式引入Apache基金会。

8)2006 年 3 月份,Map-Reduce和Nutch Distributed File System (NDFS)分别被纳入到 Hadoop 项目 中,Hadoop就此正式诞生,标志着大数据时代来临。

9)名字来源于Doug Cutting儿子的玩具大象

1.3 Hadoop 三大发行版本(了解)

 

Hadoop 三大发行版本:Apache、Cloudera、Hortonworks。 Apache 版本最原始(最基础)的版本,对于入门学习最好。2006

Cloudera 内部集成了很多大数据框架,对应产品 CDH。2008

Hortonworks 文档较好,对应产品 HDP。2011

Hortonworks 现在已经被 Cloudera 公司收购,推出新的品牌 CDP。

1.4 Hadoop 优势(4 高)

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

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

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

 

4)高容错性:能够自动将失败的任务重新分配。 Hadoop102 Hadoop103 Hadoop104 Hadoop101 单台服务 器工作 计算任务 集群工作 计算子任务 计算子任务

1.5 Hadoop 组成(面试重点)

 

1.5.1 HDFS 架构概述

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

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

2)DataNode(dn):在本地文件系统存储文件块数据,以及块数据的校验和。相当于具体内容。

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

1.5.2 YARN 架构概述

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

 

1.5.3 MapReduce 架构概述

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

1)Map 阶段并行处理输入数据

2)Reduce 阶段对 Map 结果进行汇总

 

1.5.4 HDFS、YARN、MapReduce 三者关系

DataNode负责数据存储

NameNode相当于一个目录,告诉别人相关内容存储在那个具体的数据快上。

SecondaryNameNode 2NN 相当于秘书,协助NameNode ,当NameNode发生故障的时候,2NN协助NameNode恢复数据。

YARN协调整个系统的资源。

HDFS分布式文件存储系统,存储大数据。

MapReduce 大数据处理与计算。

1.6 大数据技术生态体系

图中涉及的技术名词解释如下: 1)Sqoop:Sqoop 是一款开源的工具,主要用于在 Hadoop、Hive 与传统的数据库(MySQL) 间进行数据的传递,可以将一个关系型数据库(例如 :MySQL,Oracle 等)中的数据导进 到 Hadoop 的 HDFS 中,也可以将 HDFS 的数据导进到关系型数据库中。

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

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

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

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

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

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

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

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

1.7 推荐系统框架图

 

SS购买海狗人参丸,Nginx采集数据传到服务器端。这种数据通常用日志存储。

Flume采集日志数据。之后传到Kafka消息队列。Spark Streaming  Flink 实时计算

之后将计算后的传到分析结果数据库或分析结果文件。

最后Tomcat推荐业务根据计算结果,个性化推荐。

第 2 章 Hadoop 运行环境搭建(开发重点)

 

2.1 模板虚拟机环境准备

处理器数量一般选择2,处理器数量和内核数目乘虚拟机数目不超过你电脑cpu的线程数,比如我的电脑是12线程的,预备开两个虚拟机,加上本身的系统。一共三个系统。3*4=12

之后一路默认

建议分50g

建议放到专门的文件夹中。

点击CD

CTRL+ALT进行鼠标切换,从虚拟机切换到外部设备

之后会进行安装,

软件安装的时候建议选择 桌面,

点完成

点+号


之后修改文件系统

继续点击+

存储崩溃的数据

可以选择启用和不启用

修改主机名称,打开网络设置

配置完成,点击安装

设置密码123456

三个地方需要配置IP地址

vm配置,Hadoop100配置 window10配置

vm配置IP

点更改设置。

NAT设置

 配置win10

更改适配器

配置虚拟机

将BOOTPROTO改成static 静态ip

增加静态ip的设置

修改主机名称:

主机映射

例如,现在将主机IP设置成196.168.10.100,后续需要更改的话,需要将全局 的IP 都进行修改。不妨进行主机名称映射,相当于定义一个名称变量

之后重启

查看相关配置

2.2远程操作

 

安装模板虚拟机,IP 地址 192.168.10.100、主机名称 hadoop100、内存 4G、硬盘 50G

XShell配置

修改windows主机映射文件

修改hosts文件,

建议先将相关文件烤出,修改完成之后在进行拷入。

下面进行Hadoop安装

1)hadoop100 虚拟机配置要求如下(本文 Linux 系统全部以 CentOS-7.5-x86-1804 为例)

(1)使用 yum 安装需要虚拟机可以正常上网,yum 安装前可以先测试下虚拟机联网情 况

[root@hadoop100 ~]# ping www.baidu.com
PING www.baidu.com (14.215.177.39) 56(84) bytes of data.
64 bytes from 14.215.177.39 (14.215.177.39): icmp_seq=1 
ttl=128 time=8.60 ms
64 bytes from 14.215.177.39 (14.215.177.39): icmp_seq=2 
ttl=128 time=7.72 ms

(2)安装 epel-release

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

yum install -y epel-release

(3)注意:如果 Linux 安装的是最小系统版,还需要安装如下工具;如果安装的是 Linux 桌面标准版,不需要执行如下操作 ➢ net-tool:工具包集合,包含 ifconfig 等命令 [root@hadoop100 ~]# yum install -y net-tools ➢ vim:编辑器 [root@hadoop100 ~]# yum install -y vim

(4)关闭防火墙,关闭防火墙开机自启

只需要在外部网络建立防火墙

[root@hadoop100 ~]# systemctl stop firewalld
[root@hadoop100 ~]# systemctl disable firewalld.service

3)创建 atguigu 用户,并修改 atguigu 用户的密码 [root@hadoop100 ~]# useradd atguigu [root@hadoop100 ~]# passwd atguigu

4)配置 atguigu 用户具有 root 权限,方便后期加 sudo 执行 root 权限的命令

[root@hadoop100 ~]# vim /etc/sudoers

修改/etc/sudoers 文件,在%wheel 这行下面添加一行,如下所示:

## Allow root to run any commands anywhere
root ALL=(ALL) ALL
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
atguigu ALL=(ALL) NOPASSWD:ALL

注意:atguigu 这一行不要直接放到 root 行下面,因为所有用户都属于 wheel 组,你先 配置了 atguigu 具有免密功能,但是程序执行到%wheel 行时,该功能又被覆盖回需要 密码。所以 atguigu 要放到%wheel 这行下面。

5)在/opt 目录下创建文件夹,并修改所属主和所属组

(1)在/opt 目录下创建 module、software 文件夹

[root@hadoop100 ~]# mkdir /opt/module
[root@hadoop100 ~]# mkdir /opt/software

(2)修改 module、software 文件夹的所有者和所属组均为 atguigu 用户

[root@hadoop100 ~]# chown atguigu:atguigu /opt/module 
[root@hadoop100 ~]# chown atguigu:atguigu /opt/software

(3)查看 module、software 文件夹的所有者和所属组

[root@hadoop100 ~]# cd /opt/
[root@hadoop100 opt]# ll
总用量 12
drwxr-xr-x. 2 atguigu atguigu 4096 5 月 28 17:18 module
drwxr-xr-x. 2 root root 4096 9 月 7 2017 rh
drwxr-xr-x. 2 atguigu atguigu 4096 5 月 28 17:18 software

6)卸载虚拟机自带的 JDK

注意:如果你的虚拟机是最小化安装不需要执行这一步。

[root@hadoop100 ~]# rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps

➢ rpm -qa:查询所安装的所有 rpm 软件包

➢ grep -i:忽略大小写

➢ xargs -n1:表示每次只传递一个参数

➢ rpm -e –nodeps:强制卸载软件

7)重启虚拟机 [root@hadoop100 ~]# reboot 2

2.2 克隆虚拟机

1)利用模板机 hadoop100,克隆三台虚拟机:hadoop102 hadoop103 hadoop104

2)修改克隆机 IP,以下以 hadoop102 举例说明

克隆机需要修改IP地址,主机名

管理->克隆

修改主机Ip和主机名。

2.3 在 hadoop102 安装 JDK

1)卸载现有 JDK 注意:安装 JDK 前,一定确保提前删除了虚拟机自带的 JDK。详细步骤见问文档 3.1 节 中卸载 JDK 步骤。

2)用 XShell 传输工具将 JDK 导入到 opt 目录下面的 software 文件夹下面

3)解压 JDK 到/opt/module 目录下

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

4)解压 JDK 到/opt/module 目录下

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

5)配置 JDK 环境变量

(1)新建/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

(2)保存后退出

:wq

(3)source 一下/etc/profile 文件,让新的环境变量 PATH 生效

 source /etc/profile

6)测试 JDK 是否安装成功
java -version

2.4 在 hadoop102 安装 Hadoop

1)进入到 Hadoop 安装包路径下

cd /opt/software/

2)解压安装文件到module下面

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

3)查看是否解压成功

ls /opt/module/hadoop-3.1.3

4)将 Hadoop 添加到环境变量

(1)获取 Hadoop 安装路径

pwd/opt/module/hadoop-3.1.3

(2)打开/etc/profile.d/my_env.sh 文件

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

在 my_env.sh 文件末尾添加如下内容:(shift+g)

#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

保存并退出: :wq

(3)让修改后的文件生效

source /etc/profile

6)测试是否安装成功

hadoop version Hadoop 3.1.3

7)重启(如果 Hadoop 命令不能用再重启虚拟机)

 sudo reboot

2.5 Hadoop 目录结构

1)查看 Hadoop 目录结构

[atguigu@hadoop102 hadoop-3.1.3]$ ll
总用量 52
drwxr-xr-x. 2 atguigu atguigu 4096 5 月 22 2017 bin
drwxr-xr-x. 3 atguigu atguigu 4096 5 月 22 2017 etc
drwxr-xr-x. 2 atguigu atguigu 4096 5 月 22 2017 include
drwxr-xr-x. 3 atguigu atguigu 4096 5 月 22 2017 lib
drwxr-xr-x. 2 atguigu atguigu 4096 5 月 22 2017 libexec
-rw-r--r--. 1 atguigu atguigu 15429 5 月 22 2017 LICENSE.txt
-rw-r--r--. 1 atguigu atguigu 101 5 月 22 2017 NOTICE.txt
-rw-r--r--. 1 atguigu atguigu 1366 5 月 22 2017 README.txt
drwxr-xr-x. 2 atguigu atguigu 4096 5 月 22 2017 sbin
drwxr-xr-x. 4 atguigu atguigu 4096 5 月 22 2017 share

2)重要目录

(1)bin 目录:存放对 Hadoop 相关服务(hdfs,yarn,mapred)进行操作的脚本

(2)etc 目录:Hadoop 的配置文件目录,存放 Hadoop 的配置文件

(3)lib 目录:存放 Hadoop 的本地库(对数据进行压缩解压缩功能)

(4)sbin 目录:存放启动或停止 Hadoop 相关服务的脚本

(5)share 目录:存放 Hadoop 的依赖 jar 包、文档、和官方案例

第 3 章 Hadoop 运行模式

1)Hadoop 官方网站:http://hadoop.apache.org/

2)Hadoop 运行模式包括:本地模式、伪分布式模式以及完全分布式模式。

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

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

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

3.1 本地运行模式(官方 WordCount)

 

1)创建在 hadoop-3.1.3 文件下面创建一个 wcinput 文件夹

mkdir wcinput

2)在 wcinput 文件下创建一个 word.txt 文件

cd wcinput

3)编辑 word.txt 文件

vim word.txt

插入相关内容

hadoop yarn
hadoop mapreduce
atguigu
atguigu

4)回到 Hadoop 目录/opt/module/hadoop-3.1.3

5)执行程序

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

6)查看结果

cat wcoutput/part-r-00000

看到如下结果:

atguigu 2

hadoop 2

mapreduce 1

yarn 1

统计词频

3.2 完全分布式运行模式(开发重点)

 

分析: 1)准备 3 台客户机(关闭防火墙、静态 IP、主机名称)

2)安装 JDK

3)配置环境变量

4)安装 Hadoop

5)配置环境变量

6)配置集群

7)单点启动

8)配置 ssh

9)群起并测试集群

3.2.1 虚拟机准备

详见 2.1、2.2 两节。

3.2.2 编写集群分发脚本 xsync

将hadoop102的jdk hadoop分发到其他两台集群上

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

(2)基本语法 scp -r $pdir/$fname $user@$host:$pdir/$fname 命令 递归 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称

(3)案例实操 ➢ 前提:在 hadoop102、hadoop103、hadoop104 都已经创建好的/opt/module、 /opt/software 两个目录,并且已经把这两个目录修改为 atguigu:atguigu

sudo chown atguigu:atguigu -R 
/opt/module

(a)在 hadoop102 上,将 hadoop102 中/opt/module/jdk1.8.0_212 目录拷贝到 hadoop103 上。

scp -r /opt/module/jdk1.8.0_212 atguigu@hadoop103:/opt/module

(b)在 hadoop103 上,将 hadoop102 中/opt/module/hadoop-3.1.3 目录拷贝到 hadoop103 上。

scp -r atguigu@hadoop102:/opt/module/hadoop-3.1.3 /opt/module/

(c)在 hadoop103 上操作,将 hadoop102 中/opt/module 目录下所有目录拷贝到 hadoop104 上。

scp -r 
atguigu@hadoop102:/opt/module/*
atguigu@hadoop104:/opt/module

2)rsync 远程同步工具

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

rsync 和 scp 区别:用 rsync 做文件的复制要比 scp 的速度快,rsync 只对差异文件做更 新。scp 是把所有文件都复制过去。

(1)基本语法 rsync -av $pdir/$fname $user@$host:$pdir/$fname 命令 选项参数 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称 选项参数说明

(2)案例实操 (a)删除 hadoop103 中/opt/module/hadoop-3.1.3/wcinput [atguigu@hadoop103 hadoop-3.1.3]$ rm -rf wcinput/

(b)同步 hadoop102 中的/opt/module/hadoop-3.1.3 到 hadoop103 [atguigu@hadoop102 module]$ rsync -av hadoop-3.1.3/ atguigu@hadoop103:/opt/module/hadoop-3.1.3/

3)xsync 集群分发脚本

(1)需求:循环复制文件到所有节点的相同目录下

(2)需求分析:

     (a)rsync 命令原始拷贝: rsync -av /opt/module atguigu@hadoop103:/opt/

   (b)期望脚本: xsync 要同步的文件名称

3)xsync 集群分发脚本 (1)需求:循环复制文件到所有节点的相同目录下 (2)需求分析: (a)rsync 命令原始拷贝: rsync -av /opt/module atguigu@hadoop103:/opt/ (b)期望脚本: xsync 要同步的文件名称

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

(3)脚本实现 (a)在/home/atguigu/bin 目录下创建 xsync 文件

[atguigu@hadoop102 opt]$ cd /home/atguigu

[atguigu@hadoop102 ~]$ mkdir bin

[atguigu@hadoop102 ~]$ cd bin

[atguigu@hadoop102 bin]$ 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

(b)修改脚本 xsync 具有执行权限

chmod +x xsync

(c)测试脚本

xsync /home/atguigu/bin

(d)将脚本复制到/bin 中,以便全局调用

sudo cp xsync /bin/

(e)同步环境变量配置(root 所有者)

sudo ./bin/xsync /etc/profile.d/my_env.sh

注意:如果用了 sudo,那么 xsync 一定要给它的路径补全。

让环境变量生效  source /etc/profile [atguigu@hadoop104 opt]$ source /etc/profile

3.2.3 SSH 无密登录配置

免密原理

1)配置 ssh (1)基本语法 ssh 另一台电脑的 IP 地址

(2)ssh 连接时出现 Host key verification failed 的解决方法

[atguigu@hadoop102 ~]$ ssh hadoop103 ➢ 如果出现如下内容 Are you sure you want to continue connecting (yes/no)?

➢ 输入 yes,并回车 (3)退回到 hadoop102 [atguigu@hadoop103 ~]$ exit

2)无密钥配置

(1)免密登录原理

(2)生成公钥和私钥

 pwd /home/atguigu/.ssh
[atguigu@hadoop102 .ssh]$ ssh-keygen -t rsa

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

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

[atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop102
[atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop103
[atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop104

注意:

还需要在 hadoop103 上采用 atguigu 账号配置一下无密登录到 hadoop102、hadoop103、 hadoop104 服务器上。

还需要在 hadoop104 上采用 atguigu 账号配置一下无密登录到 hadoop102、hadoop103、 hadoop104 服务器上。

还需要在 hadoop102 上采用 root 账号,配置一下无密登录到 hadoop102、hadoop103、 hadoop104;

在102 登录103

ssh hadoop103

3).ssh 文件夹下(~/.ssh)的文件功能解释

3.2.4 集群配置

1)集群部署规划

注意:

➢ NameNode 和 SecondaryNameNode 不要安装在同一台服务器

➢ ResourceManager 也很消耗内存,不要和 NameNode、SecondaryNameNode 配置在 同一台机器上。

由于本次只搭建了两个集群

所以:  102负责NameNode  DataNode NodeManager  103负责SecondaryNameNode DataNode ResourceManager

2)配置文件说明

Hadoop 配置文件分两类:默认配置文件和自定义配置文件,只有用户想修改某一默认 配置值时,才需要修改自定义配置文件,更改相应属性值。

3)配置集群

(1)核心配置文件 配置 core-site.xml

cd $HADOOP_HOME/etc/hadoop
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://hadoop102:8020</value>
 </property>
 <!-- 指定 hadoop 数据的存储目录 -->
 <property>
 <name>hadoop.tmp.dir</name>
 <value>/opt/module/hadoop-3.1.3/data</value>
 </property>
 <!-- 配置 HDFS 网页登录使用的静态用户为 atguigu -->
 <property>
 <name>hadoop.http.staticuser.user</name>
 <value>atguigu</value>
 </property>
</configuration>

(2)HDFS 配置文件 配置 hdfs-site.xml [atguigu@hadoop102 hadoop]$ 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>hadoop102:9870</value>
 </property>
<!-- 2nn web 端访问地址-->
 <property>
 <name>dfs.namenode.secondary.http-address</name>
 <value>hadoop104:9868</value>
 </property>
</configuration>

(3)YARN 配置文件 配置 yarn-site.xml [atguigu@hadoop102 hadoop]$ 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>hadoop103</value>
 </property>
 <!-- 环境变量的继承 -->
 <property>
 <name>yarn.nodemanager.env-whitelist</name>
 
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CO
NF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAP
RED_HOME</value>
 </property>
</configuration>

(4)MapReduce 配置文件 配置 mapred-site.xml [atguigu@hadoop102 hadoop]$ vim mapred-site.xm

<?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>
</configuration>

4)在集群上分发配置好的 Hadoop 配置文件 [atguigu@hadoop102 hadoop]$ xsync /opt/module/hadoop3.1.3/etc/hadoop/

5)去 103 和 104 上查看文件分发情况 [atguigu@hadoop103 ~]$ cat /opt/module/hadoop3.1.3/etc/hadoop/core-site.xml [atguigu@hadoop104 ~]$ cat /opt/module/hadoop3.1.3/etc/hadoop/core-site.xml

3.2.5 群起集群

1)配置 workers

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

在该文件中增加如下内容:

hadoop102
hadoop103
hadoop104

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

同步所有节点配置文件

xsync /opt/module/hadoop-3.1.3/etc

2)启动集群

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

$ hdfs namenode -format

(2)启动 HDFS

sbin/start-dfs.sh

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

sbin/start-yarn.sh

(4)Web 端查看 HDFS 的 NameNode

(a)浏览器中输入:http://hadoop102:9870

(b)查看 HDFS 上存储的数据信息

(5)Web 端查看 YARN 的 ResourceManager

(a)浏览器中输入:http://hadoop103:8088

(b)查看 YARN 上运行的 Job 信息

3)集群基本测试

(1)上传文件到集群

➢ 上传小文件

hadoop fs -mkdir /input

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

上传大文件

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

3.2.6 配置历史服务器

 

为了查看程序的历史运行情况,需要配置一下历史服务器。具体配置步骤如下:

1)配置 mapred-site.xml

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>

2)分发配置

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

3)在 hadoop102 启动历史服务器

mapred --daemon start historyserver

4)查看历史服务器是否启动

jps

5)查看 JobHistory

http://hadoop102:19888/jobhistory 

3.2.7 配置日志的聚集

 

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

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

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

开启日志聚集功能具体步骤如下:

1)配置 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>

2)分发配置

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

3)关闭 NodeManager 、ResourceManager 和 HistoryServer

sbin/stop-yarn.sh
mapred --daemon stop historyserver

4)启动 NodeManager 、ResourceManage 和 HistoryServer

start-yarn.sh
mapred --daemon start historyserver

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

hadoop fs -rm -r /output

6)执行 WordCount 程序

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

7)查看日志

(1)历史服务器地址

http://hadoop102:19888/jobhistory

(2)历史任务列表

(3)查看任务运行日志

(4)运行日志详情

3.2.8 集群启动/停止方式总结

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

(1)整体启动/停止 HDFS

start-dfs.sh/stop-dfs.sh

(2)整体启动/停止 YARN

start-yarn.sh/stop-yarn.sh

2)各个服务组件逐一启动/停止

(1)分别启动/停止 HDFS 组件

hdfs --daemon start/stop namenode/datanode/secondarynamenode

(2)启动/停止 YARN

yarn --daemon start/stop resourcemanager/nodemanager

3.2.9 编写 Hadoop 集群常用脚本

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

[atguigu@hadoop102 ~]$ cd /home/atguigu/bin
[atguigu@hadoop102 bin]$ vim myhadoop.sh

➢ 输入如下内容

#!/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

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

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

cd /home/atguigu/bin
vim jpsall
#!/bin/bash
for host in hadoop102 hadoop103 hadoop104
do
 echo =============== $host ===============
 ssh $host jps 
done

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

chmod +x jpsall
xsync /home/atguigu/bin/

3.2.10 常用端口号说明

3.2.11 集群时间同步

 

如果服务器在公网环境(能连接外网),可以不采用集群时间同步,因为服务器会定期 和公网时间进行校准; 如果服务器在内网环境,必须要配置集群时间同步,否则时间久了,会产生时间偏差, 导致集群执行任务时间不同步。

1)需求

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

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

102
sudo systemctl status ntpd
sudo systemctl start ntpd
 sudo systemctl is-enabled ntpd
sudo vim /etc/ntp.conf

(a)修改 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

(b)修改 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

(c)添加 3(当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群中 的其他节点提供时间同步)

server 127.127.1.0
fudge 127.127.1.0 stratum 10

(3)修改 hadoop102 的/etc/sysconfig/ntpd 文件

sudo vim /etc/sysconfig/ntpd

增加内容如下(让硬件时间与系统时间一起同步)

SYNC_HWCLOCK=yes

(4)重新启动 ntpd 服务

sudo systemctl start ntpd

(5)开机启动

sudo systemctl enable ntpd

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

 

(1)关闭所有节点上 ntp 服务和自启动

sudo systemctl stop ntpd 103

sudo systemctl disable ntpd 103

sudo systemctl stop ntpd 104 

sudo systemctl disable ntpd 104

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

sudo crontab -e 编写定时任务如下: */1 * * * * /usr/sbin/ntpdate hadoop102

(3)修改任意机器时间 sudo date -s "2021-9-11 11:11:11"

(4)1 分钟后查看机器是否与时间服务器同步sudo date

猜你喜欢

转载自blog.csdn.net/weixin_41066584/article/details/115281887