摘要:Apache Spark 2.0 正式发布,下面来深度解读一下。主要从Apache Spark 2.0的Easier、Faster和Smarter三方面来体现。
Easier: ANSI SQL and Streamlined APIs
除了Spark一贯“引以为傲”的简单易用API外,Spark 2.0主要聚焦在两方面:
(1) standard SQL support;
(2) DataFrame/Dataset API的统一。
在SQL方面,扩展了Spark的SQL支持,引入ANSI SQL解析器和子查询。Spark 2.0 可执行所有99 TPC-DS查询(支持SQL:2003)。
在API编程方面,主要是提供了简化的Spark APIs:
- DataFrames和Datasets的API统一,支持Scala/Java,关于RDD、DataFrames和Datasets三种API的详细解析见《Apache Spark 2.0三种API的传说:RDD,DataFrame和Dataset》;
- SparkSession:SparkSession在Spark 2.0中是替代SQLContext和HiveContext的,作为新的入口点。老的SQLContext和HiveContext继续保留,味了向后兼容;
- 更简单、更高效的Accumulator API;
- 基于DataFrame的Machine Learning API作为主要的ML API;
- 机器学习管道的持久化,详细解析见《Apache Spark 2.0预览: 机器学习模型持久化》;
- R语言支持Distributed algorithm。
Faster: Apache Spark as a Compiler
重新思考Spark的物理执行层时,发现大部分CPU时间花费在毫无意义的工作上了,比如,虚拟函数的调用或者读/写中间数据到CPU cache或者内存,着在其它现代数据引擎中都存在(Spark或者MPP数据库)。所以得想办法减少CPU时间浪费。
Spark 2.0 使用第二代Tungsten engine。Tungsten engine应用现代编译器原理和MPP数据库技术到Spark。主要得方法是“whole-stage code generation”。具体分析见我在InfoQ上的文章。
Smarter: Structured Streaming
Spark Streaming在Spark 2.0之前仅仅是个streaming engine。但广大使用者需要的是离线处理和实时处理深度结合的系统,并能处理业务逻辑的变化,和外部数据存储交互。
对比之前的streaming系统,Structured Streaming有三方面的优化:
- 和批处理job作业的API整合:开发者简单的用DataFrame / Dataset API写完批处理计算,Spark会以Streaming形式自动的进行增量计算;
- 和存储系统交互中保持事务性:Structured Streaming会在跨引擎和存储系统中处理fault tolerance和consistency;
- 和Spark其它组件紧密集成: Structured Streaming处理完的数据可直接放入Spark SQL和MLlib等处理。
结论
以上即为Apache Spark 2.0的解读,主要在用户的易用性和性能上做了优化。
侠天,专注于大数据、机器学习和数学相关的内容,并有个人公众号:bigdata_ny分享相关技术文章。
若发现以上文章有任何不妥,请联系我。