内存计算框架---Spark

我们先来了解一下spark是什么:

Spark 是一种快速、通用、可扩展的大数据分析引擎,2009 年诞生于加州大学伯克利分校 AMPLab,2010 年开源,2013 年 6 月成为 Apache 孵化项目,2014 年 2 月成为 Apache 顶级项目。目前,Spark 生态系统已经发展成为一个包含多个子项目的集合,其中包含 SparkSQL、Spark Streaming、GraphX、MLlib 等子项目,Spark 是基于内存计算的大数据并行计算框架。Spark 基于内存计算,提高了在大数据环境下数据处理的实时性,同时保证了高容错性和高可伸缩性,允许用户将 Spark 部署在大量廉价硬件之上,形成集群。Spark 得到了众多大数据公司的支持,这些公司包括 Hortonworks、IBM、Intel、Cloudera、MapR、Pivotal、百度、阿里、腾讯、京东、携程、优酷土豆。当前百度的 Spark 已应用于凤巢、大搜索、直达号、百度大数据等业务;阿里利用 GraphX 构建了大规模的图计算和图挖掘系统,实现了很多生产系统的推荐算法;腾讯 Spark 集群达到 8000 台的规模,是当前已知的世界上最大的 Spark 集群。

Spark 具有以下特点:

  1. 快。

与 Hadoop 的 MapReduce 相比,Spark 基于内存的运算要快 100 倍以上,基于硬盘的运算也要快 10 倍以上。Spark 实现了高效的 DAG(Directed Acyclic Graph-有向无环图)执行引擎,可以通过基于内存来高效处理数据流。

  1. 易用。

Spark 支持 Java、Python 和 Scala 的 API,还支持超过 80 种高级算法,使用户可以快速构建不同的应用。而且 Spark 支持交互式的 Python 和 Scala 的 shell,可以非常方便地在这些 shell 中来验证解决 Spark 集群中出现的问题的方法。

  1. 通用。

Spark 提供了统一的解决方案。Spark 可以用于批处理、交互式查询(Spark SQL)、实时流处理(Spark Streaming)、机器学习(Spark MLlib)和图计算(GraphX)。这些不同类型的处理都可以在同一个应用中集成使用。Spark 统一的解决方案非常具有吸引力,毕竟任何公司都想用统一的平台去处理遇到的问题,减少开发和维护的人力成本和部署平台的物力成本。

  1. 兼容性。

Spark 可以非常方便地与其它的开源产品进行融合。比如,Spark 可以使用 Hadoop 的 YARN 和 Apache Mesos 作为它的资源管理和调度器,并且可以处理所有 Hadoop 支持的数据,包括 HDFS、HBase 和 Cassandra 等。这对于已经部署 Hadoop 集群的用户特别重要,因为不需要做任何数据迁移就可以使用 Spark 的强大处理能力。Spark 也可以不依赖于第三方的资源管理和调度器,它实现了 Standalone 作为其内置的资源管理和调度框架,这样进一步降低了 Spark 的使用门槛,使得所有人都可以非常容易地部署和使用 Spark。此外,Spark 还提供了在 EC2 上部署 Standalone 的 Spark 集群的工具。

“Spark 是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使 Spark 在某些工作负载方面表现得更加优越,换句话说,Spark 启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。

如果你关注关注过大数据领域的任何事情,甚至做过任何互联网有关的工作,你会发现Spark这个词四处都是:机器学习需要Spark,数据流传输需要Spark,ETL也需要Spark。

有没有想过,spark到底是什么?居然能够得到这种程度的关注呢?

用最简单的语言去描述spark的话,听起来或许有点百度百科了

