转自:http://community.bittiger.io/topic/42/%E6%B7%B1%E5%85%A5%E6%B5%85%E5%87%BAspark-1-%E4%BB%80%E4%B9%88%E6%98%AFspark?utm_source=csdn&utm_medium=forumpost&utm_content=Post37&utm_campaign=csdn

今天开始我们将一起学习Sameer Farooqui在Spark summit 2015上分享的内容。本文是“深入浅出Spark”系列文章的第一篇,通过本篇文章我们将了解:

  1. Spark是什么
  2. Spark生态圈
  3. Spark的优点

致谢

首先,简单介绍一下分享者Sameer Farooqui。

Sameer是就职于Databricks的客户服务工程师,专注于Spark相关的技术支持、咨询和培训。在加入Databricks之前,他以大数据培训师和咨询师的自由职业者身份,在全球范围内进行了超过120多次以大数据为主题的教学,内容包括Hadoop,HDFS,MapReduce,Hive,Pig,HBase等等。在成为自由职业者之前,Sameer曾在Hortonworks,Accenture R&D和Symantec工作过。

1.什么是Spark

介绍完Sameer的技术背景之后,我们回到Spark上,看看什么人在学习Spark。

可以看到其中绝大多数是开发者,其次是数据科学家。开发者很多容易理解,但为什么还有不少数据科学家学习呢?因为Spark对数据分析非常有帮助,它提供的机器学习库MLib不仅包括一些基础的统计算法,还有分类(Classification)、回归(Regression)、聚类(Clustering)等等分析工具,能够将大数据分析和处理的问题简单化。

另外我们再来看看跟Spark相关的各种大数据平台的火爆程度。

从上面可以看到,HDFS名列前茅。因为存储大数据,最稳定最可靠的就是HDFS。而且Hadoop相关的很多技术,像MapReduce,HDFS,YARN等等,支持它们的底层文件系统就是HDFS。同时我们可以看到MapReduce,YARN,Kafka,HBase,Cassandra,Hive,Pig,ZooKeeper,MongoDB, Oozie等这些技术也很热门。

其实我们上面提到的各种技术框架,可以划分为两个领域的战争,一个是偏向底层存储的战争,一个是偏向计算的战争。

偏向存储的战争有关系型数据库和非关系型数据库(Relational vs NoSQL)的战争,它们两者都有各自的应用特点。关系型数据库最大的特点是事务的一致性,读写操作都是事务的,具有ACID的特点,它在银行这样对一致性有要求的系统中应用广泛。而非关系型数据库一般对一致性要求不高,但支持高性能并发读写,海量数据访问,在微博、Facebook这类SNS应用中广泛使用。另外,非关系型数据库内部也有战争,比如说HBase和Cassandra,前者注重一致性(Consistency)和可用性(Availability),后者提供可用性(Availability)和分区容错性(Partition tolerance)。Redis和Memcached,它们都是内存内的Key/Value存储,但Redis还支持哈希表,有序集和链表等多种数据结构。MongoDB,CouchDB和Couchbase这三个文档型数据库,MongoDB更适用于需要动态查询的场景,CouchDB偏向于预定义查询,Couchbase比CouchDB有更强的一致性,而且还可以作为Key/Value存储。搜索引擎Solr和Elasticsearch的,它们都是基于Lucene,性能上相近,但是前者在Java/C#开发者中大受欢迎,而后者深受Python/PHP开发者喜爱。

偏向计算的战争有MapReduce和Spark之间的战争,它们之间的特点在下文有更详细介绍。此外还有Spark Streaming和Storm之间的战争等等。

这些战争的赢家是谁呢?它们是Redis,MongoDB,Cassandra,Neo4j和Solr。

简单介绍Spark相关技术后,我们回到Spark上。它是怎么来的呢?这一切都从谷歌的三篇论文(Google File System,Map Reduce,Bigtable)开始。这三篇论文发布后,很多人开始进行学习,并在此基础上开发出各种Hadoop计算平台,进行通用批处理计算(General Batch Processing)。之后,人们针对各种不同的计算模型开发了各种专门系统(Specialized Systems),比如说迭代式的,机器学习的,流处理的,图像的和SQL相关的系统。最后就是Spark,它作为一种通用的统一的计算引擎(General Unified Engine),希望能够一统江湖。

