hadoop spark_spark-hadoop - CSDN
  • 二、Spark相对Hadoop的优越性 三、三大分布式计算系统 Spark,是分布式计算平台,是一个用scala语言编写的计算框架,基于内存的快速、通用、可扩展的大数据分析引擎 Hadoop,是分布式管理、存储、计算的生态系统...

    目录

    一、 两者的各方面比较

    二、Spark相对Hadoop的优越性

    三、三大分布式计算系统


    Spark,是分布式计算平台,是一个用scala语言编写的计算框架,基于内存的快速、通用、可扩展的大数据分析引擎

    Hadoop,是分布式管理、存储、计算的生态系统;包括HDFS(存储)、MapReduce(计算)、Yarn(资源调度)

     

    一、实现原理的比较

    Hadoop和Spark都是并行计算,两者都是用MR模型进行计算

    Hadoop一个作业称为一个Job,Job里面分为Map Task和Reduce Task阶段,每个Task都在自己的进程中运行,当Task结束时,进程也会随之结束;

    Spark用户提交的任务称为application,一个application对应一个SparkContext,app中存在多个job,每触发一次action操作就会产生一个job。这些job可以并行或串行执行,每个job中有多个stage,stage是shuffle过程中DAGScheduler通过RDD之间的依赖关系划分job而来的,每个stage里面有多个task,组成taskset,由TaskScheduler分发到各个executor中执行;executor的生命周期是和app一样的,即使没有job运行也是存在的,所以task可以快速启动读取内存进行计算。

    ps:一个Application -> 多个job ->一个job多个stage -> 一个stage多个task

     

    二、 两者的各方面比较

    (1)Spark对标于Hadoop中的计算模块MR,但是速度和效率比MR要快得多;

    (2)Spark没有提供文件管理系统,所以,它必须和其他的分布式文件系统进行集成才能运作,它只是一个计算分析框架,专门用来对分布式存储的数据进行计算处理,它本身并不能存储数据;

    (3)Spark可以使用Hadoop的HDFS或者其他云数据平台进行数据存储,但是一般使用HDFS;

    (4)Spark可以使用基于HDFS的HBase数据库,也可以使用HDFS的数据文件,还可以通过jdbc连接使用Mysql数据库数据;Spark可以对数据库数据进行修改删除,而HDFS只能对数据进行追加和全表删除;

    (5)Spark数据处理速度秒杀Hadoop中MR;

    (6)Spark处理数据的设计模式与MR不一样,Hadoop是从HDFS读取数据,通过MR将中间结果写入HDFS;然后再重新从HDFS读取数据进行MR,再刷写到HDFS,这个过程涉及多次落盘操作,多次磁盘IO,效率并不高;而Spark的设计模式是读取集群中的数据后,在内存中存储和运算,直到全部运算完毕后,再存储到集群中;

    (7)Spark是由于Hadoop中MR效率低下而产生的高效率快速计算引擎,批处理速度比MR快近10倍,内存中的数据分析速度比Hadoop快近100倍(源自官网描述);

    (8)Spark中RDD一般存放在内存中,如果内存不够存放数据,会同时使用磁盘存储数据;通过RDD之间的血缘连接、数据存入内存中切断血缘关系等机制,可以实现灾难恢复,当数据丢失时可以恢复数据;这一点与Hadoop类似,Hadoop基于磁盘读写,天生数据具备可恢复性;

    (9)Spark引进了内存集群计算的概念,可在内存集群计算中将数据集缓存在内存中,以缩短访问延迟,对7的补充;

    (10)Spark中通过DAG图可以实现良好的容错。

     

    三、Spark相对Hadoop的优越性

    (1)Spark基于RDD,数据并不存放在RDD中,只是通过RDD进行转换,通过装饰者设计模式,数据之间形成血缘关系和类型转换;

    (2)Spark用scala语言编写,相比java语言编写的Hadoop程序更加简洁;

    (3)相比Hadoop中对于数据计算只提供了Map和Reduce两个操作,Spark提供了丰富的算子,可以通过RDD转换算子和RDD行动算子,实现很多复杂算法操作,这些在复杂的算法在Hadoop中需要自己编写,而在Spark中直接通过scala语言封装好了,直接用就ok;

    (4)Hadoop中对于数据的计算,一个Job只有一个Map和Reduce阶段,对于复杂的计算,需要使用多次MR,这样涉及到落盘和磁盘IO,效率不高;而在Spark中,一个Job可以包含多个RDD的转换算子,在调度时可以生成多个Stage,实现更复杂的功能;

    (5)Hadoop中中间结果存放在HDFS中,每次MR都需要刷写-调用,而Spark中间结果存放优先存放在内存中,内存不够再存放在磁盘中,不放入HDFS,避免了大量的IO和刷写读取操作;

    (6)Hadoop适合处理静态数据,对于迭代式流式数据的处理能力差;Spark通过在内存中缓存处理的数据,提高了处理流式数据和迭代式数据的性能;

     

    四、三大分布式计算系统

    Hadoop适合处理离线的静态的大数据;

    Spark适合处理离线的流式的大数据;

    Storm/Flink适合处理在线的实时的大数据。

     

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • 谈到大数据,相信大家对Hadoop和Apache Spark这两个名字并不陌生。但我们往往对它们的理解只是提留在字面上,并没有对它们进行深入的思考,下面不妨跟我一块看下它们究竟有什么异同。 解决问题的层面不一样 首先...

      谈到大数据,相信大家对Hadoop和Apache Spark这两个名字并不陌生。但我们往往对它们的理解只是提留在字面上,并没有对它们进行深入的思考,下面不妨跟我一块看下它们究竟有什么异同。

      解决问题的层面不一样

      首先,Hadoop和Apache Spark两者都是大数据框架,但是各自存在的目的不尽相同。Hadoop实质上更多是一个分布式数据基础设施: 它将巨大的数据集分派到一个由普通计算机组成的集群中的多个节点进行存储,意味着您不需要购买和维护昂贵的服务器硬件。

      同时,Hadoop还会索引和跟踪这些数据,让大数据处理和分析效率达到前所未有的高度。Spark,则是那么一个专门用来对那些分布式存储的大数据进行处理的工具,它并不会进行分布式数据的存储。

      两者可合可分

      Hadoop除了提供为大家所共识的HDFS分布式数据存储功能之外,还提供了叫做MapReduce的数据处理功能。所以这里我们完全可以抛开Spark,使用Hadoop自身的MapReduce来完成数据的处理。

      相反,Spark也不是非要依附在Hadoop身上才能生存。但如上所述,毕竟它没有提供文件管理系统,所以,它必须和其他的分布式文件系统进行集成才能运作。这里我们可以选择Hadoop的HDFS,也可以选择其他的基于云的数据系统平台。但Spark默认来说还是被用在Hadoop上面的,毕竟,大家都认为它们的结合是最好的。

      以下是从网上摘录的对MapReduce的最简洁明了的解析:

      我们要数图书馆中的所有书。你数1号书架,我数2号书架。这就是“Map”。我们人越多,数书就更快。
    现在我们到一起,把所有人的统计数加在一起。这就是“Reduce”。

      Spark数据处理速度秒杀MapReduce

      Spark因为其处理数据的方式不一样,会比MapReduce快上很多。MapReduce是分步对数据进行处理的: ”从集群中读取数据,进行一次处理,将结果写到集群,从集群中读取更新后的数据,进行下一次的处理,将结果写到集群,等等…“ Booz Allen Hamilton的数据科学家Kirk Borne如此解析。

      反观Spark,它会在内存中以接近“实时”的时间完成所有的数据分析:“从集群中读取数据,完成所有必须的分析处理,将结果写回集群,完成,” Born说道。Spark的批处理速度比MapReduce快近10倍,内存中的数据分析速度则快近100倍。

      如果需要处理的数据和结果需求大部分情况下是静态的,且你也有耐心等待批处理的完成的话,MapReduce的处理方式也是完全可以接受的。

      但如果你需要对流数据进行分析,比如那些来自于工厂的传感器收集回来的数据,又或者说你的应用是需要多重数据处理的,那么你也许更应该使用Spark进行处理。

      大部分机器学习算法都是需要多重数据处理的。此外,通常会用到Spark的应用场景有以下方面:实时的市场活动,在线产品推荐,网络安全分析,机器日记监控等。

      灾难恢复

      两者的灾难恢复方式迥异,但是都很不错。因为Hadoop将每次处理后的数据都写入到磁盘上,所以其天生就能很有弹性的对系统错误进行处理。

      Spark的数据对象存储在分布于数据集群中的叫做弹性分布式数据集(RDD: Resilient Distributed Dataset)中。“这些数据对象既可以放在内存,也可以放在磁盘,所以RDD同样也可以提供完成的灾难恢复功能,”Borne指出。
     

    展开全文
  • 海量数据的存储问题很早就已经出现了,一些行业或者部门因为历史的积累,数据量也达到了一定的级别。很早以前,当一台电脑无法存储这么庞大的数据时,采用的解决方案是使用NFS(网络文件系统)将数据分开存储。...

    分类目录:《大数据与云计算》总目录

    海量数据的存储问题很早就已经出现了,一些行业或者部门因为历史的积累,数据量也达到了一定的级别。很早以前,当一台电脑无法存储这么庞大的数据时,采用的解决方案是使用NFS(网络文件系统)将数据分开存储。但是这种方法无法充分利用多台计算机同时进行分析数据。

    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。
    Hadoop生态系统

    HDFS(Hadoop分布式文件系统)

    HDFS(Hadoop Distributed File System)源自于Google的GFS论文,发表于2003年10月,HDFS是GFS克隆版。是Hadoop体系中数据存储管理的基础。它是一个高度容错的系统,能检测和应对硬件故障,用于在低成本的通用硬件上运行。HDFS简化了文件的一致性模型,通过流式数据访问,提供高吞吐量应用程序数据访问功能,适合带有大型数据集的应用程序。
    Hadoop分布式文件系统

    • 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在几个方面的缺陷:

    • 扩展性受限
    • 单点故障
    • 难以支持MR之外的计算

    除此之外,多计算框架各自为战,数据共享困难。比如:MapReduce(离线计算框架)、Storm(实时计算框架)、Spark(内存计算框架)。
    #####Hadoop YARN基本架构
    Hadoop YARN各模块组成

    • ResourceManager

      • 处理客户端请求
      • 启动/监控ApplicationMaster
      • 监控NodeManager
      • 资源分配与调度
    • NodeManager

      • 单个节点上的资源管理
      • 处理来自ResourceManager的命令
      • 处理来自ApplicationMaster的命令
    • ApplicationMaster

      • 数据切分
      • 为应用程序申请资源,并分配给内部任务
      • 任务监控与容错
        Hadoop YARN运行流程分析
    Hadoop YARN调度框架

    Hadoop YARN采用双层调度框架。首先,RM将资源分配给AM。其次,AM再将资源进一步分配给各个Task。YARN与“all or nothing”策略不同(Apache Mesos),其遵循基于资源预留的调度策略,当资源不够时,会为Task预留,直到资源充足。

    Hadoop YARN调度框架

    运行在YARN上的计算框架
    • 离线计算框架:MapReduce
    • DAG计算框架:Tez
    • 流式计算框架:Storm
    • 内存计算框架:Spark
    • 图计算框架:Giraph、GraphLib

    MapReduce(分布式计算框架)

    Hadoop MapReduce是google MapReduce 克隆版。
    分布式计算框架
    MapReduce是一种计算模型,用以进行大数据量的计算。其中Map对数据集上的独立元素进行指定的操作,生成键-值对形式中间结果。Reduce则对中间结果中相同“键”的所有“值”进行规约,以得到最终结果。MapReduce这样的功能划分,非常适合在大量计算机组成的分布式并行环境里进行数据处理。

    • JobTracker:Master节点,只有一个,管理所有作业,作业/任务的监控、错误处理等;将任务分解成一系列任务,并分派给TaskTracker。
    • TaskTracker:Slave节点,运行Map Task和Reduce Task;并与JobTracker交互,汇报任务状态。
    • Map Task:解析每条数据记录,传递给用户编写的map(),并执行,将输出结果写入本地磁盘(如果为map-only作业,直接写入HDFS)。
    • Reducer Task:从Map Task的执行结果中,远程读取输入数据,对数据进行排序,将数据按照分组传递给用户编写的reduce函数执行。
      MapReduce处理流程

    Hive(基于Hadoop的数据仓库)

    Hive由facebook开源,最初用于解决海量结构化的日志数据统计问题。Hive定义了一种类似SQL的查询语言(HQL),将SQL转化为MapReduce任务在Hadoop上执行,通常用于离线分析。
    HIVE

    HBase(分布式列存数据库)

    Hbae源自Google的Bigtable论文,发表于2006年11月,HBase是Google Bigtable克隆版。HBase是一个针对结构化数据的可伸缩、高可靠、高性能、分布式和面向列的动态模式数据库。和传统关系数据库不同,HBase采用了BigTable的数据模型:增强的稀疏排序映射表(Key/Value),其中,键由行关键字、列关键字和时间戳构成。HBase提供了对大规模数据的随机、实时读写访问,同时,HBase中保存的数据可以使用MapReduce来处理,它将数据存储和并行计算完美地结合在一起。
    HBase
    HBase和Hive在大数据架构中处在不同位置,HBase主要解决实时数据查询问题,Hive主要解决数据处理和计算问题,一般是配合使用。

    Zookeeper(分布式协作服务)

    源自Google的Chubby论文,发表于2006年11月,Zookeeper是Chubby克隆版
    解决分布式环境下的数据管理问题:统一命名,状态同步,集群管理,配置同步等。

    Sqoop(数据同步工具)

    Sqoop是SQL-to-Hadoop的缩写,主要用于传统数据库和Hadoop之前传输数据。数据的导入和导出本质上是Mapreduce程序,充分利用了MR的并行化和容错性。

    Pig(基于Hadoop的数据流系统)

    由yahoo!开源,设计动机是提供一种基于MapReduce的ad-hoc(计算在query时发生)数据分析工具。其定义了一种数据流语言—Pig Latin,将脚本转换为MapReduce任务在Hadoop上执行,通常用于进行离线分析。

    Spark

    Spark是UC Berkeley AMPLab开发的是一种计算框架,分布式资源工作交由集群管理软件(Mesos、YARN) 。

    ###Spark的特点

    • 先进架构
      • Spark采用Scala语言编写,底层采用了actor model的akka作为通讯框架,代码十分简洁高效。
      • 基于DAG图的执行引擎,减少多次计算之间中间结果写到Hdfs的开销。
      • 建立在统一抽象的RDD(分布式内存抽象)之上,使得它可以以基本一致的方式应对不同的大数据处理场景。
    • 高效
      • 提供Cache机制来支持需要反复迭代的计算或者多次数据共享,减少数据读取的IO开销。
      • 与Hadoop的MapReduce相比,Spark基于内存的运算比MR要快100倍;而基于硬盘的运算也要快10倍!
    • 易用
      • Spark提供广泛的数据集操作类型(20+种),不像Hadoop只提供了Map和Reduce两种操作。
      • Spark支持Java,Python和Scala API,支持交互式的Python和Scala的shell。
    • 提供整体解决方案
      • 以其RDD模型的强大表现能力,逐渐形成了一套自己的生态圈,提供了full-stack的解决方案。
      • 主要包括Spark内存中批处理,Spark SQL交互式查询,Spark Streaming流式计算, GraphX和MLlib提供的常用图计算和机器学习算法。
    • 与Hadoop无缝连接
      • Spark可以使用YARN作为它的集群管理器
      • 读取HDFS,HBase等一切Hadoop的数据

    Spark整体架构

    Spark整体架构
    Spark提供了多种高级工具,如: Shark SQL应用于即席查询(Ad-hoc query)、Spark Streaming应用于流式计算、 MLlib应用于机器学习、GraphX应用于图处理。Spark还可以基于自带的standalone集群管理器独立运行,也可以部署在Apache Mesos 和 Hadoop YARN 等集群管理器上运行。Spark可以访问存储在HDFS、 Hbase、Cassandra、Amazon S3、本地文件系统等等上的数据,Spark支持文本文件,序列文件,以及任何Hadoop的InputFormat。

    Spark核心概念

    Spark任务提供多层分解的概念,Spark组件将用户的应用程序分解为内部执行任务并提供执行容器,资源管理为spark组件提供资源管理和调度。

    Spark任务

    • 应用程序:由一个driver program和多个job构成
    • job:由多个stage组成
    • stage:对应一个taskset
    • taskset:对应一组关联的相互之间没有shuffle依赖关系的task组成。
    • task:任务最小的工作单元
      Spark任务

    Spark组件

    • Driver Program (驱动程序) :Spark 的核心组件
      • 构建SparkContext(Spark应用的入口,它负责和整个集群的交互,创建需要的变量,还包含集群的配置信息等)
      • 将用户提交的job转换为DAG图(类似数据处理的流程图)
      • 根据策略将DAG图划分为多个stage,根据分区从而生成一系列tasks
      • 根据tasks要求向资源管理器申请资源
      • 提交任务并检测任务状态
    • Executor
      • 真正执行task的单元,一个Worker Node上可以有多个Executor

    资资源管理组件

    • YARN(通用):Master/Slave结构
      • Resource Manager(RM):全局的资源管理器,负责系统的资源管理和分配
      • Node Manager(NM):每个节点上的资源和任务管理器
      • Application Master(AM):每个应用程序都有一个,负责任务的调度和监视,并与RM调度器协商为任务获取资源。
    • Standalone(Spark自带):Master/Slave结构
      • Master:类似于YARN的RM
      • Worker:类似于YARN的NM

    Spark端到端流程

    Spark的Driver Program (简称Driver)包含用户的应用程序,Driver完成task的解析和生成。

    1. Driver向Cluster Manager(集群资源管理器)申请运行task需要的资源。
    2. 集群资源管理器为task分配满足要求的节点,并在节点按照要求创建Executor
    3. 创建的Executor向Driver注册。
    4. Driver将Spark应用程序的代码和文件传送给分配的Executor
    5. Executor运行task,运行完之后将结果返回给Driver或者写入HDFS或其他介质。
      Spark端到端流程

    Spark流程

    Spark on Standalone

    Master和Worker是Standalone的角色,Driver和Executor是Spark的角色。Master负责分配资源,分配Driver和Executor,让Worker启动Driver和Executor,只管理到Executor层,不涉及任务。Driver负责生成task,并与Executor通信,进行任务的调度和结果跟踪,不涉及资源。

    Driver运行在Worker

    Driver运行在Worker

    1. 客户端把作业发布到Master
    2. Master让一个Worker启动Driver,并将作业推送给Driver
    3. Driver进程生成一系列task
    4. Driver向Master申请资源
    5. Master让调度的Worker启动Exeuctor
    6. Exeuctor启动后向Driver注册。
    7. Driver将task调度到Exeuctor执行。
    8. Executor执行结果写入文件或返回Driver
    Driver运行在Client

    Driver运行在Client

    1. 客户端启动后直接运行用户程序,启动Driver
    2. Driver进程生成一系列task
    3. Driver向Master申请资源
    4. Master让调度的Worker启动Exeuctor
    5. Exeuctor启动后向Driver注册。
    6. Driver将task调度到Exeuctor执行。
    7. Executor执行结果写入文件或返回Driver

    Spark的核心组件

    Spark的核心组件
    Spark的核心组件包括RDD、Scheduler、Storage、Shuffle四部分:

    • RDD是Spark最核心最精髓的部分,Spark将所有数据都抽象成RDD。
    • Scheduler是Spark的调度机制,分为DAGScheduler和TaskScheduler。
    • Storage模块主要管理缓存后的RDD、shuffle中间结果数据和broadcast数据
    • Shuffle分为Hash方式和Sort方式,两种方式的shuffle中间数据都写本地盘

    RDD(Resilient Distributed Datasets)

    RDD是弹性分布式数据集,是只读的分区记录集合。每个RDD有5个主要的属性:

    • 一组分片(Partition):数据集的最基本组成单位
    • 一个计算每个分片的函数:对于给定的数据集,需要做哪些计算
    • 依赖(Dependencies):RDD的依赖关系,描述了RDD之间的lineage
    • preferredLocations(可选):对于data partition的位置偏好
    • partitioner(可选):对于计算出来的数据结果如何分发

    作用于RDD上的Operation分为转换(transformantion)和动作(action)。 Spark中的所有“转换”都是惰性的,在执行“转换”操作,并不会提交Job,只有在执行“动作”操作,所有operation才会被提交到cluster中真正的被执行。这样可以大大提升系统的性能。

    • 转换:从现有的数据集创建一个新的数据集即数据集中的内容会发生更改,由数据集A转换成为数据集B
    • 动作:在数据集上运行计算后,返回一个值给驱动程序。 即数据集中的内容会被归约为一个具体的数值(Scala标量、集合类型的数据或存储)。

    RDD拥有的操作比MR丰富的多,不仅仅包括Map、Reduce操作,还包括右图的filter、sort、join、save、count等操作,所以Spark比MR更容易方便完成更复杂的任务。

    RDD持久化

    默认情况下,每一个转换过的RDD都会在它之上执行一个动作时被重新计算。如果RDD只被使用一次或者很少次,不需要持久化。如果RDD被重复使用或者计算其代价很高,才考虑持久化。另外,shuffle后生成的RDD尽量持久化,因为shuffle代价太高。RDD被缓存后,Spark将会在集群中,保存相关元数据,下次查询这个RDD时,它将能更快速访问,不需要计算。如果持久化无谓的RDD,会浪费内存(或硬盘)空间,反而降低系统整体性能

    RDD依赖关系

    RDD只能基于在稳定物理存储中的数据集和其他已有的RDD上执行确定性操作来创建。能从其他RDD通过确定操作创建新的RDD的原因是RDD含有从其他RDD衍生(即计算)出本RDD的相关信息(即Lineage)。Dependency代表了RDD之间的依赖关系,即血缘(Lineage),分为窄依赖和宽依赖:
    窄依赖和宽依赖

    • 窄依赖:一个父RDD最多被一个子RDD用在一个集群节点上管道式执行。比如map、filter、union等
    • 宽依赖:子RDD的分区依赖于父RDD的所有分区,这是因为shuffle类操作要求所有父分区可用。比如groupByKey、reduceByKey、 sort、partitionBy等

    根据RDD依赖关系的不同,Spark将每一个job分为不同的stage,stage之间的依赖关系形成了DAG图。对于窄依赖,Spark将其尽量划分在同一个stage中,因为它们可以进行流水线计算,而宽依赖往往意味着shuffle操作,这也是Spark划分stage的主要边界。
    RDD依赖关系
    宽/窄依赖的概念不止用在stage划分中,对容错也很有用。若Transformation操作中间发生计算失败,如果运算是窄依赖,只要把丢失的父RDD分区重算即可,跟其他节点没有依赖,这样可以大大加快场景恢复的开销,但如果运算是宽依赖,则需要父RDD的所有分区都存在, 重算代价就较高。当Lineage特别长时或者有宽依赖时,主动调用 checkpoint把当前数据写入稳定存储,作为检查点。

    Scheduler

    Scheduler模块作为Spark最核心的模块之一,充分体现了Spark与MapReduce的不同之处,体现了Spark DAG思想的精巧和设计的优雅。Scheduler模块分为两大主要部分,DAGScheduler和TaskScheduler。
    Scheduler
    DAGScheduler把一个spark作业转换成成stage的DAG(Directed Acyclic Graph有向无环图),根据RDD和stage之间的关系,找出开销最小的调度方法,然后把stage以TaskSet的形式提交给TaskScheduler。TaskScheduler模块用于与DAGScheduler交互,负责任务的具体调度和运行。任务调度模块基于两个Trait:TaskScheduler和 SchedulerBackend。

    Storage

    Storage模块主要分为两层:

    • 通信层:Storage模块采用的是master-slave结构来实现通信层,master和slave之间传输控制信息、状态信息,这些都是通过通信层来实现的。
    • 存储层:Storage模块需要把数据存储到disk或是memory上面,有可能还需replicate到远端,这都是由存储层来实现和提供相应接口。

    Storage模块提供了统一的操作类BlockManager,外部类与storage模块打交道都需要通过调用BlockManager相应接口来实现。Storage模块存取的最小单位是数据块(Block),Block与RDD中的Partition一一对应,所以所有的转换或动作操作最终都是对Block进行操作。

    Shuffle

    Shuffle 中Map任务产生的结果会根据所设置的partitioner算法填充到当前执行任务所在机器的每个桶中。Reduce任务启动时时,会根据任务的ID,所依赖的Map任务ID以及MapStatus从远端或本地的BlockManager获取相应的数据作为输入进行处理。Shuffle数据必须持久化磁盘,不能缓存在内存。

    Spark之上提供了四种应用库:

    • Spark SQL 是为处理结构化数据而设计的模块
    • Spark Streaming 可以很容易地创建可扩展和容错性的流式应用
    • MLlib 是Spark的可扩展机器学习库
    • GraphX 是Spark的并行图计算API

    Spark应用库

    以上便是对Hadoop、Spark的一些浅显的介绍。事实上,解决大数据处理相关的问题,往往要经过数据收集(Flume、Kafka、Sqoop)、数据存储(HDFS、HBase)、资源管理(YARN)、计算(MapReduce、Spark)、数据分析(Pandas、NumPy、R)、数据可视化(Echart、Tableau)等环节。各个环节都有其相应的工具,Hadoop和Spark就是大数据处理流程中非常常用的两个框架。

    展开全文
  • 1、概述 大数据现在是业内炙手可热的话题,随着技术的发展,如HDFS,大数据存储技术已经不在是难点,但是对大数据如何做好存储后的下一步处理将是未来竞争的焦点,目前比较受欢迎的Storm, Spark, Hadoop三个大数据...

    最初我们来到这个世界,是因为不得不来;最终我们离开这个世界,是因为不得不走。——《余华作品集》

    1、概述

      大数据现在是业内炙手可热的话题,随着技术的发展,如HDFS,大数据存储技术已经不在是难点,但是对大数据如何做好存储后的下一步处理将是未来竞争的焦点,目前比较受欢迎的Storm, Spark, Hadoop三个大数据处理工具都是JVM上的语言写成的。
      
      由于Google没有开源Google分布式计算模型的技术实现,所以其他互联网公司只能根据Google三篇技术论文中的相关原理,搭建自己的分布式计算系统。

      Yahoo的工程师Doug Cutting和Mike Cafarella在2005年合作开发了分布式计算系统Hadoop。后来,Hadoop被贡献给了Apache基金会,成为了Apache基金会的开源项目。Doug Cutting也成为Apache基金会的主席,主持Hadoop的开发工作。Hadoop采用MapReduce分布式计算框架,并根据GFS开发了HDFS分布式文件系统,根据BigTable开发了HBase数据存储系统。尽管和Google内部使用的分布式计算系统原理相同,但是Hadoop在运算速度上依然达不到Google论文中的标准。不过,Hadoop的开源特性使其成为分布式计算系统的事实上的国际标准。Yahoo,Facebook,Amazon以及国内的百度,阿里巴巴等众多互联网公司都以Hadoop为基础搭建自己的分布式计算系统。

      Storm是Twitter主推的分布式计算系统,它由BackType团队开发,是Apache基金会的孵化项目。它在Hadoop的基础上提供了实时运算的特性,可以实时的处理大数据流。不同于Hadoop和Spark,Storm不进行数据的收集和存储工作,它直接通过网络实时的接受数据并且实时的处理数据,然后直接通过网络实时的传回结果。

      Spark也是Apache基金会的开源项目,它由加州大学伯克利分校的实验室开发,是另外一种重要的分布式计算系统。它在Hadoop的基础上进行了一些架构上的改良。Spark与Hadoop最大的不同点在于,Hadoop使用硬盘来存储数据,而Spark使用内存来存储数据,因此Spark可以提供超过Hadoop100倍的运算速度。但是,由于内存断电后会丢失数据,Spark不能用于处理需要长期保存的数据。
      
      Hadoop,Storm和Spark是目前最重要的三大分布式计算系统,Hadoop常用于离线的复杂的大数据分析处理,Spark常用于离线的快速的大数据处理,而Storm常用于在线的实时的大数据处理。本文主要介绍三大分布式系统的各自特点和其应用场景。

    2、Hadoop

      Hadoop是使用Java编写,允许分布在集群,使用简单的编程模型的计算机大型数据集处理的Apache的开源框架。 Hadoop框架应用工程提供跨计算机集群的分布式存储和计算的环境。 Hadoop是专为从单一服务器到上千台机器扩展,每个机器都可以提供本地计算和存储。

    2.1 Hadoop架构

    这里写图片描述
      Hadoop是Apache的一个分布式系统基础架构,可以为海量数据提供存储和计算。Hadoop 2.0即第二代Hadoop系统,其框架最核心的设计是HDFS、MapReduce和YARN。其中,HDFS为海量数据提供存储,MapReduce用于分布式计算,YARN用于进行资源管理。
      Hadoop 2.0的主要改进有:

      1、通过YARN实现资源的调度与管理,从而使Hadoop 2.0可以运行更多种类的计算框架,如Spark等。

      2、实现了NameNode的HA方案,即同时有2个NameNode(一个Active另一个Standby),如果ActiveNameNode挂掉的话,另一个NameNode会转入Active状态提供服务,保证了整个集群的高可用。

      3、实现了HDFS federation,由于元数据放在NameNode的内存当中,内存限制了整个集群的规模,通过HDFS federation使多个NameNode组成一个联邦共同管理DataNode,这样就可以扩大集群规模。

      4、Hadoop RPC序列化扩展性好,通过将数据类型模块从RPC中独立出来,成为一个独立的可插拔模块。

    2.1.1 MapReduce

      MapReduce是一种并行编程模型,用于编写普通硬件的设计,谷歌对大量数据的高效处理(多TB数据集)的分布式应用在大型集群(数千个节点)以及可靠的容错方式。 MapReduce程序可在Apache的开源框架Hadoop上运行。

    2.1.2 HDFS

      HDFS是一个分布式文件系统,具有高容错的特点。它可以部署在廉价的通用硬件上,提供高吞吐率的数据访问,适合需要处理海量数据集的应用程序。

    主要特点:

    1、支持超大文件:支持TB级的数据文件。

    2、检测和快速应对硬件故障:HDFS的检测和冗余机制很好克服了大量通用硬件平台上的硬件故障问题。

    3、高吞吐量:批量处理数据。

    4、简化一致性模型:一次写入多次读取的文件处理模型有利于提高吞吐量。

    HDFS不适合的场景:低延迟数据访问;大量的小文件;多用户写入文件、修改文件。

    HDFS的构成:NameNode保存着HDFS的名字空间,对于任何对文件系统元数据产生修改的操作;DataNode将HDFS数据以文件的形式存储在本地文件系统中,它并不知道有关HDFS文件的信息。

    数据块:数据块是HDFS的文件存储处理单元,在Hadoop 2.0中默认大小为128MB,可根据业务情况进行配置。数据块的存在,使得HDFS可以保存比存储节点单一磁盘大的文件,而且简化了存储管理,方便容错,有利于数据复制。

    2.1.3 YARN Framework

      YARN是Hadoop 2.0的资源管理器。它是一个通用的资源管理系统,可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。

    YARN的基本设计思想是将Hadoop 1.0中的JobTracker拆分成了两个独立的服务:一个全局的资源管理器ResourceManager和每个应用程序特有的ApplicationMaster。其中ResourceManager负责整个系统的资源管理和分配,而ApplicationMaster负责单个应用程序的管理。
    这里写图片描述
      YARN总体上仍然是Master/Slave结构。在整个资源管理框架中,ResourceManager为Master,NodeManager为Slave,并通过HA方案实现了ResourceManager的高可用。ResourceManager负责对各个NodeManager上的资源进行统一管理和调度。当用户提交一个应用程序时,需要提供一个用以跟踪和管理这个程序的ApplicationMaster,它负责向ResourceManager申请资源,并要求NodeManger启动可以占用一定资源的任务。由于不同的ApplicationMaster被分布到不同的节点上,因此它们之间不会相互影响。

    2.1.4 Common Utilities

      这是Java库和其他Hadoop组件所需的实用工具。

    2.2 Hadoop优缺点

    • (1)优点:

    (一)高可靠性。Hadoop按位存储和处理数据的能力值得人们信赖;
    (二)高扩展性。Hadoop是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以千计的节点中。
    (三)高效性。Hadoop能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快。
    (四)高容错性。Hadoop能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配。
    (五)低成本。hadoop本身是运行在普通PC服务器组成的集群中进行大数据的分发及处理工作的,这些服务器集群是可以支持数千个节点的。

    • (2) 缺点:

    (一)不适合低延迟数据访问。Hadoop设计的目的是大吞吐量,所以并没有针对低延迟数据访问做一些优化,如果要求低延迟, 可以看看Hbase。
    (二)无法高效存储大量小文件。由于NameNode把文件的MetaData存储在内存中,所以大量的小文件会产生大量的MetaData。这样的话百万级别的文件数目还是可行的,再多的话就有问题了。
    (三)不支持多用户写入及任意修改文件。Hadoop现在还不支持多人写入,任意修改的功能。也就是说每次写入都会添加在文件末尾。

    2.3 Hadoop应用场景

    2.3.1 Hadoop 业务场景(一)

    • (1)在线旅游:目前全球范围内80%的在线旅游网站都是在使用Cloudera公司提供的Hadoop发行版,其中SearchBI网站曾经报道过的Expedia也在其中。

    • (2)移动数据:Cloudera运营总监称,美国有70%的智能手机数据服务背后都是由Hadoop来支撑的,也就是说,包括数据的存储以及无线运营商的数据处理等,都是在利用Hadoop技术。

    • (3)电子商务:这一场景应该是非常确定的,eBay就是最大的实践者之一。国内的电商在Hadoop技术上也是储备颇为雄厚的。

    • (3)能源开采:美国Chevron公司是全美第二大石油公司,他们的IT部门主管介绍了Chevron使用Hadoop的经验,他们利用Hadoop进行数据的收集和处理,其中这些数据是海洋的地震数据,以便于他们找到油矿的位置。

    • (4)节能:另外一家能源服务商Opower也在使用Hadoop,为消费者提供节约电费的服务,其中对用户电费单进行了预测分析。

    • (5)基础架构管理:这是一个非常基础的应用场景,用户可以用Hadoop从服务器、交换机以及其他的设备中收集并分析数据。

    • (6)图像处理:创业公司Skybox Imaging 使用Hadoop来存储并处理图片数据,从卫星中拍摄的高清图像中探测地理变化。

    • (7)诈骗检测:这个场景用户接触的比较少,一般金融服务或者政府机构会用到。利用Hadoop来存储所有的客户交易数据,包括一些非结构化的数据,能够帮助机构发现客户的异常活动,预防欺诈行为。

    • (8)IT安全:除企业IT基础机构的管理之外,Hadoop还可以用来处理机器生成数据以便甄别来自恶意软件或者网络中的攻击。

    • (9)医疗保健:医疗行业也会用到Hadoop,像IBM的Watson就会使用Hadoop集群作为其服务的基础,包括语义分析等高级分析技术等。医疗机构可以利用语义分析为患者提供医护人员,并协助医生更好地为患者进行诊断

    2.3.2 Hadoop 业务场景(二)

    其实我们要知道大数据的实质特性:针对增量中海量的结构化,非结构化,半结构数据,在这种情况下,如何快速反复计算挖掘出高效益的市场数据?

    带着这个问题渗透到业务中去分析,就知道hadoop需要应用到什么业务场景了!!!如果关系型数据库都能应付的工作还需要hadoop吗?

    • (1)银行的信用卡业务,当你正在刷卡完一笔消费的那一瞬间,假如在你当天消费基础上再消费满某个额度,你就可以免费获得某种令你非常满意的利益等 等,你可能就会心动再去消费,这样就可能提高银行信用卡业务,那么这个消费额度是如何从海量的业务数据中以秒级的速度计算出该客户的消费记录,并及时反馈 这个营销信息到客户手中呢?这时候关系型数据库计算出这个额度或许就需要几分钟甚至更多时间,就需要hadoop了,这就是所谓的“秒级营销”. 针对真正的海量数据,一般不主张多表关联。

    • (2)在淘宝,当你浏览某个商品的时候,它会及时提示出你感兴趣的同类商品的产品信息和实时销售情况,这或许也需要用到hadoop。

    • (3)就是报表用到的年度报告或者年度环比数据报告的时候也会用到hadoop去计算。

    • (4)搜索引擎分析的时候应该也会用到。一个网友说过,其实还是看big data能否带来多大的效益!比如银行在躺着都赚钱的情况下,big data不一定是银行的项目. 况且hadoop是新兴技术,银行业对新技术还是相对保守的。

    2.3.3 Hadoop 业务场景(三)

    hadoop 主要用于大数据的并行计算,并行计算按计算特征分为:

    • 数据密集型并行计算:数据量极大,但是计算相对简单的并行处理。如:大规模Web信息搜索;

    • 计算密集型并行计算:数据量相对不是很大,但是计算较为复杂的并行计算。如:3-D建模与渲染,气象预报,科学计算;

    • 数据密集与计算密集混合型的并行计算。如:3-D电影的渲染;

    hadoop比较擅长的是数据密集的并行计算,它主要是对不同的数据做相同的事情,最后再整合。

    我知道以及曾经实验过的hadoop的例子有:

    • wordCount (相当于hadoop的HelloWorld的程序);

    • 文档倒排索引;

    • PageRank;

    • K-Means 算法;

    这些程序都可以从网上找到相应的解决方案。

    hadoop的是根据Google MapReduce 提出的开源版本。但是它的性能不是很好。

    hadoop主要应用于数据量大的离线场景。特征为:

    1、数据量大。一般真正线上用Hadoop的,集群规模都在上百台到几千台的机器。这种情况下,T级别的数据也是很小的。Coursera上一门课了有句话觉得很不错:Don’t use hadoop, your data isn’t that big.

    2、离线。Mapreduce框架下,很难处理实时计算,作业都以日志分析这样的线下作业为主。另外,集群中一般都会有大量作业等待被调度,保证资源充分利用。

    3、数据块大。由于HDFS设计的特点,Hadoop适合处理文件块大的文件。大量的小文件使用Hadoop来处理效率会很低。举个例子,百度每天都会有用户对侧边栏广告进行点击。这些点击都会被记入日志。然后在离线场景下,将大量的日志使用Hadoop进行处理,分析用户习惯等信息。

    MapReduce 的经典案例

    MapReduce的一个经典实例是Hadoop。用于处理大型分布式数据库。由于Hadoop关联到云以及云部署,大多数人忽略了一点,Hadoop有些属性不适合一般企业的需求,特别是移动应用程序。下面是其中的一些特点:

    Hadoop的最大价值在于数据库,而Hadoop所用的数据库是移动应用程序所用数据库的10到1000倍。对于许多人来说,使用Hadoop就是杀鸡用牛刀。

    Hadoop有显著的设置和处理开销。 Hadoop工作可能会需要几分钟的时间,即使相关数据量不是很大。

    Hadoop在支持具有多维上下文数据结构方面不是很擅长。例如,一个定义给定地理变量值的记录,然后使用垂直连接,来连续定义一个比hadoop使用的键值对定义更复杂的数据结构关系。

    Hadoop必须使用迭代方法处理的问题方面用处不大,尤其是几个连续有依赖性步骤的问题。

    3、Storm

    伴随着信息科技日新月异的发展,信息呈现出爆发式的膨胀,人们获取信息的途径也更加多样、更加便捷,同时对于信息的时效性要求也越来越高。举个搜索场景中的例子,当一个卖家发布了一条宝贝信息时,他希望的当然是这个宝贝马上就可以被卖家搜索出来、点击、购买啦,相反,如果这个宝贝要等到第二天或者更久才可以被搜出来,估计不太适合了。再举一个推荐的例子,如果用户昨天在淘宝上买了一双袜子,今天想买一副泳镜去游泳,但是却发现系统在不遗余力地给他推荐袜子、鞋子,根本对他今天寻找泳镜的行为视而不见,估计这哥们心里就会想推荐不准。其实稍微了解点背景知识的码农们都知道,这是因为后台系统做的是每天一次的全量处理,而且大多是在夜深人静之时做的,那么你今天白天做的事情当然要明天才能反映出来。

    3.1 Storm架构

    全量数据处理使用的大多是鼎鼎大名的hadoop或者hive,作为一个批处理系统,hadoop以其吞吐量大、自动容错等优点,在海量数据处理上得到了广泛的使用。但是,hadoop不擅长实时计算,因为它天然就是为批处理而生的,这也是业界一致的共识。

    在2011年Storm开源之前,由于Hadoop的火红,整个业界都在喋喋不休地谈论大数据。Hadoop的高吞吐,海量数据处理的能力使得人们可以方便地处理海量数据。但是,Hadoop的缺点也和它的优点同样鲜明——延迟大,响应缓慢,运维复杂。

    有需求也就有创造,在Hadoop基本奠定了大数据霸主地位的时候,很多的开源项目都是以弥补Hadoop的实时性为目标而被创造出来。而在这个节骨眼上Storm横空出世了。

    Storm带着流式计算的标签华丽丽滴出场了,看看它的一些卖点:

    分布式系统:可横向拓展,现在的项目不带个分布式特性都不好意思开源。
    运维简单:Storm的部署的确简单。虽然没有Mongodb的解压即用那么简单,但是它也就是多安装两个依赖库而已。
    高度容错:模块都是无状态的,随时宕机重启。
    无数据丢失:Storm创新性提出的ack消息追踪框架和复杂的事务性处理,能够满足很多级别的数据处理需求。不过,越高的数据处理需求,性能下降越严重。
    多语言:实际上,Storm的多语言更像是临时添加上去似的。因为,你的提交部分还是要使用Java实现。
    这里写图片描述
    Storm主要分为两种组件Nimbus和Supervisor。这两种组件都是快速失败的,没有状态。任务状态和心跳信息等都保存在Zookeeper上的,提交的代码资源都在本地机器的硬盘上。

    • (1)Nimbus负责在集群里面发送代码,分配工作给机器,并且监控状态。全局只有一个。
    • (2)Supervisor会监听分配给它那台机器的工作,根据需要启动/关闭工作进程Worker。每一个要运行Storm的机器上都要部署一个,并且,按照机器的配置设定上面分配的槽位数。
    • (3)Zookeeper是Storm重点依赖的外部资源。Nimbus和Supervisor甚至实际运行的Worker都是把心跳保存在Zookeeper上的。Nimbus也是根据Zookeerper上的心跳和任务运行状况,进行调度和任务分配的。
    • (4)Storm提交运行的程序称为Topology。
      Topology处理的最小的消息单位是一个Tuple,也就是一个任意对象的数组。
      Topology由Spout和Bolt构成。Spout是发出Tuple的结点。Bolt可以随意订阅某个Spout或者Bolt发出的Tuple。Spout和Bolt都统称为component。

    3.2 Storm优缺点

    - (1)优点
    Storm优势就在于Storm是实时的连续性的分布式的计算框架,一旦运行起来,除非你将它杀掉,否则它一直处理计算或等待计算的状态.

    Storm是最佳的流式计算框架,Storm由Java和Clojure写成,Storm的优点是全内存计算,所以它的定位是分布式实时计算系统,按照Storm作者的说法,Storm对于实时计算的意义类似于Hadoop对于批处理的意义。
    Storm的适用场景:
    1)流数据处理
    Storm可以用来处理源源不断流进来的消息,处理之后将结果写入到某个存储中去。
    2)分布式RPC。由于Storm的处理组件是分布式的,而且处理延迟极低,所以可以作为一个通用的分布式RPC框架来使用。

    3)运维简单:Storm的部署的确简单。虽然没有Mongodb的解压即用那么简单,但是它也就是多安装两个依赖库而已。

    4)高度容错:模块都是无状态的,随时宕机重启。

    5)无数据丢失:Storm创新性提出的ack消息追踪框架和复杂的事务性处理,能够满足很多级别的数据处理需求。不过,越高的数据处理需求,性能下降越严重。

    6)多语言:实际上,Storm的多语言更像是临时添加上去似的。因为,你的提交部分还是要使用Java实现。
    - (2)缺点
    Storm不是一个完整的解决方案。使用Storm需要加入消息队列做数据入口,考虑如何在流中保存状态,考虑怎样将大问题用分布式去解决。解决这些问题的成本可能比增加一个服务器的成本还高。但是,一旦下定决定使用了Storm并解决了那些恼人的细节,你就能享受到Storm给你带来的简单,可拓展等优势了。

    3.3 Storm应用场景

    Storm被广泛应用于实时分析,在线机器学习,持续计算、分布式远程调用等领域。来看一些实际的应用:

    • (1)一淘-实时分析系统pora:实时分析用户的属性,并反馈给搜索引擎。最初,用户属性分析是通过每天在云梯上定时运行的MR job来完成的。为了满足实时性的要求,希望能够实时分析用户的行为日志,将最新的用户属性反馈给搜索引擎,能够为用户展现最贴近其当前需求的结果。

    • (2)携程-网站性能监控:实时分析系统监控携程网的网站性能。利用HTML5提供的performance标准获得可用的指标,并记录日志。Storm集群实时分析日志和入库。使用DRPC聚合成报表,通过历史数据对比等判断规则,触发预警事件。

    • (3)如果,业务场景中需要低延迟的响应,希望在秒级或者毫秒级完成分析、并得到响应,而且希望能够随着数据量的增大而拓展。那就可以考虑下,使用Storm了。

    试想下,如果,一个游戏新版本上线,有一个实时分析系统,收集游戏中的数据,运营或者开发者可以在上线后几秒钟得到持续不断更新的游戏监控报告和分析结果,然后马上针对游戏的参数和平衡性进行调整。这样就能够大大缩短游戏迭代周期,加强游戏的生命力(实际上,zynga就是这么干的!虽然使用的不是Storm……Zynga研发之道探秘:用数据说话)。

    除了低延迟,Storm的Topology灵活的编程方式和分布式协调也会给我们带来方便。用户属性分析的项目,需要处理大量的数据。使用传统的MapReduce处理是个不错的选择。但是,处理过程中有个步骤需要根据分析结果,采集网页上的数据进行下一步的处理。这对于MapReduce来说就不太适用了。但是,Storm的Topology就能完美解决这个问题。基于这个问题,我们可以画出这样一个Storm的Topology的处理图。
    这里写图片描述
    我们只需要实现每个分析的过程,而Storm帮我们把消息的传送和接受都完成了。更加激动人心的是,你只需要增加某个Bolt的并行度就能够解决掉某个结点上的性能瓶颈。

    4、Spark

    4.1 Spark架构

    4.2 Spark优缺点

    4.3 Spark应用场景

    未完待续。。。。

    5、总结

    Storm与Spark、Hadoop这三种框架,各有各的优点,每个框架都有自己的最佳应用场景。
    所以,在不同的应用场景下,应该选择不同的框架。
    Storm是最佳的流式计算框架,Storm由Java和Clojure写成,Storm的优点是全内存计算,所以它的定位是分布式实时计算系统,按照Storm作者的说法,Storm对于实时计算的意义类似于Hadoop对于批处理的意义。

    • Storm的适用场景:

    1)流数据处理
    Storm可以用来处理源源不断流进来的消息,处理之后将结果写入到某个存储中去。
    2)分布式RPC。由于Storm的处理组件是分布式的,而且处理延迟极低,所以可以作为一个通用的分布式RPC框架来使用。
    SparkSpark是一个基于内存计算的开源集群计算系统,目的是更快速的进行数据分析。Spark由加州伯克利大学AMP实验室Matei为主的小团队使用Scala开发开发,类似于Hadoop MapReduce的通用并行计算框架,Spark基于Map Reduce算法实现的分布式计算,拥有Hadoop MapReduce所具有的优点,但不同于MapReduce的是Job中间输出和结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的Map Reduce的算法。

    • Spark的适用场景:

    1)多次操作特定数据集的应用场合
    Spark是基于内存的迭代计算框架,适用于需要多次操作特定数据集的应用场合。需要反复操作的次数越多,所需读取的数据量越大,受益越大,数据量小但是计算密集度较大的场合,受益就相对较小。
    2)粗粒度更新状态的应用
    由于RDD的特性,Spark不适用那种异步细粒度更新状态的应用,例如Web服务的存储或者是增量的Web爬虫和索引。就是对于那种增量修改的应用模型不适合。
    总的来说Spark的适用面比较广泛且比较通用。
    Hadoop是实现了MapReduce的思想,将数据切片计算来处理大量的离线数据数据。Hadoop处理的数据必须是已经存放在HDFS上或者类似HBase的数据库中,所以Hadoop实现的时候是通过移动计算到这些存放数据的机器上来提高效率。

    • Hadoop的适用场景:

    1)海量数据的离线分析处理
    2)大规模Web信息搜索
    3)数据密集型并行计算

    • 总结:

    Hadoop适合于离线的批量数据处理适用于对实时性要求极低的场景

    Storm适合于实时流数据处理,实时性方面做得极好

    Spark是内存分布式计算框架,试图吞并Hadoop的Map-Reduce批处理框架和Storm的流处理框架,但是Spark已经做得很不错了,批处理方面性能优于Map-Reduce,但是流处理目前还是弱于Storm,产品仍在改进之中。

    未完待续。。。。

    展开全文
  • HadoopSpark比较

    2018-01-19 08:55:48
    直接比较HadoopSpark有难度,因为它们处理的许多任务都一样,但是在一些方面又并不相互重叠。比如说,Spark没有文件管理功能,因而必须依赖Hadoop分布式文件系统(HDFS)或另外某种解决方案。Hadoop框架的主要模块...
  • HadoopSpark简单概述

    2020-03-25 21:39:57
    文章目录HadoopSpark概述一. 简单说说Hadoop1. Hadoop的产生背景2. Hadoop核心技术二. 简单说说Spark1. Spark的官方定义2. Spark的核心技术3. Spark的内置项目4. Spark的生态体系5. Spark的特点6. Spark的用户和...
  • HadoopSpark之间的比较 Hadoop框架的主要模块包括如下: Hadoop CommonHadoop分布式文件系统(HDFS)Hadoop YARNHadoop MapReduce 虽然上述四个模块构成了Hadoop的核心,不过还有其他几个模块。这些...
  • 数据算法 Hadoop Spark大数据处理技巧 中文完整版 高清带书签 共3个文件,全部下载后一起解压,解压后文件大小:181M
  • HadoopSpark基本原理

    2019-05-03 15:08:46
    SparkHadoop区别和联系 Hadoop 的 HDFS Hadoop 的 MapReduce Spark 宽依赖和窄依赖 Spark RDD运行过程 Spark RDD阶段划分 Hadoop Hadoop是Apache软件基金旗下的一个开源分布式计算平台,为用户提供系统底层...
  • HadoopSpark安装详解
  • 1、HadoopSpark的关系Spark是为了跟Hadoop配合而开发出来的,不是为了取代Hadoop,专门用于大数据量下的迭代式计算。Spark运算比Hadoop的MapReduce框架快的原因是因为Hadoop在一次MapReduce运算之后,会将数据的...
  • 但是在目前很多招数据分析师、工程师等都需要有hadoop spark storm的专长 对我来说vb.net 或C#是可以用来接结数据库的 而mysql、mssql、access就是数据库 我不是计算机专业出身,请不要用难懂的方式来说明 问题1...
  • Windows下的搭建HadoopSpark和Scala编程环境 本文是基于Windows 10系统环境,搭建HadoopSpark和Scala编程环境 Windows 10 IntelliJ scala-2.11.12 spark-2.4.3-bin-hadoop2.7 hadoop-2.7.1 一、JDK安装 (1) ...
  • 1.准备工具: 1.Hadoop所需要替换的bin目录下的文件 ...2.1 将下载好的HadoopSpark进行解压,并重命名,此处我重名为:hadoop-3.1.0和spark 2.2 将准备工具中的第一项下载的包(hadoop3.1-bin)进行解压,...
  • Windows下安装spark+Hadoop

    2018-08-15 17:32:47
    Spark作为一个基于内存的开源计算框架,在这个大数据时代背景下,受到越来越多的开发者的喜爱,相对于Hadoop,Spark拥有对大量数据更快的处理速度,并且易于使用(支持多种开发语言)。比Hadoop具有更多的优点,怎能...
  • 1. HADOOPspark的关系? 如下图所示: HadoopSpark两者都是大数据框架,但是各自存在的目的不尽相同。Hadoop实质上更多是一个分布式数据基础设施: 它将巨大的数据集分派到一个由普通计算机组成的集群中的多个...
  • Hadoop学习系列之HadoopSpark学习路线(很值得推荐) 文章出自:http://www.cnblogs.com/zlslch/p/5448857.html 1 Java基础: 视频方面:推荐毕老师《毕向东JAVA基础视频教程》。 学习hadoop不需要过度的...
  • Spark、Python sparkHadoop简介 Spark简介 1、Spark简介及功能模块 Spark是一个弹性的分布式运算框架,作为一个用途广泛的大数据运算平台,Spark允许用户将数据加载到cluster集群的内存中储存,并多次重复...
  • win10搭建hadoopspark

    2020-03-19 10:06:06
    一、Java环境变量配置 二、hadoop环境变量配置 三、spark环境变量配置 四、hdfs配置 1、hadoop-2.7.7\etc\hadoop hadoop-env.cmd
  • 在这些系统中,Sparkhadoop是获得最大关注的两个。然而该怎么判断哪一款适合你?  如果想批处理流量数据,并将其导入HDFS或使用Spark Streaming是否合理?如果想要进行机器学习和预测建模,Mahout或MLLib会更好地...
1 2 3 4 5 ... 20
收藏数 95,400
精华内容 38,160
关键字:

hadoop spark