上面这句话听起来或许很抽象,我们一个词一个词的来解释
通用:通用指的是Spark可以做很多事情。刚刚我们提到过的,包括机器学习,数据流传输,交互分析,ETL,批处理,图计算等等等等都是Spark可以做到的。甚至可以说,你需要用数据实现的任何事情,你都可以用Spark试试看。
分布式:指的是Spark处理数据的能力是建立在许多机器上的,是可以和分布式的存储系统对接的,是可以做横向扩展的(简单点说就是电脑越多,能力越大)
引擎:所谓引擎,说的就是Spark自己不会存储数据,它就像实体的机械引擎一样,会将燃料(对Spark来说是数据)转化成使用者需要的那种形式——例如驱动汽车,再例如得到一个需要的目标结论。但无论如何,没数据是万万不行的。

Spark的历史

  • Spark是个和Hadoop血缘很深的东西,从最开始的设计,Spark就是为了代替MapReduce这个笨重的算法的。我们之前说过,MapReuce是一个很重型的计算工具。究其原因,一个是因为MapReduce有大量的磁盘IO(读写电脑磁盘)工作要做,这磁盘IO可以说是相当花时间,再加上一旦把中间结果存储在HDFS文件里面(而不是本地磁盘),上一个节点得花时间去发文件,下一个计算节点也得花时间去做网络请求取数据,难道网络通讯不要时间吗?
    另一者是因为MapReduce这算法很底层,只提供map和reduce两个操作给你,我们现在经常需要的什么where啊,join啊,全得依靠data shuffle的过程洗出来(data shuffle,广义来说就是在map和reduce之间做的一切事情,例如排序,分片,筛选)。这就好比让你用汇编语言去写个Moba类的游戏:能写是能写,但是非常费劲。归根到底是抽象层次太低了,使用者只有get hands very dirty
  • 再写两个小插曲,在Spark出现之前,Hadoop生态内也出现过抽象程度更高的项目,比如Apache Pig。Pig这个项目提供了一般人最经常使用的SQL接口,然后自己在内部将SQL转化为MapReduce过程;也出现过Apache Tez这种执行引擎,提供DAG(有向无环图,简单来说就是一个执行流程图)的方式去执行MapReduce,同时也去除了一些不必要的操作(比如不再是必须一个map对应一个reduce),以此来加速整个数据处理的过程
  • 在2009年,加州大学伯克利分校的AMP实验室,诞生了一个叫做Spark的项目。这个项目在2013年成为了Apache的孵化项目,并以极快的速度成为了一个备受欢迎和关注的顶级项目
    Spark项目的初衷是为了代替MapReduce,提供一种既可以极大批量的处理分布式的数据,又有足够的容错能力,且上手容易,速度快,可以让人实现实时交互分析的解决方案。
    (实时交互分析的意思是,在使用正确的方法的前提下,可以马上得到自己需要的分析结果——这一点MapReduce可做不到)
  • Spark和Hadoop

  • 有些人说Spark的出现代表着Hadoop的死亡,这个观点我是不认同的。Hadoop是一个分布式的系统生态,不是靠着Spark这个引擎可以替代的。
    但不得不承认,Spark的出现对于Hadoop来说,确实极大程度上弥补了一些短板,对Hadoop造成了一些影响。而Hadoop的生态,包括资源调度和文件存储的部分,对于Spark这个纯引擎来说,也是很有帮助的。
  • 具体来说,Spark帮助Hadoop实现了用户友好。一个将Spark和Hadoop结合起来使用的人,和一个只使用Hadoop生态内工具的人,感受将会是截然不同的。
    第一,使用Spark的时候,不再需要考虑怎么样把各种日常的操作硬塞到map和reduce这两个操作中间去。因为Spark提供了抽象程度更高的接口。
    第二,使用Spark的时候,不用再为一个查询而等到油尽灯枯。建立在RDD和内存存储中间数据上的Spark,对实时性的支持很高。
    • 在这里简单讲一下RDD。RDD是一个抽象的概念,一个逻辑上的数据结构,中文全称是弹性分布式数据集,最直接的理解就是一个大的dataframe——这个dataframe可能是所有机器上原始数据的总和,也可能是中间计算到某一步得到的一个中间结果形成的dataframe。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值