Hadoop入门—HDFS、MR、Yarn【看这一篇就够了!】

本文详细介绍了Hadoop的基础知识,包括其作为分布式系统架构的作用、Apache、Cloudera和Hortonworks等发行版本,Hadoop的优势(高可靠、扩展性、高效和低成本),HDFS的组成部分、常用Shell命令,以及MapReduce和Yarn框架的工作原理和使用。
摘要由CSDN通过智能技术生成

目录

Hadoop简介

Hadoop 三大发行版本

Hadoop优势

Hadoop基本组成

常用Shell命令

HDFS分布存储

HDFS启停

NameNode(NN)

DataNode(DN)

SecondaryNameNode(SNN)

文件写入流程

HDFS架构的稳定性

 文件读取流程

存储方式

Block块和多副本

edits和fsimage文件

 元数据合并及控制参数

HDFS漫画

Mapreduce分布式并行计算框架

计算模式

Map和Reduce

MR执行原理

Yarn作业调度、资源管理

Yarn启停 

ResourceManager

NodeManager 

ApplicationMaster

JobHistoryServer

Container

Hadoop一键启停 


Hadoop简介

狭义来说,hadoop是Apache基金会开发的分布式系统基础架构,用来解决海量数据的存储和海量数据的分析计算问题。广义上来说,Hadoop 通常是指一个更广泛的概念 —— Hadoop 生态圈。

Hadoop 三大发行版本

Apache、Cloudera、Hortonworks

Apache 版本最原始(最基础)的版本,对于入门学习最好。

Cloudera在大型互联网企业中用的较多。其主要产品有CDH、Cloudera Manager,Cloudera Support

Hadoop优势

高可靠性: Hadoop 底层维护多个数据副本,所以即使 Hadoop 某个计算元素或存储出现故障,也不会导致数据的丢失。
高扩展性: 在集群间分配任务数据,可方便的扩展数以千计的节点。
高效性: 在 MapReduce 的思想下,Hadoop 是并行工作的,以加快任务处理速度。
高容错性: 能够自动将失败的任务重新分配。

低成本:Hadoop不要求机器的配置达到极高的标准,大部分普通商用服务器即可满足要求,通过提供多个副本和容错机制提高集群的可靠性

Hadoop基本组成

常用Shell命令

hdfs dfs -ls <path>:列出指定 HDFS 路径下的文件和目录
hdfs dfs -mkdir <path>:在 HDFS 中创建新目录
hdfs dfs -put <localsrc> <dst>:将本地文件(或目录)复制到 HDFS
hdfs dfs -get <src> <localdst>:将 HDFS 上的文件(或目录)复制到本地
hdfs dfs -mv <src> <dst>:移动 HDFS 中的文件目录或重命名文件目录
hdfs dfs -cp <src> <dst>:复制 HDFS 中的文件或目录
hdfs dfs -rm <path>:删除 HDFS 中的文件
hdfs dfs -cat <path>:在控制台显示 HDFS 文件的内容
hdfs dfs -du <path>:显示 HDFS 文件或目录的大小
hdfs dfs -df <path>:显示 HDFS 的可用空间
hdfs fsck path [-files [-blocks [-location]]]
-files列出路径内的文件状态
-files -blocks输出文件块报告(几个块,几个副本)
-files -blocks -locations 输出每个block的详情

HDFS分布存储

HDFS是一个分布式文件系统,具有高容错、高吞吐 量等特性,分布在多个集群节点上的文件系统。有NN、DN、SNN三种角色。

HDFS启停

NameNode(NN)

HDFS的主角色,负责管理每个文件的块所在的 DataNode、整个HDFS文件系统、存储文件的元数据,如文件名,文件目录结构,文件属性(生成时间、副本数、文件权限)等。

DataNode(DN)

 HDFS从角色,负责处理客户端的读写请求,存储删除文件块,以及块数据校验和。

SecondaryNameNode(SNN)

NN的辅助角色,帮NN打杂,监控 HDFS 状态的辅助后台程序,每隔一段时间获取 HDFS 元数据的快照。

可通过9870端口(默认9870)访问web界面,查看集群各节点状态及信息

文件写入流程

发送的写入请求通过后,客户端会根据NN返回的信息自动把数据分块,向网络距离最近的DN写入数据。同时,DN会完成备份操作,把备份传到其他的DN,然后由其他的DN再次做备份传播,直到满足设置的备份数量 。当数据写入完成后,客户端会通知NN,由NN完成元数据记录。

HDFS架构的稳定性

1. 心跳机制和重新复制

每个 DataNode 定期向 NameNode 发送心跳消息,如果超过指定时间没有收到心跳消息,则将 DataNode 标记为死亡。NameNode 不会将任何新的 IO 请求转发给标记为死亡的 DataNode,也不会 再使用这些 DataNode 上的数据。 由于数据不再可用,可能会导致某些块的复制因子小于其指定值, NameNode 会跟踪这些块,并在必要的时候进行重新复制。

2. 数据的完整性

由于存储设备故障等原因,存储在 DataNode 上的数据块也会发生损坏。为了避免读取到已经损坏的数 据而导致错误,HDFS 提供了数据完整性校验机制来保证数据的完整性,具体操作如下: 当客户端创建 HDFS 文件时,它会计算文件的每个块的 校验和 ,并将 校验和 存储在同一 HDFS 命名空 间下的单独的隐藏文件中。当客户端检索文件内容时,它会验证从每个 DataNode 接收的数据是否与存 储在关联校验和文件中的 校验和 匹配。如果匹配失败,则证明数据已经损坏,此时客户端会选择从其 他 DataNode 获取该块的其他可用副本。

