Bootstrap

24年某马最新Hadoop课程总结文档

Apache Hadoop(重点)

持续更新中。。。

学习目标

大数据生态圈 => 所有的大数据软件都是基于Hadoop的,在实际工作中Hadoop可以解决什么问题?

答:在实际工作中,Hadoop主要用于解决两个问题(海量数据存储 => HDFS、海量数据计算 => MR、资源调度 => YARN)

重点:① 理解Hadoop的组成 => 三大组件(HDFS、MapReduce、YARN)

​ ② 掌握Hadoop集群搭建(必备)

​ ③ 把HDFS读写流程、MR天龙八步、YARN资源调度

一、Hadoop概述

1、什么是Hadoop

Hadoop是Apache旗下的一个用java语言实现开源软件框架,是一个开发和运行处理大规模数据的软件平台。允许使用简单的编程模型在大量计算机集群上对大型数据集进行分布式处理。

Hadoop基于Java实现 => JDK

Hadoop属于Apache基金会(ASF)下的一个开源框架 => 开源 + 免费

Hadoop主要是对大数据集(数据量比较大 => 适合处理GB级别以上数据集)进行分布式(多台机器)处理。

在这里插入图片描述

① 狭义上说,Hadoop指Apache这款开源框架,它的核心组件有:

HDFS(分布式文件系统):解决海量数据存储

YARN(作业调度和集群资源管理的框架):解决资源任务调度

MAPREDUCE(分布式运算编程框架):解决海量数据计算

Map :分,把大数据分解为多个部分,每个部分单独计算

Reduce:合,把每一个Map计算的结果进行合并汇总得出最终计算结论

在这里插入图片描述

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

在这里插入图片描述

当下的Hadoop已经成长为一个庞大的体系,随着生态系统的成长,新出现的项目越来越多,其中不乏一些非Apache主管的项目,这些项目对HADOOP是很好的补充或者更高层的抽象。

在这里插入图片描述

2、Hadoop起源

Hadoop是Apache Lucene创始人 ==Doug Cutting (道格·卡丁)==创建的。最早起源于Nutch(搜索引擎),它是Lucene的子项目。Nutch的设计目标是构建一个大型的全网搜索引擎,包括网页抓取、索引、查询等功能,但随着抓取网页数量的增加,遇到了严重的可扩展性问题:如何解决数十亿网页的存储和索引问题。

去深圳图书馆 => 找书

去深圳图书馆 => 电脑 => 所有图书目录 => 某个书位于哪个楼层,哪个书架,第几排,第几个

谷歌的三篇文章(重要)

2003年Google发表了一篇论文为该问题提供了可行的解决方案。论文中描述的是谷歌的产品架构,该架构称为:谷歌分布式文件系统(GFS),可以解决他们在网页爬取和索引过程中产生的超大文件的存储需求。Hadoop => HDFS产生 => 海量数据存储

2004年 Google发表论文向全世界介绍了谷歌版的MapReduce系统。

同时期,Nutch的开发人员完成了相应的开源实现HDFS和MAPREDUCE,并从Nutch中剥离成为独立项目HADOOP,到2008年1月,HADOOP成为Apache顶级项目,迎来了它的快速发展期。

2006年Google发表了论文是关于BigTable的,这促使了后来的Hbase的发展。

因此,Hadoop及其生态圈的发展离不开Google的贡献。

[面试题]Hadoop由哪三大组件组成?

① HDFS :海量数据存储

② MapReduce :海量数据计算

③ YARN :资源调度

3、Hadoop特性(优点)

① 扩容能力(Scalable)

Hadoop是在可用的计算机集群间分配数据并完成计算任务的,这些集群可用方便的扩展到数以千计的节点中。

② 成本低(Economical)

Hadoop通过普通廉价的机器组成服务器集群来分发以及处理数据,以至于成本很低。

③ 高效率(Efficient)

通过并发数据,Hadoop可以在节点之间动态并行的移动数据,使得速度非常快。

④ 可靠性(Rellable)

能自动维护数据的多份复制,并且在任务失败后能自动地重新部署(redeploy)计算任务。所以Hadoop的按位存储和处理数据的能力值得人们信赖。

副本机制 => 1TB => HDFS有副本机制(默认3副本机制,一个数据会冗余3份)

Hadoop特点:① 扩容能力强 ② 成本低 ③ 高效 ④ 可靠性

有问题:Hadoop支持随机读写么?

答:不是,Hadoop支持随机读(并行读),串行写

4、Hadoop国内外应用

不管是国内还是国外,Hadoop最受青睐的行业是互联网领域,可以说互联网公司是Hadoop的主要使用力量。

国外来说,Yahoo、Facebook、IBM等公司都大量使用Hadoop集群来支撑业务。比如:

Yahoo的Hadoop应用在支持广告系统、用户行为分析、支持Web搜索等。

Facebook主要使用Hadoop存储内部日志与多维数据,并以此作为报告、分析和机器学习的数据源。

国内来说,BAT、美团、JD、滴滴、字节跳动领头的互联网公司是当仁不让的Hadoop使用者、维护者。比如Ali云梯(14年国内最大Hadoop集群)、百度的日志分析平台、推荐引擎系统等。

在这里插入图片描述

国内其他非互联网领域也有不少hadoop的应用,比如:

金融行业: 个人征信分析

证券行业: 投资模型分析

交通行业: 车辆、路况监控分析

电信行业: 用户上网行为分析

总之:Hadoop并不会跟某种具体的行业或者某个具体的业务挂钩,它只是一种用来做海量数据分析处理的工具。

5、Hadoop不同版本之间的区别

到目前为止,Hadoop软件一共经历过三个阶段,形成了3个大版本:① Hadoop1.0 ② Hadoop2.0 ③ Hadoop3.0版本

Hadoop1.X架构,只有两个组件:HDFS 和 MapReduce

HDFS用于完成海量数据的存储服务

MapReduce用于完成海量数据的计算服务

Hadoop1.X架构图:

在这里插入图片描述

☆ 解析1.X架构

HDFS中,一共有3个节点:

① namenode节点(1个节点),负责管理整个HDFS集群,负责元数据的存储(名称、大小、权限、修改时间以及每个文件存储在datanode中的位置),每个元数据大概占用150B

namenode属于内存型应用,所以在部署时,部署namenode节点的机器内存尽量要大一些

② datanode节点(多个节点),负责整个HDFS集群中具体数据的存储。

datanode属于硬盘型应用,所以在部署时,部署datanode节点的机器要求硬盘尽量要大一些

③ secondarynamenode(2nn):非namenode备份,主要负责辅助namenode完成元数据的管理

MapReduce中,一共有两个节点:

MapReduce主要负责任务的计算,来了一个任务,MapReduce要把其分散在多个机器上实现计算操作。

例:求1-10之间,所有数字的累加结果 => MR => 3台机器(1台计算1+2+3;2台计算4+5+6;3台计算7+8+9+10),最终把结果合并

① JobTracker :MapReduce组件的核心,负责接收客户端发送过来的计算任务,以及任务的分配;除此以外还要进行资源的分配与调度。

② TaskTracker:负责处理JobTracker发送过来的任务。

Hadoop1.X架构还有缺点:主要问题集中在JobTracker问题,因为在Hadoop1.X的设计过程中,JobTracker只能是单节点设计(整个集群就只有这一个节点),无法实现高可用,一旦JobTracker出现故障,则整个MapReduce集群将处于瘫痪状态。

☆ 解析2.X 与 3.X架构

Hadoop3.x 在性能上 相对于 2.x版本,性能有所提升。

Hadoop2.X和3.X都有三大组件:① HDFS ② MapReduce ③ YARN(资源调度器)

在这里插入图片描述

很多小伙伴,看到2.X和3.X架构图会很好奇,为什么少了一个MapReduce。特别说明:并没有少,只是MapReduce不是以节点方式出现,而是以程序(代码)方式成为Hadoop的一部分。

Hadoop2.X以及Hadoop3.X版本中,MapReduce已经形成任务形式,作为Hadoop的一部分。相对于Hadoop1.X版本中,新增一个YARN组件(资源调度器)

HDFS没有变:namenode、datanode、secondarynamenode

