MapReduce给用户提供了简单的编程接口,用户只需要按照接口编写串行版本的代码,Hadoop框架会自动把程序运行到很多机器组成的集群上,并能处理某些机器在运行过程中出现故障的情况。然而,在MapReduce程序运行过程中,中间结果会写入磁盘,而且很多应用需要多个MapReduce任务来完成,任务之间的数据也要通过磁盘来交换,没有充分利用机器的内存。为此,美国加州大学伯克利分校的 AMPLab 设计实现了 Spark 计算框架(Zaharia,et al. 2012),充分利用现在机器的大内存资源,使得大数据计算的性能得到了进一步的提升。Spark 由 Scala 语言编写,Scala 是一种基于Java虚拟机的函数式编程语言,因此 Spark 提供的操作和 MapReduce 相比更加丰富和灵活。

  Spark 设计的核心是一种叫做可靠分布式数据集(Resilient Distributed Dataset,RDD)的数据结构。一个 RDD 是一组数据项的集合,可以是普通的列表,也可以是由键值对构成的字典。在 Spark 中,一个 RDD 可以分布式的保存在多台机器上,也可以保存在磁盘上,也可以保存在内存中。对 RDD 的操作分为动作(action)和变换(transformation)。表 3.4 列出了 RDD 支持的常见操作。与 MapReduce 不同,Spark 的操作都是对 RDD 整体进行的,而不是对具体的每一个数据项。动作操作会直接生效,产生新的 RDD ,而变换操作的执行则是懒惰(lazy)的,操作会被记录下来,直到遇到下一个动作时才产生一个完整的执行计划。Spark 中的 RDD 可以由框架自动或由开发者人为地指定缓存在内存中,在内存足够的情况下对于某些应用可以获得比 MapReduce 快100倍以上的性能。

  Spark 可以独立运行,也可以在 Hadoop 系统上运行,由 YARN 来调度。Spark 支持对 HDFS 的读/写,因此 MapReduce 程序可以很容易地改写成 Spark 程序,并在相同的环境下运行。

  与 Hadoop 类似,Spark 也提供了一些组件,用于不同的应用场景。前面介绍的 Spark 核心组件被称为 Spark Core。Spark SQL 在 Spark Core 的基础上提供了新的数据抽象SchemaRDD,用于处理结构化和半结构化的数据,支持用SQL的语法对SchemaRDD进行查询。与Hive类似,Spark Streaming 提供了流式处理的功能,与Hadoop的Storm/S4类似。MLlib 是 Spark 上的机器学习算法库,提供了类似Mahout的功能。而GraphX则是 Spark的图计算框架,能够完成与Giraph相似的功能。

  总地来说,目前Spark已经发展到比较成熟的阶段,其核心功能涵盖了Hadoop的大部分内容,并且可以在Hadoop生态系统内使用,具有性能上的优势,正在获得越来越广泛的应用。

最新文章

  1. android 项目中如何引入第三方jar包
  2. windbg无法下载符号文件
  3. 2014年7月份第2周51Aspx源码发布详情
  4. 【HOW】如何对Reporting Services表格中数据按字段排序
  5. 用TypeScript开发了一个网页游戏引擎,开放源代码
  6. Unity3D 的摄像机
  7. Eclipse : cannot open output file(c++)
  8. log4j自动生成日志文件配置
  9. linux快速入门 1.1命令行操作
  10. java图片处理
  11. Django模板-在视图中使用模板
  12. Muddy Fields
  13. flex 左边固定宽度,右边自适应
  14. MyBatis笔记----MyBatis数据库表格数据修改更新的两种方法:XML与注解
  15. 023合并K个链表并排序
  16. mySql单列索引与联合索引的区别
  17. .NET数据请求序列化
  18. Python中创建守护进程
  19. linux系统编程:自己动手写一个ls命令
  20. JAVA-JSP内置对象之exception对象用来处理错误异常

热门文章

  1. python包的一些问题
  2. Python入门day04_函数与装饰器
  3. windows下Docker的安装
  4. java redispool测试类保存
  5. 查看linux是否为虚拟机,以及其它信息,cpu,主机型号,主板型号等
  6. 密码与安全新技术专题之AI与密码
  7. lnmp 搭建 svn服务
  8. python (创建虚拟环境)
  9. WindowsPE权威指南 第二章 小工具 pedump代码的C语言实现
  10. go mysql insert变量到数据库