SPARK是一个分布式的基于内存的大数据执行引擎,最早由加州伯克利大学AMP Lab主导开发,后来加入apache社区孵化,进而成为apache顶级大数据项目。目前spark在开源社区和工业界非常火爆,堪称大数据最活跃的开源项目。Spark在大数据领域之所以受到如此青睐,主要源于如下几方面优势:
- 数据集抽象: 提供一个分布式弹式数据集(RDD,ResilientDistributed Dataset)抽象,基于RDD的转换操作被翻译为RDD间的有向无环图(DAG),同时RDD的转换算子(transformation)的延迟性使得调度器可以对DAG进行流水线优化,这使得SPARK不再如MR仅仅支持map-reduce两步计算,而是多步的DAG任务。另外RDD提供缓存机制,可将数据集缓存在内存进行重复使用,提升计算性能。
- 高容错性: RDD抽象记忆了其“血统”信息,即自身RDD与父辈RDD的依赖关系,故SPARK提供了基于依赖关系重计算丢失数据的容错机制,同时也提供checkpoint容错。
- 多计算范式支持:SPARK对多计算模型的支持,自从SPARK发布以来,SPARK社区逐步开发sparksql,spark streaming, spark mllib、spark graghx等多个模型库,从而做到一栈式支持了,sql查询(结构化数据分析)、流计算、机器学习、图计算等多种计算模型。
- 高易用性:SPARK简洁的API和多语言支持,给上层用户提供了良好的开发体验。
- 兼容性:SPARK目前越来越壮大的生态系统,以及与hadoop生态系统的完美融合,促使更多的用户拥抱SPARK。
基于SPARK的如上优势,SPARK目前被广泛的应用于机器学习、ETL、商业智能BI、交互式分析等领域。本文主要介绍Spark(SQL)的应用。
从市场分析结果以及专业咨询公司的报告数据中可以了解到,无论是在企业领域还是电信领域,当前的大数据应用,至少一半以上的应用是SQL分析/统计类。SPARK生态栈内的spark sql组件,由于其先天与spark社区高度融合,支持表列式cache,对接多种数据源对接,兼容hive语法/metastore等优势,无疑是 sql on hadoop的优选方案。
SPARK SQL的社区现状
Spark sql 是 spark 社区在 1.0 版本引入的,关于 spark sql 和shark, hive on spark的关系可以参见databricks 博客: