小白系列之通俗易懂的Hadoop

Hadoop集群

由HDFS、MapReduce、Yarn三部分分开诉说。只用简单的话来介绍基本原理,涉及不深,如有错误请多多指点。
Hadoop是基于Google的集群系统理论来进行的开源实现:
Google的集群系统:GFS、MapReduce、BigTable
Hadoop的集群系统:HDFS、MapReduce、HBase
Hadoop设计的初衷是为了解决Nutch的海量数据存储和处理的需求,可以解决大数据场景下的数据存储和处理的问题。一开始HDFS和MapReduce是作为Nutch的两个组件来使用,后来发现这两个组件不只是可以用在Nutch搜索,所以就单独取出来组成了Hadoop。
需要注意的是Hadoop处理的离线数据,即在数据已知以及不要求实时性的场景下使用。

传统数据的特点

  1. GB、TB级别的数据
  2. 数据增长不快
  3. 主要为结构化的数据
  4. 统计和报表

大数据的特点

  1. TB、PB级别的数据

  2. 持续的高速增长

  3. 半结构化、非结构化的数据

  4. 数据挖掘和预测性分析

  5. 海量数据的获取、存储、聚合、管理这些数据以及对数据进行深度分析的新技术和新能力。

Hadoop名字的起源: Doug Cutting如此解释Hadoop的得名:“这个名字是我孩子给一头吃饱了的棕黄色大象命名的。我的命名标准就是简短,容易发音和拼写,没有太多的意义,并且不会被用于别处。小孩子是这方面的高手。Google就是由小孩命名的。”

组成

HDFS:用于分布式文件的存储

MapReduce:用于数据的计算

Yarn:进行任务调度。是Hadoop2.0出现的

HDFS

什么是HDFS?

HDFS全称是Hadoop分布式文件存储系统,通过将大规模数据文件切分为block数据块,并多复本的存储在集群的多个DataNode节点中,来保证大数据存储的高可靠高性能。

有哪些优缺点?

优点是:1.支持超大文件;2.可以快速检测和应对机器故障(通过故障检测和心跳机制);3.有很高数据吞吐量(通过流式数据访问和简化一致性模型);4.高容错性(通过多个副本);5.可以构建在廉价的机器上。
缺点是:1.不适合低延迟的访问需求(HDFS注重于高数据吞吐量);2.大量小文件会影响NameNode的性能(NameNode内存的大小决定了HDFS可保存的文件数量);3.不适合多用户写入和修改文件(HDFS只支持一次写入多次读取,只能追加不能修改);

读数据流程

1.客户端向NameNode提交读数据申请;2.NameNode通过查找元数据返回文件的block列表和DataNode地址;3.客户端会挑选最近的DataNode读取block,读取完成后关当前闭DataNode连接并寻找下一个block所在的DataNode;4.每读完一个block都会进行checknum验证,如果出现错误会从下一个拥有该block副本的DataNode读取;5.全部读取完成后DataNode通知NameNode关闭连接。

写数据流程

1.客户端向NameNode提交写数据申请;2.NameNode会检查该文件是否存在,返回是否可以上传;3.当客户端写入文件时,会向NameNode申请blocks,获取合适的DataNode列表;4.以管道的形式将开发者切分好的文件写入DataNode中,该DataNode同时向副本DataNode写入数据;5.文件存储成功后会返回一个应答信息给客户端完成数据写入。

大量小文件处理

危害:对于HDFS来说,大量小文件需要大量的元数据,会大量消耗NameNode的存储控制;对于MapReduce来说,大量小文件会在启动时创建大量的mapper,内存消耗巨大。
处理:可以将大量小文件合成一个大文件来处理。1.可以使用Hadoop Archive来将小文件合并成一个HAR文件,HAR文件只占用一条元数据,但是其中会记录小文件的索引信息。 2.可以开发InputFormat,从多个小文件中读取数据作为一个Mapper的输入。