2.Spark生态圈

为了理解Spark,我们来看看Spark生态圈。

从内往外看,生态圈核心是Spark Core,包括各种Spark的各种核心组件,它们能够对内存和硬盘进行操作,或者调用CPU进行计算。

紧邻核心圈的是与Spark相关的各类接口,比如Java,Python和R等。

这些接口的外部是针对不同类型数据的计算引擎。比如说针对关系型数据进行处理的Spark SQL,针对对流数据进行打包批量处理的Spark Steam,针对Machine Learning相关的库MLib,针对图的GraphX,以及针对大规模数据进行采样和计算从而缩短计算时间的BlinkDB。

再往外就是Spark运行的各种场景。比如说单机运行,在Yarn上进行管理运行等等。

最外层就涉及基础数据存储。我们可以用文档型数据库,关系型数据库,图数据库等等。所有这些数据存储系统Spark都能访问,这归功于Techyon。它对底层不同的数据存储系统进行封装,提供统一的API进行访问。它还可以看作是是对底层数据的缓存,更多关于Techyon的内容可以参照深入浅出Techyon。

我们再来看看Spark生态圈的各个部分跟传统Hadoop系统的对应关系。

由上图可见,Hadoop MapReduce对应Spark核心,Yarn对应Mesos,HDFS对应Tachyon等等。

3.Spark的优点

Spark最重要优点就是快。为什么Spark比较快呢?我们来看看下图。

传统Hadoop计算过程中,MapReduce任务需要跑很多次,需要多次迭代,每次迭代计算的结果都需要存下来,存到HDFS,而HDFS本身就是一些硬盘,所以本质上就是把每次计算的结果存到硬盘上。而且存到硬盘上还需要考虑备份,一般是三次备份。于是计算总时间中一大部分将花到硬盘存储上。之前我们提到程序运行时间,知道它包括四个因素:计算时间,数据传输时间,任务调度时间,和并行度。在传统MapReduce计算当中,存储占用了大部分时间。而Spark不同,它是将中间计算的结果放在内存当中,然后在内存中进行迭代计算,速度自然更快。另外,Spark还存下了计算结果从何而来,即Lineage。如果内存数据丢失,通过Lineage再找父母要,再计算一遍。虽然重复计算丢失的数据将花费较多时间,但是数据丢失的概率很低,所有Spark整体计算的速度将提升10到100倍。

我们再来看看Spark之所以快的一些数字。

由上图可见,CPU直接访问内存,速度将达到10GB/s。而访问本地硬盘,速度降为100MB/s,跟访问内存的速度相差100倍。如果访问SSD硬盘,速度可以达到600MB/s,但是SSD的价格很高。如果是同机架网络访问,速度差不多是125MB/s,比访问本地硬盘还要稍快一些。而如果是跨机架网络访问,速度仅为12.5MB/s。

如果你想了解更多关于Spark的内容,可以阅读相关论文和书籍。比如说《Spark: Cluster Computing with Working Sets》,《Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing》,《Learning Spark》和《Advanced Analytics with Spark》。

总结
Spark是一个支持任务调度,监控及分布式部署的通用计算引擎,它通过内存内运算技术和计算关系的血统来提升运算速度。

