What’s new in Spark 1.2.0

1.2.0 was released on 12/18, 2014

在2014年5月30日公布了Spark 1.0 和9月11日公布了Spark1.1.后,Spark 1.2 最终在12月18日公布。作为1.X时代的第三个release,它有什么重要更新呢?

1.    Spark Core:性能和易用性的改进

对于超大规模的Shuffle,Spark Core在性能和稳定性方面做了两个重要的更新:

一)     Communication Manager使用Netty实现

在1.1 之前,对于Shuffle的结果回传。有两种方式,对于较小的结果,直接使用akka的消息传递机制。对于较大的结果。则採用BlockManager。採用BlockManager是不错的设计,能够避免Driver占用过多的内存而OOM并且降低了GC的风险。可是,BlockManger的处理是低效的:它先从Disk中将结果读取到kernel的buffer,然后到用户空间的buffer,然后又到了kernel的send buffer,这期间有多次的内存拷贝和kernel space到user space的切换代价。着不单单是占用了JVM的不必要的内存,并且还添加了GC的频率。

只是。使用FileChannel.transferTo,能够做到zero copy。详细可见http://www.ibm.com/developerworks/library/j-zerocopy/

当中一种实现就是Netty。1.2中。使用Netty 重写了Communication Manager。实际上。在org.apache.spark.network.netty中已经实现了netty得网络模块,可是由于不完好而这个选项默认是没有打开的。

并且,使用Netty已经是默认的了。spark.shuffle.blockTransferService 已经从1.1的nio变成1.2 中新增的netty了。

关于这个PR的详情可见 https://issues.apache.org/jira/browse/SPARK-2468

二)     Shuffle的默认机制从hashbased 转化为sort based

MapReduce被人诟病之中的一个就是无论sort是否必要,都须要排序。Spark在1.1之前。都是hash based Shuffle。可是hash based会占用大量的内存。当然了在内存不够用时,也会spill到disk,然后最后再做一次merge。对于比較大的数据集,由于有disk IO,因此性能也会有所下降。Shuffle的性能的好坏能够说直接影响整个job的性能也不为过。在1.1的时候,引入了sort based shuffle。在1.2的时候,这个已经能够成熟并且成为默认的选项:

spark.shuffle.manager 从hash 变为sort。

并且从作者Reynold Xin的測试来看。sort 在速度和内存使用方面优于hash:“sort-based shuffle has lower memory usage and seems to outperformhash-based in almost all of our testing.”

2.    MLlib: 扩充了Python API

3.    Spark Streaming:实现了基于WriteAhead Log(WAL)的HA,避免由于Driver异常退出导致的数据丢失

4.    GraphX: 性能和API的改进(alpha)

Spark 1.2 是来自60多家企业,学校等研究机构的172位贡献者的一次重要公布。从Contributor的数量看。Spark社区依旧是最活跃的开源社区之中的一个。

从Spark的历次更新都能够看出,高速迭代是互联网的王道。

Spark发展到如今,尽管依旧有这种那样的问题,可是依靠不断的迭代,各大厂商的支持和各位contributor的不断付出,相信社区会持续高速发展。

尽管商业软件可能几年前就已经攻克了这些问题。商业软件可能在某个应用场景已经有了最佳的实现。可是互联网的禀赋就在于不求最优。仅仅求合适。并且对于各个中小型的互联网公司来说。场景不断在变。须要一个自己能够掌控的架构,随着自身的发展不断的在这个架构上做高速的迭代。

而Spark,也许就是这个适合大家的架构。

后记:尽管没有几个小时间,我发现实力完全死。你还需要锻炼。练习啊。

版权声明:本文博客原创文章,博客,未经同意,不得转载。