3.元数据的磁盘故障

FsImage 和 EditLog 是 HDFS 的核心数据,这些数据的意外丢失可能会导致整个 HDFS 服务不可 用。为了避免这个问题,可以配置 NameNode 使其支持 FsImage 和 EditLog 多副本同步,这样 FsImage 或 EditLog 的任何改变都会引起每个副本 FsImage 和 EditLog 的同步更新。

4.支持快照

快照支持在特定时刻存储数据副本,在数据意外损坏时,可以通过回滚操作恢复到健康的数据状态。

 文件读取流程

存储方式

Block块和多副本

由于文件大小不一,不利于统一管理,hdfs设定了统一的存储单位Block块,Block块是hdfs最小存储单位,通常每个128MB(可修改dfs.blocksize)。hdfs会按照Block块大小把文件切分成多份存储在多个datanode上也就是多个服务器上,同时为了保证整个文件的完成性(防止Block块丢失或损坏),hdfs会对每个Block块做多个备份存储在其他节点上,备份的数量默认是3,可以在hdfs-site.xml中配置数量,修改后要重新分发该文件,保证每个服务器的配置文件相同!

<property>

        <name>dfs.replication</name>

        <value>3</value>

</property>

同时还可以临时决定上传文件的副本数量:

hdfs fs -D dfs.replication=5  -put  test.tst  /data/test

还可以修改已存在的hdfs文件的副本数量:

hdfs fs -setrep [-R] 5 path

path是指定文件路径,-R表示对子目录也生效

edits和fsimage文件

hdfs中文件被划分成一堆堆block块,为了方便整理记录文件和block的关系,namenode基于一批edits文件和一个fsimage文件完成整个文件系统的维护管理。

edits文件是一个流水账文件,记录了hdfs的每一次操作以及该次操作影响的文件及其对应的block。为了保证edits文件检索性能,会有多个edits文件,每一个edits文件存储到达一定数量会开启新的edits,保证不出现超大的edits文件。最终所有edits文件会合并为一个fsimage文件,这个fsimage文件就记录了最终状态的文件操作信息。如果已经有了fsimage,就会把全部的edits和已存在的fsimage进行新的合并,生成新的fsimage。

 元数据合并及控制参数

注意!元数据(eidts和fsimage)的合并不是由NN完成的,而是SNN,NN只是基于元数据对整个文件系统进行维护管理,负责元数据记录和权限审批,NN是管理者,不是员工。

SNN会通过http从NN拉取edits和fsimage然后合并元数据并提供给NN使用

HDFS漫画

3.HDFS故障类型和检测方法

Mapreduce分布式并行计算框架

MapReduce是基于Yarn运行的,没有Yarn就无法运行MapReduce,MapReduce有RM、NM、AM三种角色。

MR不适合实时计算,不适合流式计算,不适合有向图计算。

可通过8042端口(默认8042)访问web界面,查看MR任务的执行信息

计算模式

MapReduce属于分散汇总。spark、flink属于中心调度

Map和Reduce

Map接口提供“分散”功能,Reduce提供“汇总聚合”功能,用户可以通过Java、python等编程调用mapreduce接口完成开发,不过现在已经有了Hive on MR(稍微过时),sparkSQL等客户端。不懂编程仅用SQL就能完成开发,使用更方便,逐渐成为主流。

MR执行原理

Yarn作业调度、资源管理

Yarn管控整个集群的资源调度,MR程序运行时,是在Yarn的监督下运行的,MR程序会把计算任务分成若干个map和reduce,然后向Yarn申请资源并运行任务。Yarn有四种角色:ResourceManager(RM)、NodeManager(NM)、ProxyServer(PS)、JobHistoryServer(JHS)

Yarn启停 

ResourceManager

集群资源总管家,整个集群资源调度者,负责协调调度各个程序所需资源。

NodeManager 

单机资源管家,单个服务器的资源调度者,负责协调调度单个服务器的资源供程序使用。同时负责该节点内所有容器的生命周期的管 理,监视资源和跟踪节点健康。具体如下:

1. 启动时向 ResourceManager 注册并定时发送心跳消息,等待 ResourceManager 的指令;

2. 维护 Container 的生命周期,监控 Container 的资源使用情况;

3. 管理任务运行时的相关依赖,根据 ApplicationMaster 的需要,在启动 Container 之前将需 要的程序及其依赖拷贝到本地。

ApplicationMaster

在用户提交一个应用程序时,YARN 会启动一个轻量级的进程 ApplicationMaster 。 ApplicationMaster 负责协调来自 ResourceManager 的资源,并通过 NodeManager 监视容器内资 源的使用情况,同时还负责任务的监控与容错。具体如下:

1. 根据应用的运行状态来决定动态计算资源需求;

2. 向 ResourceManager 申请资源,监控申请的资源的使用情况;

3. 跟踪任务状态和进度,报告资源的使用情况和应用的进度信息;

4. 负责任务的容错。

运行时可通过服务器的8088端口(默认8088)访问web界面

JobHistoryServer

记录历史运行程序的信息及产生的日志,把每个程序的运行日志统一收集到hdfs,可通过19888端口访问web界面

Container

Container 是 Yarn 中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等。

Hadoop一键启停 

  • 54
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值