Hadoop与Spark等⼤数据框架介绍
分类⽬录:
海量数据的存储问题很早就已经出现了,⼀些⾏业或者部门因为历史的积累,数据量也达到了⼀定的级别。很早以前,当⼀台电脑⽆法存储这么庞⼤的数据时,采⽤的解决⽅案是使⽤NFS(⽹络⽂件系统)将数据分开存储。但是这种⽅法⽆法充分利⽤多台计算机同时进⾏分析数据。
⼀个实际的需求场景:⽇志分析
⽇志分析是对⽇志中的每⼀个⽤户的流量进⾏汇总求和。对于⼀个⽇志⽂件,如果只有这么⼏⾏数据,我们⼀般会采⽤这样的处理⽅式
1. 读取⼀⾏⽇志
2. 抽取⼿机号和流量字段
3. 累加到HashMap中
4. 遍历输出结果
如果数据量变得很⼤呢,⽐如⼀个⽇志⽂件⾥⾯有⼏个GB数据,仍然⼀⾏⼀⾏去读,那么就会因为磁盘的IO瓶颈导致效率太低,速度太慢。如果⼀次性加载到内存,那么就会因为单台计算机的内存空间有限⽽导致内存溢出。如果将中间结果全部缓存到HashMap中,那么也会因为单台计算机的内存空间有限⽽导致内存溢出。可以选择采⽤多线程处理,但是依然⽆法改变资源瓶颈的现实,因为⼀台计算器的CPU 资源,内存资源,磁盘IO瓶颈是定,创建再多的线程也⽆法改变这个现实。
解决思路⼀:纵向扩展
升级硬件,提⾼单机性能(增加内存,增强CPU、⽤更⾼性能的磁盘(如固态硬盘),⽐如可以购买IBM的⾼端服务器。这种⽅法简单易⾏,但单台计算机的扩展空间有限,CPU、内存、磁盘再怎么扩展也是有限的,⽆法⽆限扩展。除此之外,成本较⾼,⾼端服务器常常⾮常昂贵,⼏百万甚⾄上千万⼀台,⼀般的⼩公司承受不起这样⾼昂的成本。
解决思路⼆:横向扩展:
⽤多台节点分布式集处理 ,通过增加节点数量提⾼处理能⼒,这⾥说的节点指的就是⼀台计算机。其思想为任务分摊,通过协作来实现单节点⽆法实现的任务,且成本相对低(可采⽤普通机器) 、易于线性扩展。但是其系统复杂度增加,我们要将我们的web应⽤部署到每⼀个节点上⾯,⽽多个节点协同⼯作时就要考虑:如何调度资源、任务如何监控、中间结果如何调度、系统如何容错、如何实现众多节点间的协调等问题。
Hadoop
Hadoop是⼀个开源的可运⾏于⼤规模集上的分布式⽂件系统和运⾏处理基础框架。其擅长于在廉价机器搭建的集上进⾏海量数据(结构化与⾮结构化)的存储与离线处理。Hadoop就是⼀门⽤来处理⼤数据的技术,就是⽤来解决上述提到的分布式计算⾥⾯的5个技术难题的。
Hadoop 由 Apache Software Foundation 公司于 2005 年秋天作为 Lucene 的⼦ 项⽬ Nutch 的⼀部分正式引⼊。它受到最先由Google Lab 开发的 MapReduce 和 Google File System 的启发。2006 年 3 ⽉份,MapReduce 和 Nutch Distributed File System (NDFS) 分别被纳⼊称为 Hadoop 的项⽬中。  Hadoop 是最受欢迎的在 Internet 上对搜索关键字进⾏内容分类的⼯具,但它也可以解决许多要求极⼤伸缩性的问题。例如,如果您要 grep ⼀个 10TB 的巨型⽂件,会出现什么情况?在传统的系统上,这将需要很长的时间。但是 Hadoop 在设计时就考虑到这些问题,因此能⼤⼤提⾼效率。
Hadoop的⽣态坏境
Hadoop是⼀个能够对⼤量数据进⾏分布式处理的软件框架。具有可靠、⾼效、可伸缩的特点。Hadoop的核⼼是HDFS和
Mapreduce,hadoop2.0还包括YARN。
HDFS(Hadoop分布式⽂件系统)
HDFS(Hadoop Distributed File System)源⾃于Google的GFS论⽂,发表于2003年10⽉,HDFS是GFS克隆版。是Hadoop体系中数据存储管理的基础。它是⼀个⾼度容错的系统,能检测和应对硬件故障,⽤于在低成本的通⽤硬件上运⾏。HDFS简化了⽂件的⼀致性模型,通过流式数据访问,提供⾼吞吐量应⽤程序数据访问功能,适合带有⼤型数据集的应⽤程序。
Client:切分⽂件;访问HDFS;与NameNode交互,获取⽂件位置信息;与DataNode交互,读取和写⼊数据。
NameNode:Master节点,在hadoop1.X中只有⼀个,管理HDFS的名称空间和数据块映射信息,配置副本策略,处理客户端请求。
DataNode:Slave节点,存储实际的数据,汇报存储信息给NameNode。
Secondary NameNode:辅助NameNode,分担其⼯作量;定期合并fsimage和fsedits,推送给NameNode;紧急情况下,可辅助恢复NameNode,但Secondary NameNode并⾮NameNode的热备。
YARN(Yet Another Resource Negotiator)
YARN是⼀种 Hadoop 资源管理器,它是⼀个通⽤资源管理系统,可为上层应⽤提供统⼀的资源管理和调度,它的引⼊为集在利⽤率、资源统⼀管理和数据共享等⽅⾯带来了巨⼤好处。
>Hadoop YARN产⽣背景
直接源于MRv1在⼏个⽅⾯的缺陷:
扩展性受限
单点故障hadoop分布式集搭建
难以⽀持MR之外的计算
除此之外,多计算框架各⾃为战,数据共享困难。⽐如:MapReduce(离线计算框架)、Storm(实时计算框架)、Spark(内存计算框架)。
>Hadoop YARN基本架构
ResourceManager
处理客户端请求
启动/监控ApplicationMaster
监控NodeManager
资源分配与调度
NodeManager
单个节点上的资源管理
处理来⾃ResourceManager的命令
处理来⾃ApplicationMaster的命令
ApplicationMaster
数据切分
为应⽤程序申请资源,并分配给内部任务
任务监控与容错
Hadoop YARN调度框架
Hadoop YARN采⽤双层调度框架。⾸先,RM将资源分配给AM。其次,AM再将资源进⼀步分配给各个Task。YARN与“all or nothing”策略不同(Apache Mesos),其遵循基于资源预留的调度策略,当资源不够时,会为Task预留,直到资源充⾜。
运⾏在YARN上的计算框架
离线计算框架:MapReduce
DAG计算框架:Tez
流式计算框架:Storm
内存计算框架:Spark
图计算框架:Giraph、GraphLib
MapReduce(分布式计算框架)
Hadoop MapReduce是google MapReduce 克隆版。
MapReduce是⼀种计算模型,⽤以进⾏⼤数据量的计算。其中Map对数据集上的独⽴元素进⾏指定的操作,⽣成键-值对形式中间结果。Reduce则对中间结果中相同“键”的所有“值”进⾏规约,以得到最终结果。MapReduce这样的功能划分,⾮常适合在⼤量计算机组成的分布式并⾏环境⾥进⾏数据处理。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。

发表评论