What’s new in Spark 1.2.0的更多相关文章

  1. Spark快速入门 - Spark 1.6.0

    Spark快速入门 - Spark 1.6.0 转载请注明出处:http://www.cnblogs.com/BYRans/ 快速入门(Quick Start) 本文简单介绍了Spark的使用方式.首 ...

  2. Spark 1.1.0 编译(为了支持hbase 0.98.6)

    为了支持hbase0.98.6,需要重新编译spark 1. 下载spark 1.1.0源代码,以及 scala-2.10.4的bin包. 将环境变量 SCALA_HOME 设置为 scala-2.1 ...

  3. Apache Spark 2.2.0 中文文档 - 概述 | ApacheCN

    Spark 概述 Apache Spark 是一个快速的, 多用途的集群计算系统. 它提供了 Java, Scala, Python 和 R 的高级 API,以及一个支持通用的执行图计算的优化过的引擎 ...

  4. Apache Spark 2.2.0 中文文档 - Spark 编程指南 | ApacheCN

    Spark 编程指南 概述 Spark 依赖 初始化 Spark 使用 Shell 弹性分布式数据集 (RDDs) 并行集合 外部 Datasets(数据集) RDD 操作 基础 传递 Functio ...

  5. Apache Spark 2.2.0 中文文档 - Spark Streaming 编程指南 | ApacheCN

    Spark Streaming 编程指南 概述 一个入门示例 基础概念 依赖 初始化 StreamingContext Discretized Streams (DStreams)(离散化流) Inp ...

  6. Apache Spark 2.2.0 中文文档 - Spark SQL, DataFrames and Datasets Guide | ApacheCN

    Spark SQL, DataFrames and Datasets Guide Overview SQL Datasets and DataFrames 开始入门 起始点: SparkSession ...

  7. Apache Spark 2.2.0 中文文档 - SparkR (R on Spark) | ApacheCN

    SparkR (R on Spark) 概述 SparkDataFrame 启动: SparkSession 从 RStudio 来启动 创建 SparkDataFrames 从本地的 data fr ...

  8. [Spark性能调优] 第三章 : Spark 2.1.0 中 Sort-Based Shuffle 产生的内幕

    本課主題 Sorted-Based Shuffle 的诞生和介绍 Shuffle 中六大令人费解的问题 Sorted-Based Shuffle 的排序和源码鉴赏 Shuffle 在运行时的内存管理 ...

  9. Apache Spark 2.2.0新特性介绍(转载)

    这个版本是 Structured Streaming 的一个重要里程碑,因为其终于可以正式在生产环境中使用,实验标签(experimental tag)已经被移除.在流系统中支持对任意状态进行操作:A ...

随机推荐

  1. poj 2515 Birthday Cake

    /** 大意 : 求1^m + 2^m + 3^m + 4^m +....+ n^m 解题步骤: 先构造从0到m的第1阶差分序列,然后以下所有2---->p阶的差分表. 令C[n+1][1]=n ...

  2. Android抖动动画

    //CycleTimes动画重复的次数 public Animation shakeAnimation(int CycleTimes) { Animation translateAnimation = ...

  3. Hadoop Hive与Hbase整合+thrift

    Hadoop Hive与Hbase整合+thrift 1.  简介 Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句 ...

  4. ios7状态栏属性的设置

    /* 状态栏的管理: 1> iOS7之前:UIApplication进行管理 2> iOS7开始:交给对应的控制器去管理 */ // 设置状态栏的样式 - (UIStatusBarStyl ...

  5. 2015暑假acm短训小结

    时间很快,短训已经结束,短短20天,心里有一些思绪想要记下. 收获: 从最近发的随笔中可以看出,做得最多的是搜索——Dfs,Bfs.对于搜索,如何描述状态,如何压缩状态,如何决定下一个结点,是否可以剪 ...

  6. iOS开发之理解iOS中的MVC设计模式

    模型-视图-控制器(Model-View-Controller,MVC)是Xerox PARC在20世纪80年代为编程语言Smalltalk-80发明的一种软件设计模式,至今已广泛应用于用户交互应用程 ...

  7. Android 中 关闭部分 Activity 的方法总结

    每一个activity都有自己的生命周期,被打开了最终就要被关闭. 四种结束当前的activity方法 但如果已经启动了四个Activity:A,B,C和D, 在D Activity里,想再启动一个A ...

  8. codeigniter ,看完这些,就可以用它做项目了

    一.MVC 1,入口文件 唯一一个让浏览器直接请求的脚本文件 2,控制器 controller 负责协调模型和视图 3,模型 model 只负责提供数据,保存数据 4,视图 只负责显示,以及搜集用户的 ...

  9. 使用zabbix监控nginx

    在zabbix agentd客户端上,查看nginx是否加载了--with-http_stub_status_module.因为zabbix监控nginx是根据 nginx的Stub Status模块 ...

  10. Cin、Cout 加快效率方法

    std::ios::sync_with_stdio(false); 在main 函数中加上这么一句话. 可以打消iostream的输入输出缓存,可以节省许多时间,使效率与scanf与printf相差无 ...