精华内容
下载资源
问答
  • Hadoop与Spark等大数据框架介绍

    万次阅读 多人点赞 2018-08-09 17:06:40
    与Hadoop无缝连接 Spark可以使用YARN作为它的集群管理器 读取HDFS,HBase等一切Hadoop的数据 Spark整体架构 Spark提供了多种高级工具,如: Shark SQL应用于即席查询(Ad-hoc query)、Spark Streaming应用于流式...

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

    海量数据的存储问题很早就已经出现了,一些行业或者部门因为历史的积累,数据量也达到了一定的级别。很早以前,当一台电脑无法存储这么庞大的数据时,采用的解决方案是使用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就是大数据处理流程中非常常用的两个框架。

    展开全文
  • python hadoop与spark教程

    2021-06-17 09:25:51
    本节为python hadoop与spark教程,主要讲解hadoop与spark的应用。
  • Hadoop与Spark

    千次阅读 2019-05-30 20:46:36
    Spark是通过借鉴HadoopMapReduce发展而来的,继承了其分布式并行计算的优点,并改进了MapReduce明显的缺陷,具体体现在以下几个方面。 (1) Spark把中间数据放在内存中,迭代运算效率高。MapReduce中的计算结果是...

    Spark是通过借鉴HadoopMapReduce发展而来的,继承了其分布式并行计算的优点,并改进了MapReduce明显的缺陷,具体体现在以下几个方面。
    (1) Spark把中间数据放在内存中,迭代运算效率高。MapReduce中的计算结果是保存在磁盘上,这样势必会影响整体的运行速度,而Spark支待DAG图的分布式并行计算的编程框架,减少了迭代过程中数据的落地,提高了处理效率。


    (2)Spark的容错性高。Spark引进了弹性分布式数据集(ResilientDistributed Dataset, RD D)的概念,它是分布在一组节点中的只读对象集合,这些集合是弹性的,如果数据集一部分丢失,则可以根据“血统”(即允许基于数据衍生过程)对它们进行重建。另外,在RDD计算时可以通过CheckPoint来实现容错,而CheckPoint有两种方式,即CheckPointData和LoggingThe Updates, 用户可以控制采用哪种方式来实现容错。

    (3)Spark更加通用。不像Hadoop只提供了Map和Reduce两种操作,Spark提供的数据集操作类型有很多种,大致分为转换操作和行动操作两大类。转换操作包括Map、Filter、FlatMap、 Sample、GroupByKey、ReduceByKey、Union、Join、Cogroup、MapValues、Sort和PartionBy等多种操作类型,行动操作包括Collect、Reduce、Lookup和Save等操作类型。另外,各个处理节点之间的通信模型不再像Hadoop只有Shuffie一种模式,用户可以命名、物化,控制中间结果的存储、分区等。

    --------------------------------------------------------------------------------------------------------------------------------------------------------

    Spark 相对于 Hadoop 有如此快的计算速度有数据本地性、调度优化和传输优化等原因,其中最主要的是基于内存计算和引入 DAG 执行引擎。
    (1) Spark 默认情况下迭代过程的数据保存到内存中,后续的运行作业利用这些结果进行计算,而 Hadoop 每次计算结果都直接存储到磁盘中,在随后的计算中需要从磁盘中读取上次计算的结果。 由千从内存读取数据时间比磁盘读取时间低两个数量级,这就造成了 Hadoop 的运行速度较慢,这种情况在迭代计算中尤为明显。
    (2)由于较复杂的数据计算任务需要多个步骤才能实现,且步骤之间具有依赖性。 对于这些步骤之间,Hadoop 需要借助 Oozie 等工具进行处理。 而 Spark 在执行任务前,可以将这些步骤根据依赖关系形成 DAG 图(有向无环图),任务执行可以按图索骥,不需要人工干预,从而优化了计算路径,大大减少了 1/0 读取操作。

    展开全文
  • Hadoop与Spark关系

    千次阅读 2018-11-11 17:29:14
    Hadoop与Spark的关系目录一:介绍1:Spark2:Hadoop二:不同层面的关系1:功能2:依赖关系3:数据量影响4:容错 说明:近期在做一个图关系项目时,使用到了saprk分析引擎和Hadoop的HDFS文件系统,在了解的过程中产生了...

    说明:近期在做一个图关系项目时,使用到了saprk分析引擎和Hadoop的HDFS文件系统,在了解的过程中产生了关于Hadoop与Spark的关系是什么样的疑问,在此简单的整理一下

    一:介绍

    1:Spark

    Apache Spark™ is a unified analytics engine for large-scale data processing.

    这是官网上的一句话,意思就是“Spark是大规模数据处理的统一分析引擎”,是专为大规模数据处理而设计的快速通用的计算引擎。由UC Berkeley AMP Lab所开源的类Hadoop MapReduce的通用并行框架。

    Apache Spark使用最先进的DAG调度程序,查询优化器和物理执行引擎,实现批处理和流数据的高性能。

    可以兼容多种语言:Java,Scala,Python,R和SQL 等,来自官网的一个图:
    在这里插入图片描述
    spark的架构图:
    在这里插入图片描述

    2:Hadoop

    The Apache Hadoop software library is a framework that allows for the distributed processing of large data sets across clusters of computers using simple programming models. It is designed to scale up from single servers to thousands of machines, each offering local computation and storage. Rather than rely on hardware to deliver high-availability, the library itself is designed to detect and handle failures at the application layer, so delivering a highly-available service on top of a cluster of computers, each of which may be prone to failures.

    Apache Hadoop软件库是一个允许使用简单的编程模型跨计算机集群分布式处理大型数据集的框架。它旨在从单个服务器扩展到数千台计算机,每台计算机都提供本地计算和存储。库本身不是依靠硬件来提供高可用性,而是设计用于检测和处理应用程序层的故障,从而在计算机集群之上提供高可用性服务。
    简单的来说:Hadoop是一个由Apache基金会所开发的分布式系统基础架构
    在学习过程中,发现一个特别好的图,在此和大家分享一下,如评论所说’一图解千愁‘,Hadoop集群完整架构设计图(来自:https://blog.csdn.net/quwenzhe/article/details/53905572):
    在这里插入图片描述

    二:不同层面的关系

    1:功能

    首先,Hadoop和Spark两者都是大数据框架,但是各自存在的目的不尽相同。就如上述所说,Hadoop实质上更多是一个分布式数据基础设施: 它将巨大的数据集分派到一个由普通计算机组成的集群中的多个节点进行存储,意味着不需要购买和维护昂贵的服务器硬件,直接使用廉价的机器就可组成一个高可用的集群。Hadoop不仅提供分布式存储,还可以使用其MapReduce模型对大数据量进行分析计算。

    而Spark主要是一个专门用来对那些分布式存储的大数据进行处理的工具,它并不会进行分布式数据的存储。

    2:依赖关系

    Hadoop主要是提供HDFS分布式数据存储功能,在这之外还提供了叫做MapReduce的数据处理功能。所以我们完全可以抛开Spark,使用Hadoop自身的MapReduce来完成数据的处理。

    Spark也不是非要依附于Hadoop才能生存。但是Spark没有提供文件管理存储系统,所以,它必须和其他的分布式文件系统进行集成才能运作。我们可以选择Hadoop的HDFS,也可以选择其他的基于云的数据系统平台。大部分情况下Spark还是使用的Hadoop的HDFS文件系统。

    3:数据量影响

    Hadoop的MapReduce模型特别适合大数据量的离线处理。

    Spark适合对数据量不太大的数据处理,可以是离线也可以是实时处理。

    对于相同的数据量,spark的处理速度快于Hadoop,为什么?

    1. Spark和Hadoop都是基于内存计算的。Spark和Hadoop的根本差异是多个任务之间的数据通信问题:Spark多个任务之间数据通信是基于内存,而Hadoop是基于磁盘。
    2. MapReduce是分步对数据进行处理的: ”从集群中读取数据,进行一次处理,将结果写到集群磁盘中,从集群中读取更新后的数据,进行下一次的处理,将结果写到集群磁盘中。。。“要不断的进行磁盘的读取和存储。
    3. 对于Spark,它会在内存中以接近“实时”的时间完成所有的数据分析:“从集群中读取数据,完成所有必须的分析处理,将结果写回集群,完成,” 只需要加载一次即可,任务之间的通讯几乎全在内存中。Spark的所有运算并不是全部都在内存中,当shuffle发生的时候,数据同样是需要写入磁盘的
    4. Spark的批处理速度比MapReduce快近10倍,内存中的数据分析速度则快近100倍,下面为Spark官网中的关于spark和hadoop做逻辑回归处理的一个比较:
      Logistic regression in Hadoop and Spark

    4:容错

    MapReduce使用TaskTracker节点,它为 JobTracker节点提供了心跳(heartbeat)。如果没有心跳,那么JobTracker节点重新调度所有将执行的操作和正在进行的操作,交 给另一个TaskTracker节点。这种方法在提供容错性方面很有效,可是会大大延长某些操作(即便只有一个故障)的完成时间。

    Spark使用弹性分布式数据集(RDD),它们是容错集合,里面的数据元素可执行并行操作。RDD可以引用外部存储系统中的数据集,比如共享式文件系统、HDFS、HBase,或者提供Hadoop InputFormat的任何数据源。Spark可以用Hadoop支持的任何存储源创建RDD,包括本地文件系统,或前面所列的其中一种文件系统。Spark的缓存具有容错性,原因在于如果RDD的任何分区丢失,就会使用原始转换,自动重新计算。

    大数据领域知识博大精深,想要深入学习还需要继续努力呀。

    参考:
    https://blog.csdn.net/onlyoncelove/article/details/81945381
    https://blog.csdn.net/forward__/article/details/78770466
    https://blog.csdn.net/zcy6675/article/details/78256164?locationNum=2&fps=1

    展开全文
  • 本文档详细说明了在Linux环境下,hadoop与spark安装配置的每一个步骤。
  • Spark的崛起对作为当前最为流行的大数据问题解决方案的Hadoop及其生态系统形成了有力的冲击,甚至一度有人认为Spark有取代Hadoop的趋势,但是因为Hadoop与Spark有着各自不同的特点,使得两者拥有不同的应用场景,...
  • hadoop与spark分布式安装,内容详细,亲自搭建成功。助于新手
  • Hadoop与Spark生态系统操作实战指南一书是分布式存储分布式计算的快速入门书籍,值得一读。
  • Hadoop与Spark 肖睿+PDF

    2019-08-18 16:17:11
    主要内容包括Hadoop环境配置、Hadoop分布式文件系统(HDFS)、Hadoop分布式计算框架MapReduce、Hadoop资源调度框架YARN与Hadoop新特性、Hadoop分布式数据库HBase、数据仓库Hive、大数据离线处理辅助系统、Spark Core...
  • hadoop与spark的区别

    千次阅读 2018-06-07 14:01:59
    hadoop与spark的区别 hadoop是一个侧重于存储功能的分布式文件系统(HDFS)–是将数据存储到磁盘之中,当然同时也拥有数据处理功能–MapReduce(但是是只能分步处理数据) spark是一个侧重于数据计算(处理)–可以进行...

    hadoop与spark的区别

    1. hadoop是一个侧重于存储功能的分布式文件系统(HDFS)–是将数据存储到磁盘之中,当然同时也拥有数据处理功能–MapReduce(但是是只能分步处理数据)

    1. spark是一个侧重于数据计算(处理)–可以进行批处理可以结合hadoop这类文件存储系统,但不是一定只能和hadoop,因为他们两者结合性能最佳.

    1. hadoop中的MapReduce的数据处理速度由于是分步处理,每读取数据一次就只能处理一次,而不能像spark一样进行批量处理数据.所以一般使用spark.

    1. 在数据恢复方面:由于hadoop的HDFS要求数据存放在磁盘上,因此恢复较为顺畅,但是spark的数据对象(不是数据)一般可以存放在磁盘或者内存当中,但是安全性没有hadoop高,都可以进行数据恢复.

    参考:https://blog.csdn.net/forward__/article/details/78770466

    展开全文
  • Hadoop与Spark平台搭建心得

    千次阅读 2017-06-15 18:23:47
    近来学习Spark,作为Linux小白,在Hadoop与Spark平台搭建过程中,产生了许多之前未预料的错误。经过锲而不舍的网上查找文章和不断尝试,终于解决了所有的错误,成功将Spark平台运行起来。为了防止今后的遗忘,也为了...
  • Hadoop与Spark基本原理

    千次阅读 2019-05-03 15:08:46
    SparkHadoop区别和联系 Hadoop 的 HDFS Hadoop 的 MapReduce Spark 宽依赖和窄依赖 Spark RDD运行过程 Spark RDD阶段划分 Hadoop Hadoop是Apache软件基金旗下的一个开源分布式计算平台,为用户提供系统底层...
  • Hadoop与Spark之间的比较

    万次阅读 2017-10-17 14:38:21
    Hadoop与Spark之间的比较 Hadoop框架的主要模块包括如下: Hadoop CommonHadoop分布式文件系统(HDFS)Hadoop YARNHadoop MapReduce 虽然上述四个模块构成了Hadoop的核心,不过还有其他几个模块。这些...
  • Hadoop与Spark以及那些坑

    千次阅读 2016-12-21 20:29:00
    这两天在搭建Hadoop与Spark的平台,要求是能够运行Spark,并且用python编程。笔者也不打算写一个很详细的细节教程,简单做一个笔记blog。 1.选择  笔者一开始是在虚拟机上搭建的,创建了三个ubuntu虚拟机,然后开始...
  • Hadoop与Spark整合

    千次阅读 2016-05-24 16:48:47
    搭建Hadoop集群 搭建Hadoop集群请参考博文《Hadoop集群搭建及wordcount测试》,在此不再赘述。...sudo tar -zxvf scala-2.11.7.tgz -C /usr/opt/spark解压缩完成后,进入etc目录,修改profile,追加以下内容e
  • hadoop与spark的异同

    千次阅读 2017-04-20 15:25:50
    首先,Hadoop和Apache Spark两者都是大数据框架,但是各自存在的目的不尽相同。Hadoop实质上更多是一个分布式数据基础设施: 它将巨大的数据集分派到一个由普通计算机组成的集群中的多个节点进行存储,意味着您不需要...
  • ubuntu16.04 hadoop与spark安装

    千次阅读 2018-03-18 15:57:36
    spark发展到现在,很多方面都已经十分完善,其速度性能等也比hadoop好不止一个数量级,因此,主要使用spark进行分布式计算框架的学习。但是hadoop中的HDFS文件系统应用广泛,spark默认也采用hadoop的HDFS文件系统...
  • Hadoop与spark性能比较试验

    千次阅读 2017-08-25 17:00:52
    自从spark正式亮相后,其官网上就公开声称其计算速度比hadoop要快10到100倍。我看了后总觉得其存在很大的炒作成份,不太相信。正好单位目前在做一个大数据的项目,于是就借机实实在在的对二者的计算速度进行了比较。...
  • 仅用于我个人的学习。书籍为人民邮电出版社的《大数据技术基础——基于Hadoop与Spark》。课后习题选择是我个人认为有用的。记录下来是为了督促我学习:)共好
  • Hadoop与Spark的核心组件对比

    千次阅读 2016-09-09 10:37:16
    一、Hadoop的核心组件  Hadoop的核心组件包括:MapReduce和HDFS。  1、HDFS的体系结构  我们首先介绍HDFS的体系结构,HDFS采用了主从(Master/Slave)结构模型,一个HDFS集群是由一个NameNode和若干个DataNode组成...
  • 由于Hadoop与Spark对于PageRank算法的实现过程不同,这里分别对Hadoop与Spark算法输入文件进行说明。 对于Hadoop输入文件,每行的数据信息包含网页ID、网页初始PR值1.0以及该网页链接的其他网页ID,以制表符隔开,...
  • Spark可将如何Hadoop分布式文件系统(HDFS)上的文件读取为分布式数据集(RDD) Spark是用Scala写的,运行在Java虚拟机(JVM)上。 Spark Core 任务调度,内存管理,错误恢复,存储系统交互,对RDD的api定义 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 134,660
精华内容 53,864
关键字:

hadoop与spark