MapReduce

什么是MapReduce?

MapReduce是一种分布式计算模型,用于解决海量数据的计算问题。它主要由Map和Reduce两个阶段组成,用户只需要实现map()和reduce()两个函数即可实现分布式计算。
Map阶段:1.读取文件内容,解析为key-value对,每一个键值对会调用一次map函数;2.通过编写逻辑对输入的键值对进行处理转换成新的键值对输出;3.输出的键值对会进行分区,相同分区的数据会根据key的顺序放在同一个集合中。
Reduce阶段:1.reduce会主动获取map任务的输出,按照不同的分区复制到不同的reduce。2.通过编写逻辑对多个map任务的输出进行处理,转换为新的键值对输出;3.最后将结果保存在文件中。

shuffle机制

shuffle机制的MapReduce框架最为核心的部分,主要是指将Map输出结果交给Reduce的过程。可以分为Map端和Redeuce端。
在Map端,Map的输出结果会先写入环形缓冲区,缓存中的数据会进行分区、排序和合并,当缓存达到溢写比后会写出为磁盘文件,在Map任务结束之前会将多个溢写文件合并为一个大文件,通知对应的Reduce任务进行处理。
在Reduce端,从不同的Map处获取任务数据后放入缓冲区进行归并和合并操作,最后交给reduce函数处理

处理数据倾斜问题

数据倾斜的产生是由于数据的key分化严重不均,形成一部分数据很多,一部分数据很少的局面,导致存在reduce节点运行过慢从而增加整体运行时间的情况。
1.可以将一次的MapReduce操作分为两次,第一次map处理时将key随机分到不同的reduce中先进行一次处理,再将相同key分配到reduce中进行第二次处理。
2.将可能出现大量数据的key分为多组进行reduce操作,再进行第二次MR操作。
3.增加reduce的内存,增加reduce的个数

实现二次排序

优先按照第一列排序,第一列相同则按照第二列排序,都相同则保留
1.编写bean类将两列的数据封装,在bean中的comparato方法中实现需求逻辑;2.Mapper中读取两列封装为一个bean作为key,value为空。

MR调优策略

1.减少数据的传输量
2.尽量使用内存
3.减少磁盘I/O的次数
4.增大任务并行数
5.除此之外还有根据自己集群及网络的实际情况来调优

Yarn

Yarn在集群中有什么作用?

YARN是Hadoop的集群资源管理系统。主要由资源管理器Resource Manager和节点管理器Node Manager组成。

Yarn的组成

Resource Manager是一个全局资源管理器,负责整个系统的资源管理和分配。主要由调度器(Scheduler)和应用程序管理器(ApplicationsManager)组成。
Scheduler调度器:根据容量、队列等限定条件将系统中的资源分配给各个正在运行的应用程序。分配资源的单位是资源容器Resource Container。
Container资源容器:是一个动态资源分配单位,它将内存。CPU等资源封装在一起,从而限定每个任务使用的资源量。
ApplicationsManager应用程序管理器:负责管理整个系统中所有应用程序,包括应用程序提交、ApplicationMaster的启动、监控AM的运行状态并在失败时重新启动它等。
Node Manager是每个节点上的资源和任务管理器,它会定时的向ResourceManager汇报本节点上的资源使用情况和Container容器的运行状态。同事会接受和处理来自ApplicationMaster的Container启动停止等各种请求。
ApplicationMaster(AM):用户提交的每一个应用程序都包含一个AM,主要用于与RM调度器协商获取Container容器资源、将得到的任务进一步分配个内部的任务、与NM通信来启动和停止任务、监控所有任务的运行状态并在任务失败时重新申请任务资源来重启任务。

执行过程

客户端发起请求,在ResourceManager中由Scheduler分配Container资源,由ApplicationsManager启动应用程序和ApplicationMaster来生成一个资源队列,在NodeManager上执行。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值