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 ...
随机推荐
- BZOJ 1194: [HNOI2006]潘多拉的盒子( BFS + tarjan + dp )
O(S²)枚举2个诅咒机, 然后O(n²)BFS去判断. 构成一个有向图, tarjan缩点, 然后就是求DAG的最长路.. ------------------------------------- ...
- fieldset效果
<form> <fieldset> <legend>健康信息</legend> 身高:<input type="text" / ...
- 一、Linux启动过程详解
启动第一步--加载BIOS当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它.这是因为BIOS中包含了CPU的相关信息.设备启动顺序信息.硬盘 ...
- jQuery tablesort插件推荐
搜索结果的第一条网址(似乎是Official Site)似乎有问题(也可能是我弄错了 总之chrome中有个叉叉) 所以还是用这个吧http://mottie.github.io/tablesort ...
- NET Core,你必须了解无处不在的“依赖注入”
NET Core,你必须了解无处不在的“依赖注入” ASP.NET Core的核心是通过一个Server和若干注册的Middleware构成的管道,不论是管道自身的构建,还是Server和Middle ...
- NOIP2015
现在来总结一下. 斗地主 这题的题目描述感觉不太清晰,当时有很多人去问,但都没有得到任何回应.好吧,虽然我也是似懂非懂,但是就算看清楚了题目又能怎么样呢. 首先这题只能够搜索吧,或者说是DP,不过有很 ...
- Uva 511 Updating a Dictionary
大致题意:用{ key:value, key:value, key:value }的形式表示一个字典key表示建,在一个字典内没有重复,value则可能重复 题目输入两个字典,如{a:3,b:4,c: ...
- poj 2833 The Average(堆)
题目链接:http://poj.org/problem?id=2833 思路分析:由于数据量较大,超出存储范围,使用不能使用数组存储数据在进行排序.考虑维护一个最大堆与最小堆,依次读取数据, 记录数据 ...
- Poj 2092 Grandpa is Famous(基数排序)
题目链接:http://poj.org/problem?id=2092 思路分析:先统计数据,在根据Count降序排序,Count相等时按照Num升序排序:再输出Count第二大的所有Num: 代码如 ...
- cocos2D(二)---- cocos2D文档的使用
在使用cocos2d进行游戏开发的过程中,难免要查阅cocos2d的API文档.搞清楚怎么使用某个类或者某个方法.幸运的是,cocos2d的作者已经在源码里面加入了文档凝视,我们仅仅须要使用文档生成工 ...