Hadoop - 入门

简介


Hadoop是用于海量数据处理和分析的分布式平台。实际上Hadoop除了最初的HDFS和MapReduce两个组件,现在已经发展到六十多个组件,覆盖了从数据存储、执行引擎到数据访问框架等各个层面。“Hadoop”有时被人们用来指代一个更大的、多个项目组成(多指分布式计算和大规模数据处理范畴)的生态系统,而不仅仅是HDFS和MapReduce。

特点


  • 适合大规模的数据处理
  • 适合少量的大容量文件,而不适合大量的小文件
  • 适合处理流式数据,一般一次写入,多次读取
  • 只需要求商用硬件(一般硬件)集群
  • 延迟较高,不适合低延迟数据访问(想要低延迟用HBase)
  • 高吞吐量、高容错、高可靠性、高扩展性

Hadoop架构


在这里插入图片描述
HDFS:Hadoop自带的分布式文件系统
YARN:Hadoop的集群资源管理系统
MapReduce:Hadoop用于数据处理的编程模型
Others:Hadoop利用YARN资源管理系统的便捷功能而存在的不同与MapReduce的其他数据处理方式

HDFS


DHFS即Hadoop Distributed File System,是Hadoop自带的分布式文件系统,其架构可以直观地由下图展示出来。
在这里插入图片描述
HDFS以流式数据访问模式来存储超大文件,运行于商用硬件集群上,适合于一次写入、多次读取的访问模式。但HDFS是为高数据吞吐量应用优化的,因此会以提高延迟为代价。
下面是HDFS的一些相关概念:

  • DataBlock
    数据块,基本存储单位,一般大小默认为128MB。数据块这么大主要的好处有:1)减少检索定位时间,一般硬盘传输速率比寻道时间要快,大的块可以减少寻道时间;2)减少管理块的数据开销,每个块都需要在NameNode上有对应的记录;3)对数据块进行读写,减少建立网络的连接成本。
    一个大文件会被拆分成一个个的块,然后存储于不同的机器。如果一个文件小于DataBlock大小,那么实际占用的空间为其文件的大小。
    是基本的读写单位,类似于磁盘的页,每次都是读写一个块。每个块都会被复制到多台机器,默认复制3份。
    DataBlock的抽象使得文件并不需要存储在同一个磁盘上,充分发挥“分布式”的优势;另外可以简化存储管理,简化了存储子系统的设计;不仅如此,DataBlock非常适用于数据备份,从而提供数据容错能力,提高可用性。

HDFS集群的两种节点模式为NameNode、DataNode:

  • NameNode
    管理着HDFS文件系统的命名空间。它以树的结构管理者整个文件系统的所有文件目录,具体的来说即所有文件的metadata。
    HDFS运行时,NameNode将系统文件信息维护在内存当中,因此整个HDFS可存储的文件数量受限于NameNode的内存大小。
    一个DataBlock在NameNode中对应一条记录,一般占用150B,因此如果HDFS存储着大量的小容量文件,那么产生的大量的DataBlock记录则会消耗了NameNode的大量内存。这是Hadoop建议存储大容量文件的原因之一。
    。数据会定时保存到本地磁盘,但不保存block的位置信息,而是由DataNode注册时上报和运行时维护(NameNode中与DataNode相关的信息并不保存到NameNode的文件系统中,而是NameNode每次重启后,动态重建)。
    NameNode失效将会导致HDFS上的文件全部丢失,因此保证NameNode的可用性是非常重要的。
  • Secondary NameNode
    采用类似于CheckPoint机制,定期与NameNode进行同步,合并文件系统镜像和编辑日志。但NameNode失效后仍然需要人工操作将Secondary NameNode设为NameNode
  • DataNode
    是集群的工作节点。保存着具体的block数据,并且负责数据的读写操作和复制操作。
    DataNode启动时会向NameNode报告当前存储的数据块信息,后续也会定时报告修改信息。
    DataNode之间会进行通信,复制数据块,保证数据的冗余性

YARN


在这里插入图片描述
YARN是Hadoop2.0版本引入的资源调度框架。
由于1.0版本的Hadoop采取的是JobTracker+TaskTracker的架构。JobTracker负责资源管理,跟踪资源消耗和可用性,作业生命周期管理(调度作业任务,跟踪进度,为任务提供容错),而TaskTracker负责加载或关闭任务,定时报告状态。如下图所示:
在这里插入图片描述
可以看出JobTracker是MapReduce的集中处理点,r完成了太多的任务,造成了过多的资源消耗,当MapReduce job 非常多的时候,会造成很大的内存开销。这也是业界普遍总结出老Hadoop的MapReduce只能支持4000 节点主机的上限。
另外,在TaskTracker端,以map/reduce task的数目作为资源的表示过于简单,没有考虑到cpu/ 内存的占用情况,如果两个大内存消耗的task被调度到了一块,内存不足的情况;如果把资源强制划分为map task slot和reduce task slot, 如果当系统中只有map task或者只有reduce task的时候,会造成资源的浪费。

这就是1.0版本Hadoop存在的单点问题集群资源利用率的问题。

针对这两个问题,2.0的版本引入了YARN架构:
在这里插入图片描述
在这里插入图片描述
YARN就是将JobTracker的职责进行拆分,将资源管理和任务调度监控拆分成独立的进程:一个全局的资源管理和一个每个作业的管理(ApplicationMaster)ResourceManager和NodeManager提供了计算资源的分配和管理,而ApplicationMaster则完成应用程序的运行

ResourceManager:全局资源管理和任务调度
NodeManager:单个节点的资源管理和监控
ApplicationMaster:单个作业的资源管理和任务监控
Container:资源申请的单位和任务运行的容器

将节点和作业的资源监控放到各个Slave Node上,Master Node只需要通过ResourceManager进行全局的资源管理和任务调度。这样,YARN架构下形成了一个通用的资源管理平台和一个通用的应用计算平台,避免了旧架构的单点问题和资源利用率问题。同时也让在其上运行的应用不再局限于MapReduce形式。

MapReduce


MapReduce是Hadoop进行数据处理的编程模式。具体地来说,即指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,通过Shuffle过程指定并发的Reduce(归约)函数,用来保证所有映射的键值对中的每一个共享相同的键组。
在这里插入图片描述
推荐一个博主Lust-Ring写的《Hadoop MapReduce原理及实例》,里面详细地描述了MapReduce的过程、原理以及实例。

推荐一些阅读材料:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值