What’s new in Spark 1.2.0
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的更多相关文章
- Spark快速入门 - Spark 1.6.0
Spark快速入门 - Spark 1.6.0 转载请注明出处:http://www.cnblogs.com/BYRans/ 快速入门(Quick Start) 本文简单介绍了Spark的使用方式.首 ...
- 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 ...
- Apache Spark 2.2.0 中文文档 - 概述 | ApacheCN
Spark 概述 Apache Spark 是一个快速的, 多用途的集群计算系统. 它提供了 Java, Scala, Python 和 R 的高级 API,以及一个支持通用的执行图计算的优化过的引擎 ...
- Apache Spark 2.2.0 中文文档 - Spark 编程指南 | ApacheCN
Spark 编程指南 概述 Spark 依赖 初始化 Spark 使用 Shell 弹性分布式数据集 (RDDs) 并行集合 外部 Datasets(数据集) RDD 操作 基础 传递 Functio ...
- Apache Spark 2.2.0 中文文档 - Spark Streaming 编程指南 | ApacheCN
Spark Streaming 编程指南 概述 一个入门示例 基础概念 依赖 初始化 StreamingContext Discretized Streams (DStreams)(离散化流) Inp ...
- Apache Spark 2.2.0 中文文档 - Spark SQL, DataFrames and Datasets Guide | ApacheCN
Spark SQL, DataFrames and Datasets Guide Overview SQL Datasets and DataFrames 开始入门 起始点: SparkSession ...
- Apache Spark 2.2.0 中文文档 - SparkR (R on Spark) | ApacheCN
SparkR (R on Spark) 概述 SparkDataFrame 启动: SparkSession 从 RStudio 来启动 创建 SparkDataFrames 从本地的 data fr ...
- [Spark性能调优] 第三章 : Spark 2.1.0 中 Sort-Based Shuffle 产生的内幕
本課主題 Sorted-Based Shuffle 的诞生和介绍 Shuffle 中六大令人费解的问题 Sorted-Based Shuffle 的排序和源码鉴赏 Shuffle 在运行时的内存管理 ...
- Apache Spark 2.2.0新特性介绍(转载)
这个版本是 Structured Streaming 的一个重要里程碑,因为其终于可以正式在生产环境中使用,实验标签(experimental tag)已经被移除.在流系统中支持对任意状态进行操作:A ...
随机推荐
- C++对C语言的非面向对象特性扩充(3)
今天要讲的是C++作用域运算符"::",强制类型转换的扩充,C++中相对于C中malloc和free函数的运算符new和delete,以及C++对C的一个重要扩充:引用(refer ...
- dialog组件的jquery封装实现
(function($){ $.extend({ Dialog : function(id, options){ var option = $.extend({}, options); option. ...
- spoj 3871 gcd extreme
题目大意给出一个n,求sum(gcd(i,j),<i<j<=n); 可以明显的看出来s[n]=s[n-]+f[n]; f[n]=sum(gcd(i,n),<i<n); 现 ...
- openrisc 之 Wishbone总线学习笔记——总线互联
一,总线命名规范 1,wishbone总线接口信号都是高电平有限 2,wishbone接口信号都是以 _i ,或者是 _o 结束.i表示输入, o表示输出. ()表示该信号为总线信号,总线位宽可以大于 ...
- 转: 模块化开发框架seajs简介
JavaScript模块化开发库之SeaJSSeaJS由国内的牛人lifesinger开发.目前版本是1.1.1,源码不到1500行,压缩后才4k,质量极高.这篇会讲述SeaJS的一些基本用法,不会面 ...
- js触屏事件
js的左右滑动触屏事件,主要有三个事件:touchstart,touchmove,touchend.这三个事件最重要的属性是 pageX和 pageY,表示X,Y坐标. touchstart在触摸开始 ...
- POJ 3518 Prime Gap(素数题)
[题意简述]:输入一个数,假设这个数是素数就输出0,假设不是素数就输出离它近期的两个素数的差值,叫做Prime Gap. [分析]:这题过得非常险.由于我是打的素数表. 由于最大的素数是1299709 ...
- Js中的多条件排序,多列排序
參见github: https://github.com/Teun/thenBy.js
- c++中的对象引用(object reference)与对象指针的区别
★ 相同点: 1. 都是地址的概念: 指针指向一块内存,它的内容是所指内存的地址:引用是某块内存的别名. ★ 区别: 1. 指针是一个实体,而引用仅是个别名: 2. 引用使用时无需解引用(*),指针需 ...
- stm32之GPIO
stm32有5组GPIO口,GPIOA GPIOB GPIOC GPIOD GPIOE 每个GPIO端口有: 2个配置寄存器GPIOx_CRL, GPIOx_CRH(32位): 2个数据寄存器GPIO ...