Spark作为一个新的分布式计算引擎正慢慢流行起来,越来越来的企业也准备用它的替换MapReduce,根据自己在工作的一些体会谈谈的优势。

分布式计算归根到底还是一个Map和Reduce操作,Map操作对每个数据块进行计算,Reduce操作对结果进行汇总,现在一些NoSQL分布式数据库其实也是这么一套计算框架,只是map和reduce太基础,太简陋,实现相关的业务时开发比较复杂,不符合生产力发展的需求,这样Spark对map和reduce进行了抽象和封装提出了RDD的概念
 
RDD的提出是Spark的最大的进步,它让我们不再关注计算本身,以前我们老想着map,reduce啥的,RDD对数据集进行抽象,我们的关注点变成了数据集本身,又借鉴了函数式编程的一些思想,我们可以对数据集做各种各样的操作(spark的transformation和action),Spark框架底层转换了map和reduce的操作,大大的提高了生成力。当然还加入了一些优化,比如map的输出不需要落地,其实要做大数据的计算怎么可能不落地。做大数据的聚集操作时磁盘和网络IO依旧是制约速度的主要原因
 
 
Spark提供了更加灵活的DAG编程模型,在spark,每一个RDD用来描述数据集的一个状态,而这个状态是从上一个状态转换过来的,因此RDD之间会形成一个依赖关系,这种RDD的依赖链会触发一个job,而job会被切分成一个stage的DAG图。给了job很大的优化空间,目前DAG减少了数据的读写(缓冲在内存中)和网络的传输(宽依赖和窄依赖),用于迭代和交互计算支持。 传统的mapreduce为了进行迭代计算,需要多个job进行依赖,数据要不停的在HDFS上进行读写,性能大大降低。
 
还一个优化就是Spark的作业调度。Spark的job是线程级别的,而spark sql中一个sql就是一个job, sql的执行轻量很多。hive的job是进程级别的,一个sql就是一个job,需要启动多个jvm进程。

对Spark的理解的更多相关文章

  1. 【Spark工作原理】Spark任务调度理解

    Spark内部有若干术语(Executor.Job.Stage.Task.Driver.DAG等),需要理解并搞清其内部关系,因为这是性能调优的基石.   节点类型有: 1. Master 节点: 常 ...

  2. spark partition 理解 / coalesce 与 repartition的区别

    一.spark 分区 partition的理解: spark中是以vcore级别调度task的. 如果读取的是hdfs,那么有多少个block,就有多少个partition 举例来说:sparksql ...

  3. Spark 快速理解

    转自:http://blog.csdn.net/colorant/article/details/8255958 ==是什么 == 目标Scope(解决什么问题) 在大规模的特定数据集上的迭代运算或重 ...

  4. spark机制理解(一)

    一  基本术语 Application:  基于Spark的用用户程序,包含了Driver程序和集群上的Executor. Driver Program: 运行行main函数并且新建SparkCont ...

  5. Spark RDD理解

    目录 ----RDD简介 ----RDD操作类别 ----RDD分区 ----宽依赖和窄依赖作用 ----RDD分区划分器 ----RDD到调度 返回顶部 RDD简介 RDD是弹性分布式数据集(Res ...

  6. Spark RDD理解-总结

    1.spark是什么 快速.通用.可扩展的分布式计算引擎. 2. 弹性分布式数据集RDD RDD(Resilient Distributed Dataset),是Spark中最基本的数据抽象结构,表示 ...

  7. Spark里边:Worker源代码分析和架构

    首先由Spark图表理解Worker于Spark中的作用和地位: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYW56aHNvZnQ=/font/5a6L ...

  8. Spark+ECLIPSE+JAVA+MAVEN windows开发环境搭建及入门实例【附详细代码】

    http://blog.csdn.net/xiefu5hh/article/details/51707529 Spark+ECLIPSE+JAVA+MAVEN windows开发环境搭建及入门实例[附 ...

  9. Spark处理日志文件常见操作

    spark有自己的集群计算技术,扩展了hadoop mr模型用于高效计算,包括交互式查询和 流计算.主要的特性就是内存的集群计算提升计算速度.在实际运用过程中也当然少不了对一些数据集的操作.下面将通过 ...

随机推荐

  1. Java进阶知识点3:更优雅地关闭资源 - try-with-resource及其异常抑制

    一.背景 我们知道,在Java编程过程中,如果打开了外部资源(文件.数据库连接.网络连接等),我们必须在这些外部资源使用完毕后,手动关闭它们.因为外部资源不由JVM管理,无法享用JVM的垃圾回收机制, ...

  2. HDFS超租约异常总结(org.apache.hadoop.hdfs.server.namenode.LeaseExpiredException)

    HDFS超租约异常总结(org.apache.hadoop.hdfs.server.namenode.LeaseExpiredException) 转载 2014年02月22日 14:40:58 96 ...

  3. Navicat中MySQL server has gone away错误怎么办【转载】

    转载链接:http://www.111cn.net/database/mysql/64073.htm mysql数据库出现MySQL server has gone away错误一般是sql语句太大导 ...

  4. 九、python沉淀之路--递归、全局变量、局部变量、作用域

    一.递归 1.递归函数,同时使用嵌套,并且是将别的函数作用于调用函数里面 例1 num = [1,2,3,4,5] def add_one(i): return i+1 def reduce(i): ...

  5. TP中登录验证

    loginpro 1.建立控制器 loginController.calss.php <?php namespace Admin\Controller; header('Content-type ...

  6. Python函数-callable()

    callable(object) 作用: 检查对象object是否可调用.如果返回True,object仍然可能调用失败:但如果返回False,调用对象ojbect绝对不会成功. 注意: 类是可调用的 ...

  7. Asp.net工作流workflow实战之工作流启动与继续(三)

    工作流帮助类: //让工作流继续沿着书签的位置向下执行value是向书签传递参数 wfc.ResumeBookmark(bookmarkName,value); //把传过来的数据value作为输出参 ...

  8. C语言 字符串中数字的运算

    主函数中输入字符串"32486"和"12345",在主函数中输出的函数值为44831. #include <stdio.h> #include &l ...

  9. springboot springcloud eureka

    参考: https://www.cnblogs.com/skyblog/p/5133752.htmlhttp://blog.csdn.net/u012734441/article/details/78 ...

  10. HDU 2544 最短路(邻接表+优先队列+dijstra优化模版)

    最短路 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...