【学习笔记】Hadoop1:Hadoop的四大模块

前言

Hadoop是一个由Apache基金会开发的分布式系统基础架构,在大量计算机组成的集群当中实现了对于海量的数据进行的分布式计算,简单来说就是解决海量数据的存储和分析计算的问题。

Hadoop的优势

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

Hadoop的组成结构

Hadoop经历了从Hadoop1.x到Hadoop2.x的转换,为:在这里插入图片描述
区别: 在Hadoop1.x时代,Hadoop 中的 MapReduce 同时处理业务逻辑运算和资源的调度,耦合性较大。而在 Hadoop2.x 时代,MapReduce 将 JobTracker 中的资源管理及任务生命周期管理(包括定时触发及监控)拆分成两个独立的组件,并更名为 YARN(Yet Another Resource Negotiator)即 YARN只负责资源的调度,MapReduce 只负责运算

1. common(工具类)

common 包括Hadoop常用的工具类,由原来的Hadoopcore部分更名而来。主要包括系统配置工具Configuration、远程过程调用RPC、序列化机制和Hadoop抽象文件系统FileSystem等。它们为在通用硬件上搭建云计算环境提供基本的服务,并为运行在该平台上的软件开发提供了所需的API。

2. Hadoop Distributed File System(HDFS)

  • HDFS支持海量数据的存储,允许用户把成百上千的计算机组成存储集群,其中每一台计算机称为一个节点,构建了一个能跨越计算机或网络系统的单一的文件命名空间,HDFS实现了大数据的分布式存储。用户可以通过HDFS的终端命令来操作其中的文件和目录,也可以通过HDFS API或者MapReduce来编程访问其中的文件数据。
  • HDFS首把大数据文件切分成若干个更小的数据块,再把这些数据块分别写入不同节点之中。每一个负责保存文件数据的节点就成为数据节点(DataNode)。当用户需要访问文件时,为了保证能够读取每一个数据块,HDFS使用集群中的一个节点专门保存文件的属性信息(包括文件名,所在目录以及每一个数据块的存储位置等),该节点成为元数据节点(NameNode)。这样客户端通过NameNode节点可以获得数据块的位置,直接访问DataNode即可获得数据。
  • HDFS默认的数据块大小为128MB(在Hadoop-2.2版本之前默认的大小为64MB)。HDFS主要由三个部分组成:
NameNode

NameNode的作用是管理分布式文件系统的命名空间,并将所有的文件和目录的元数据,例如文件名,文件目录的结构,文件的属性(生成时间、副本数、文件权限),以及每个文件的块列表和块(block)所在的DateNode等保存到Linux本地文件系统的目录(由 dfs.namenode.name.dir 参数指定)。

DataNode

DataNode的作用是保存HDFS文件的数据内容。当在HDFS写入文件时,大数据文件将被切分为多个数据块,DataNode直接从客户端接收数据,经过加密后写入到Linux本地系统的相应目录(由 dfs.datanode.data.dir 参数指定)。
当一个DataNode启动时,它会扫描Linux本地文件系统,产生一个与这些本地文件对应的所有HDFS数据块的列表,作为报告发送到NameNode,该报告就是块状态报告(即该数据块的信息)。客户端从HDFS读文件时,客户端首先访问NameNode,获得文件的每个数据块所在的DataNode信息,再连接这些DataNode,即可获得文件的数据内容。

Secondary NameNode

Secondary NameNode的目的是在HDFS中提供一个检查点,每隔一段时间就会获取元数据的快照,并返回给NameNode。(这里推荐一篇写的很好的博客:Secondary NameNode:它究竟有什么作用?

2.1 HDFS的优点:

  1. 支持超大文件(TB量级以上)的存储;
  2. 支持流式的访问数据;
  3. 可以运行于廉价的商用机器集群上。

2.2 HDFS的缺点:

  1. 不适合低延迟数据访问: HDFS是用于处理大规模数据集分析任务的,主要是为了达到高数据吞吐量而设计的,这就可能要求以高延迟为代价;
  2. 无法高效存储大量的小文件: 因为NameNode把文件系统的元数据放置在内存中,所以文件系统所能容纳的文件数目是由NameNode的内存大小来决定的。此外,由于map任务的数量是由数据块的分片数(splits)来决定的,因此在MapReduce处理大量的小文件时,就会产生过多的map任务,线程管理开销将会增加作业时间;
  3. 不支持多用户写入和任意修改文件: 在HDFS的一个文件中只有一个写入者,而且写操作只能在文件末尾完成,即只能进行追加操作,目前HDFS还不支持多个用户对同一文件的写操作,以及在文件任意位置进行修改。

3. YARN(Yet Another Resource Negotiator)

YARN在Hadoop中负责对资源的管理与调度,主要方法是创建一个全局的 ResourceManager(RM) 和若干个针对应用程序的 ApplicationMaster(AM)
在这里插入图片描述

- ResourceManager

ResourceManager 将各个资源部分(CPU、内存等)安排给 NodeManager,与 ApplicationMaster 一起分配资源,与 NodeManager 一起启动和监视它们的基础应用程序。(类似于公司中的最高管理者,负责分配任务和监视手下)

- ApplicationMaster

ApplicationMaster 管理一个在YARN内运行的应用程序的每个实例。ApplicationMaster 负责协调来自ResourceManager 的资源,并通过 NodeManager 监视容器的执行和资源使用(CPU、内存等的资源分配)。(类似于公司中的项目经理,负责调控上头的指令,并把任务分配给下级)

- NodeManager

NodeManager 处理 ResourceManager 和 ApplicationMaster 的命令管理一个YARN集群中的每个节点。NodeManager 提供针对集群中每个节点的服务,从监督对一个容器的终生管理到监视资源和跟踪节点健康。(类似于公司中的员工,负责处理上头的命令并完成工作)

4. MapReduce

MapReduce 是基于 YARN 的大型数据集并行处理系统,适合用来处理大数据。MapReduce 将计算过程分为两个阶段:Map(映射)Reduce(归约)。指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归约)函数,用来保证所有映射的键值对中的每一个共享相同的键组(相当于约束作用)。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值