MapReduce:已经以任务形式存在了

YARN资源调度器(新增):

① resource manager:YARN核心(接收MapReduce等计算任务、资源调度)

② node manager:负责处理resourcemanager以及appmaster分配过来的任务

在这里插入图片描述

[面试题] 解析Hadoop高可用架构设计

由以上图解可知,Hadoop高可用主要用于解决Hadoop集群架构中namenoderesource manager单点故障问题。

注意点1:在高可用架构中,HDFS集群是没有SecondaryNamenode节点的。

注意点2:高可用就是解决namenode和resourcemanager单点故障问题,所以有多份

实现原理:

① namenode可以依靠zookeeper实现故障切换(自动)

② 由于namenode中存在元数据,所以当activate出现故障时,不仅要进行节点的切换,还要把自身的元数据转移到standby备机

③ 在Hadoop高可用架构中,通过JournalNode集群实现元数据存储,平常,主namenode会定期上传元数据到JournalNode集群,当故障发生时,备namenode会自动下载元数据,从而保障元数据安全

在这里插入图片描述

二、Hadoop集群搭建

1、Hadoop的社区版与商业版

  • 社区版 免费开源 Apache基金会(Apache Hadoop)
  • 商业版 第三方公司基于免费版的Hadoop开发了一些额外收费功能(Ambari、CDH

选择Linux软件版本一定不要选择最新版(容易成为小白鼠) => 确认大版本,向前推1-2个小版本。3.3.3 => 3.3.0、3.3.1、3.3.2

为什么要有商业版?

答:① 第一个为了赚钱

​ ② Hadoop还有比较大的问题,向前兼容做的不好,Hadoop3.x => Hadoop2.x

2、Hadoop的服务集群搭建

  • 单机版 所有服务运行在一台机器 只有一个主服务主要场景是在进行计算验证式可以搭建单机服务(HDFS、MapReduce、YARN)=> 只适合小型测试

  • 伪分布式 一台机器上运动完整的Hadoop 服务,服务端口会进行区分指定(假装是一个真正的集群)

  • 完全分布式 使用多台不同的机器分别运行不同的服务 => 生产环境

3、Hadoop的三个核心服务

  • 存储 HDFS 分布式文件存储系统
    • namenode 管理服务 master 只有一个
    • datanode 具体负责存储的服务 slave 可以在多台机器上部署
    • secondarynamenode 对name产生数据进行合并存储
  • 资源调度 YARN
    • ResourceManager 管理服务 管理所有机器的资源 只有一个
    • NodeManager 服务监控每台机器的资源汇报给ResourceManager 部署在多台机器
  • 计算 MapReduce
    • 不需要单独启动服务
    • mapreduce需要编写计算逻辑代码,交给MapReduce去运行代码

4、纯净系统搭建

至少准备3台机器,配置基础环境(略)

第一步:做快照还原,还原到04-JDK安装完成这里。

第二步:确认三台机器有没有做主机和IP的映射

vim /etc/hosts
192.168.88.161 node1 node1.itcast.cn
192.168.88.162 node2 node2.itcast.cn
192.168.88.163 node3 node3.itcast.cn

第三步:关闭防火墙与SELinux(全新安装的Linux这一步必须,目前虚拟机不用做)

关闭防火墙
systemctl  stop  firewalld
禁止开机启动
systemctl  disable  firewalld

关闭SELinux
setenforce 0
永久关闭
vim /etc/selinux/config
SELINUX=disabled

第四步:确认时间是否同步,如果不同步,可以使用ntpdate命令让其同步(需要动手做一下)

ntpdate cn.ntp.org.cn
systemctl start ntpd
systemctl enable ntpd

如果没有ntpd服务,可以通过yum install ntp -y进行安装

第五步:由于Hadoop底层是基于Java开发的,所以需要提前安装JDK

java -version
ll /export/server/
drwxr-xr-x  7 10143 10143   245 12月 11 2019 jdk1.8.0_241

注意JDK文件夹名称!!!

4.1 上传hadoop压缩包(node1)

上传hadoop压缩包(hadoop-3.3.0-Centos7-64-with-snappy.tar.gz)解压,注意:上传文件位置为 /export/server目录

普及一个概念:snappy是个啥?答:是未来大数据中的一种压缩格式,Gzip、Zlib、Snappy

cd /export/server
tar -xf /export/server/hadoop-3.3.0-Centos7-64-with-snappy.tar.gz

4.2 配置环境变量(node1/node2/node3)

终端 => start-all.sh(启动脚本)=> 所以我们需要提前把Hadoop的命令目录写入到环境变量的文件中

环境变量文件 => /etc/profile文件,我们只需要把Hadoop的命令目录追加到这个文件尾部即可

echo 'export HADOOP_HOME=/export/server/hadoop-3.3.0' >> /etc/profile
echo 'export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin' >> /etc/profile
source /etc/profile

配置环境变量的基本语法 => export 全字母大写=环境变量的值,如果是环境变量,必须先保留之前的内容,连接新内容
export HADOOP_HOME代表创建一个环境变量,代表Hadoop3.3.0家目录
export PATH=$PATH:Hadoop的bin目录以及Hadoop的sbin目录

4.3 手动修改配置文件(node1) => 关键点

进入/export/server/hadoop-3.3.0/etc/hadoop目录下进行修改

cd /export/server/hadoop-3.3.0/etc/hadoop
① hadoop-env.sh文件

文件中设置的是Hadoop运行时需要的环境变量。JAVA_HOME是必须设置的,即使我们当前的系统中设置了JAVA_HOME,它也是不认识的,因为Hadoop即使是在本机上执行,它也是把当前的执行环境当成远程服务器。

vim hadoop-env.sh

写入如下内容:

# 首先要配置JDK,Java运行环境
export JAVA_HOME=/export/server/jdk1.8.0_241
# 以上配置完成后,在文件最后在添加
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root 

各位小伙伴,在粘贴的过程中,一定要记得切换到编辑模式!!!否则粘贴可能会有异常!!!

② core-site.xml文件

hadoop的核心配置文件,有默认的配置项core-default.xml。

core-default.xml与core-site.xml的功能是一样的,如果在core-site.xml里没有配置的属性,则会自动会获取core-default.xml里的相同属性的值。

vim core-site.xml

<configuration>
    把你的配置信息,必须写在两个标签之间
</configuration>

然后在这两个标签之间,写入如下内容:

配置文件要写在这里

<!-- 设置默认使用的文件系统 Hadoop支持file、HDFS、GFS、ali|Amazon云等文件系统 -->
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://node1:8020</value>
</property>

<!-- 设置Hadoop本地保存数据路径 -->
<property>
    <name>hadoop.tmp.dir</name>
    <value>/export/data/hadoop-3.3.0</value>
</property>

<!-- 设置HDFS web UI用户身份 -->
<property>
    <name>hadoop.http.staticuser.user</name>
    <value>root</value>
</property>

<!-- 整合hive 用户代理设置 -->
<property>
    <name>hadoop.proxyuser.root.hosts</name>
    <value>*</value>
</property>

<property>
    <name>hadoop.proxyuser.root.groups</name>
    <value>*</value>
</property>
③ hdfs-site.xml文件

HDFS的核心配置文件,有默认的配置项hdfs-default.xml。

hdfs-default.xml与hdfs-site.xml的功能是一样的,如果在hdfs-site.xml里没有配置的属性,则会自动会获取hdfs-default.xml里的相同属性的值。

vim hdfs-site.xml

然后在这两个标签之间,写入如下内容:

配置文件要写在这里

<!-- 设置SNN进程运行机器位置信息 -->
<property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>node2:9868</value>
</property>
④ mapred-site.xml文件

MapReduce的核心配置文件,有默认的配置项mapred-default.xml。

mapred-default.xml与mapred-site.xml的功能是一样的,如果在mapred-site.xml里没有配置的属性,则会自动会获取mapred-default.xml里的相同属性的值。

vim mapred-site.xml

然后在这两个标签之间,写入如下内容:

配置文件要写在这里

<!-- 设置MR程序默认运行模式: yarn集群模式 local本地模式 -->
<property>
  <name>mapreduce.framework.name</name>
  <value>yarn</value>
</property>

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

<property>
  <name>yarn.app.mapreduce.am.env</name>
  <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>

<property>
  <name>mapreduce.map.env</name>
  <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>

<property>
  <name>mapreduce.reduce.env</name>
  <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
⑤ yarn-site.xml文件

YARN的核心配置文件,有默认的配置项yarn-default.xml。

yarn-default.xml与yarn-site.xml的功能是一样的,如果在yarn-site.xml里没有配置的属性,则会自动会获取yarn-default.xml里的相同属性的值。

vim yarn-site.xml

然后在这两个标签之间,写入如下内容:

配置文件要写在这里

<!-- 设置YARN集群主角色运行机器位置 -->
<property>
	<name>yarn.resourcemanager.hostname</name>
	<value>node1</value>
</property>

<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>

<!-- 是否将对容器实施物理内存限制 -->
<property>
    <name>yarn.nodemanager.pmem-check-enabled</name>
    <value>false</value>
</property>

<!-- 是否将对容器实施虚拟内存限制。 -->
<property>
    <name>yarn.nodemanager.vmem-check-enabled</name>
    <value>false</value>
</property>

<!-- 开启日志聚集 -->
<property>
  <name>yarn.log-aggregation-enable</name>
  <value>true</value>
</property>

<!-- 设置yarn历史服务器地址 -->
<property>
    <name>yarn.log.server.url</name>
    <value>http://node1:19888/jobhistory/logs</value>
</property>

<!-- 保存的时间7天 -->
<property>
  <name>yarn.log-aggregation.retain-seconds</name>
  <value>604800</value>
</property>
⑥ workers文件

workers文件里面记录的是集群主机名。主要作用是配合一键启动脚本如start-dfs.sh、stop-yarn.sh用来进行集群启动。这时候workers文件里面的主机标记的就是从节点角色所在的机器。

node1
node2
node3

配置完成后进行Hadoop目录转发,直接转发给node2和node3一份即可。

node1操作:

cd /export/server/

以下写法二选一

# 完整写法
scp -r hadoop-3.3.0 root@node2:/export/server/
scp -r hadoop-3.3.0 root@node3:/export/server/

# 简写写法
scp -r hadoop-3.3.0 node2:$PWD
scp -r hadoop-3.3.0 node3:$PWD

5、XML文件格式说明(不需要操作)

  • 格式 xml https://hadoop.apache.org/docs/stable/
标签形式 => 大多数都是双标签 => <开始标签></结束标签>
<property>
    <name>hadoop.common.configuration.version</name>
    <value>3.3.0</value>
</property>

# 模板格式

<property>
    <name> hadoop.tmp.dir </name>
    <value>/export/data/hadoop</value>
</property>

<property>
	<name>dfs.namenode.http-address</name>
	<value>node1:9870</value>
</property>

6、启动hadoop服务

  • 数据初始化

    重要:一定要在node1上对namenode进行初始化

    hdfs namenode -format
    

在这里插入图片描述

特别注意:以上格式化操作,只在第一次搭建集群时,操作1次即可,后期一定不要执行这个命令,否则后果自负!!!

  • 启动方式

​ ① 脚本启动:在node1上启动

start-all.sh

注:默认情况start.sh会自动到/export/server/hadoop-3.3.0/etc/hadoop目录读取works文件,获取要启动的节点

在这里插入图片描述

问题:为什么在第一台机器上启动,其他机器服务也会随之启动呢?

答:因为所有的节点我们都放入workers文件中了,start-all.sh会自动根据workers中提供的节点,启动整个Hadoop集群。

​ ② 单个服务依次启动 当脚本使用不成功时,可以手动依次操作

[root@node1 ~]# hdfs --daemon start namenode
[root@node1 ~]# jps
3889 NameNode
3958 Jps
[root@node1 ~]# hdfs --daemon start datanode
[root@node1 ~]# jps
3889 NameNode
4065 Jps
4010 DataNode
[root@node2 ~] # hdfs --daemon start secondarynamenode

[root@node1 ~]# yarn --daemon start resourcemanager
[root@node1 ~]# jps
4128 ResourceManager
3889 NameNode
4010 DataNode
4172 Jps
[root@node1 ~]# yarn --daemon start nodemanager    
[root@node1 ~]# jps
4128 ResourceManager
3889 NameNode
4404 NodeManager
4521 Jps
4010 DataNode

以上只是启动了第一台机器,第二台机器、三台机器也需要参考以上方式,一个一个启动,这种方式适合单节点启动。
除了以上方式以外,我们还可以针对HDFS集群、YARN集群进行单独启动
HDFS集群
	start-dfs.sh 
	stop-dfs.sh 
YARN集群
	start-yarn.sh
	stop-yarn.sh

注:如果采用依次启动的方式,则node2和node3也要执行以上命令

  • 日志查看

    • cd /export/server/hadoop-3.3.0/logs
    • cat hadoop-root-namenode-node1.log | grep ERR

以上日志,专门用于解决,Hadoop集群故障

  • 关闭服务

​ ① 脚本关闭

stop-all.sh

​ ② 依次关闭 当脚本使用不成功时,可以手动依次操作

[root@node1 ~]# hdfs --daemon stop namenode
[root@node1 ~]# hdfs --daemon stop datanode
[root@node2 ~]# hdfs --daemon stop secondarynamenode
[root@node1 ~]# yarn --daemon stop resourcemanager
[root@node1 ~]# yarn --daemon stop nodemanager    

7、hadoop使用

前提条件:

关键点:在Windows电脑中,配置主机与IP的映射(必须做)

① 第一步:按Windows键 + R,输入drivers

在这里插入图片描述

② 第二步:找到里面的hosts文件(没有后缀名),拖拽到桌面

③ 第三步:在这个文件中添加如下内容,实现主机和IP的映射

192.168.88.161 node1 node1.itcast.cn
192.168.88.162 node2 node2.itcast.cn
192.168.88.163 node3 node3.itcast.cn

④ 第四步:把改好后的hosts文件放回原来的位置即可


  • HDFS服务访问 => 端口 9870,访问namenode服务所在的服务器

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • Yarn服务访问 => 端口 8088 => 查看正在计算的任务成功与否以及日志查看,访问resourcemanager所在的服务器

在这里插入图片描述

8、Hadoop中HDFS与MR测试过程

HDFS测试:

hadoop fs -mkdir /itcast 在HDFS集群的根目录/创建一个itcast文件夹,-mkdir代表创建目录
hadoop fs -put 本地文件名称 远程文件路径(默认已经直接连接到Hadoop的HDFS服务)
hadoop fs -ls /itcast,作用:查看/itcast目录下有哪些文件

hadoop fs -rm /itcast/某个文件,作用:删除/itcast目录下的某个文件
hadoop fs -rm -r /目录,作用:递归删除

案例:上传一个itheima.txt文件到HDFS集群中

touch itheima.txt
hadoop fs -put itheima.txt /

思考一个问题:为什么上传一个这么小的文件,要这么长时间?

大小上GB级别以上 => 大数据 => HDFS侧重于海量数据的存储,小文件不适合存储在HDFS中,原因有二:

① HDFS上传小文件的速度和大文件几乎差不多,没有任何优势

② HDFS如果存放了大量的小文件,每个小文件都有150B的元数据

MR测试:

cd /export/server/hadoop-3.3.0/share/hadoop/mapreduce
yarn jar hadoop-mapreduce-examples-3.3.0.jar pi 2 50

涉及到的知识点:蒙特卡洛算法求圆周率

9、使用注意

  • 服务出现问题
    • 关闭所有服务
    • 查看日志文件,看看具体哪里出错(大部分是配置文件问题)
      • 如果配置文件没有问题,尝试删除所有服务器的数据文件 /export/data/hadoop-3.3.0/
    • 在node1上重新初始化
    • 再次启动服务
  • 不要忘了配置windows域名

三、Hadoop辅助功能

1、MapReduce jobhistory服务

node1:19888 => 查看job历史信息(默认关闭状态)

  • 背景
默认情况下,yarn上关于MapReduce程序执行历史信息、执行记录不会永久存储;
一旦yarn集群重启 之前的信息就会消失。
  • 功能
保存yarn上已经完成的MapReduce的执行信息。
  • 配置
  • 因为需求修改配置。重启hadoop集群才能生效。

以下配置已经在搭建时提前配置好了,所以不需要在单独配置了!!!

stop-all.sh

node1服务器:
cd /export/server/hadoop-3.3.0/etc/hadoop/
vim mapred-site.xml

<configuration>

<property>
<name>mapreduce.jobhistory.address</name>
<value>node1:10020</value>
</property>

<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>node1:19888</value>
</property>

</configuration>
  • scp同步给其他机器
cd  /export/server/hadoop-3.3.0/etc/hadoop
scp mapred-site.xml node2:$PWD
scp mapred-site.xml node3:$PWD
  • 重启hadoop集群

  • 自己手动启动jobhistory服务 => (在Hadoop中,jobhistory也是一个单独的服务)

#hadoop2.x版本命令
mr-jobhistory-daemon.sh start|stop historyserver

#hadoop3.x版本命令
mapred --daemon start historyserver
mapred --daemon stop historyserver

[root@node1 ~]# jps
13794 JobHistoryServer
13060 DataNode
12922 NameNode
13436 NodeManager
13836 Jps
13327 ResourceManager

开启成功后,再次测试一下MR

cd /export/server/hadoop-3.3.0/share/hadoop/mapreduce
yarn jar hadoop-mapreduce-examples-3.3.0.jar pi 2 50

2、HDFS 垃圾桶机制(安全保证)

  • 背景 在windows叫做回收站
在默认情况下 hdfs没有垃圾桶 意味着删除操作直接物理删除文件。

[root@node1 ~]# hadoop fs -rm /itcast/1.txt
Deleted /itcast/1.txt
  • 功能:和回收站一种 在删除数据的时候 先去垃圾桶 如果后悔可以复原。

  • 配置

cd /export/server/hadoop-3.3.0/etc/hadoop/
vim core-site.xml

在core-site.xml中开启垃圾桶机制

指定保存在垃圾桶的时间。单位分钟

<property>
<name>fs.trash.interval</name>
<value>1440</value>
</property>

1440代表1天

实际工作中,可以根据业务的需要调整垃圾桶回收时间1 ~ 7天。

普及一个概念垃圾桶中的checkpoint(删除点),删除点 => 24小时是一个周期,每个周期就可以理解为一个checkpoint。24小时(1个checkpoint)-> 24小时(1个checkpoint),checkpoint周期可以自定义,如果没有设置,默认等同于fs.trash.interval。

  • 集群同步配置 重启hadoop服务。
[root@node1 hadoop]# pwd
/export/server/hadoop-3.3.0/etc/hadoop
[root@node1 hadoop]# scp core-site.xml node2:$PWD
core-site.xml                                              100% 1027   898.7KB/s   00:00    
[root@node1 hadoop]# scp core-site.xml node3:$PWD
core-site.xml 

[root@node1 hadoop]# stop-all.sh
[root@node1 hadoop]# start-all.sh

扩展:
在Shell命令中,有一些系统变量,不需要自己定义就可以直接使用。
$PATH:获取环境变量中的所有信息
$PWD:获取当前位置

3、垃圾桶使用

  • 配置好之后 再删除文件 直接进入垃圾桶
[root@node1 ~]# hadoop fs -rm /itcast.txt
INFO fs.TrashPolicyDefault: Moved: 'hdfs://node1:8020/itcast.txt' to trash at: hdfs://node1:8020/user/root/.Trash/Current/itcast.txt
  • 垃圾桶的本质就是hdfs上的一个隐藏目录。
hdfs://node1:8020/user/用户名/.Trash/Current
  • 后悔了 需要恢复怎么做?
hadoop fs -cp /user/root/.Trash/Current/itcast.txt /
  • 就想直接删除文件怎么做?
hadoop fs -rm -skipTrash /itcast.txt

[root@node1 ~]# hadoop fs -rm -skipTrash /itcast.txt
Deleted /itcast.txt

若有错误与不足请指出,关注DPT一起进步吧!!!

;