spark 之 spark是什么?相关推荐

  1. Spark之 spark简介、生态圈详解

    来源:http://www.cnblogs.com/shishanyuan/p/4700615.html 1.简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorith ...

  2. BigData之Spark:Spark计算引擎的简介、下载、经典案例之详细攻略

    BigData之Spark:Spark计算引擎的简介.下载.经典案例之详细攻略 目录 Spark的简介 1.Spark三大特点 Spark的下载 Spark的经典案例 1.Word Count 2.P ...

  3. Spark之Spark角色介绍及运行模式

    Spark之Spark角色介绍及运行模式 集群角色 运行模式 1. 集群模式 从物理部署层面上来看,Spark主要分为两种类型的节点,Master节点和Worker节点: Master节点主要运行集群 ...

  4. Spark之Spark概述

    Spark之Spark概述 什么是Spark Spark内置项目介绍 Spark特点 Spark的用户和用途 1. 什么是Spark Spark是一种快速.通用.可扩展的大数据分析引擎,2009年诞生 ...

  5. 【Spark】Spark基础教程知识点

    第 1 部分 Spark 基础 Spark 概述 本章介绍 Spark 的一些基本认识. Spark官方地址 一:什么是 Spark Spark 是一个快速(基于内存), 通用, 可扩展的集群计算引擎 ...

  6. [Spark][Python]Spark 访问 mysql , 生成 dataframe 的例子:

    [Spark][Python]Spark 访问 mysql , 生成 dataframe 的例子: mydf001=sqlContext.read.format("jdbc").o ...

  7. Hive on Spark和Spark sql on Hive,你能分的清楚么

    摘要:结构上Hive On Spark和SparkSQL都是一个翻译层,把一个SQL翻译成分布式可执行的Spark程序. 本文分享自华为云社区<Hive on Spark和Spark sql o ...

  8. 【Spark】Spark Stream读取kafka写入kafka报错 AbstractMethodError

    1.概述 根据这个博客 [Spark]Spark 2.4 Stream 读取kafka 写入kafka 报错如下 Exception in thread "main" java.l ...

  9. Spark报错: Invalid Spark URL: spark://YarnScheduler@stream_test_nb:40659

    1.背景 参考:请点击 参考:请点击 参考:请点击 org.apache.spark.SparkException: Invalid Spark URL: spark://YarnScheduler@ ...

  10. 外部数据源 之 Plugin 可插拔的方式整合到Spark中/Spark源码中

    一:概念理解 Plugin 可插拔的方式整合到Spark中/Spark源码中 为了在用外部数据源读取文件的时候,本来读取是valui 使他变成一个带schema的df 有具体的信息 外部数据源就是把很 ...

最新文章

  1. iOS开发几年了,你清楚OC中的这些东西么!!!?
  2. php where 优先,php – 使用WHERE选择所有内容
  3. linux 挂载光盘映像,在 Windows Mac和Linux上,如何挂载iso和其他光盘映像
  4. linux缓存限制,如何限制复制使用的缓存,以便仍有其他缓存可用的内存?_linux_开发99编程知识库...
  5. 咱们程序员,能吵吵就别动手!现在靠说就可以编程,支持Java、Python等10种语言|免费...
  6. log 框架 之间的关系
  7. oracle 审计用户登录信息,Oracle预警用户登录锁定、过期及其审计信息
  8. php中双等与三等,利用php中双等于和三等于的区别,无需密码拿到flag
  9. 本地缓存需要高时效性怎么办_Android性能优化之关于缓存的构思
  10. linux下清理脚本,脚本--Linux下清理IPC资源
  11. C# lock 学习
  12. 萨维奇(Savitch)定理证明
  13. Apache详细的安装和配置
  14. Linux下的mplayer播放器移植与使用
  15. 【考研经验】2018福州大学考研初试+复试心得
  16. form表单字段默认值
  17. 关于错误修改了/etc/profile文件(环境变量错误)
  18. STM32c8t6Flash地址空间的数据读取
  19. ubuntu自动挂载windows分区和开机自动启动wallproxy
  20. Android 12小时制/24小时制获取方式及转换

热门文章

  1. pda输出模式设置,在pda手持设备上,文本框的输入监听焦点受输出模式影响
  2. 螣龙安科:迷宫勒索病毒——勒索受害者一年并且人数仍在增长
  3. 【c++ -- 谓词】
  4. 智能投顾奇葩发展术:越靠“爹”,越有机会
  5. 我的咖啡服务器维护,我的咖啡厅MyCafe文字版全食谱配方详解
  6. org.eclipse.wst.common.project.facet.core.xml
  7. github搜索方法
  8. Linux--解决上cf慢的问题(通过修改hosts)
  9. 【mysql的使用】
  10. ROS中的TF坐标变换