Spark初识
1 Spark的背景、定义、特点
- 背景
- MapReduce框架局限性
- 仅支持Map和Reduce两种操作,提供给用户的只有这两种操作
- 编程复杂度略高,学习和使用成本略高。
- 处理效率低效
- Map中间结果写磁盘,Reduce写HDFS,多个MR之间通过HDFS交换数据
- 任务调度和启动开销大
- 在机器学习、图计算等方面支持有限,性能效率表现比较差。
- mapreduce的机器学习框架,称为mahout。
- MapReduce框架局限性
- 定义
- 专为大规模数据处理而设计的快速通用的计算引擎,并形成一个高速发展应用广泛的生态系统。
- 特点
- 速度快
- 内存计算下,Spark 比 Hadoop 快100倍
- 易用性
- 80多个高级运算符
- 跨语言:使用Java,Scala,Python,R和SQL快速编写应用程序。
- 通用性
- Spark 提供了大量的库,包括SQL、DataFrames、MLib、GraphX、Spark Streaming。
- 开发者可以在同一个应用程序中无缝组合使用这些库。
- 速度快
- 支持多种资源管理器
- Spark 支持 Hadoop YARN,Apache Mesos,及其自带的独立集群管理器
生态组件丰富与成熟
在hadoop生态圈位置
- spark生态圈
- Spark Core:包含Spark的基本功能;尤其是定义RDD(弹性分布式数据集,resilient distributed dataset)的API、操作以及这两者上的动作。其他Spark的库都是构建在RDD和Spark Core之上的
- Spark SQL:提供通过Apache Hive的SQL变体Hive查询语言(HiveQL)与Spark进行交互的API。每个数据库表被当做一个RDD,Spark SQL查询被转换为Spark操作。
- Spark Streaming:对实时数据流进行处理和控制。Spark Streaming允许程序能够像普通RDD一样处理实时数据
- MLib:一个常用机器学习算法库,算法被实现为对RDD的Spark操作。这个库包含可扩展的学习算法,比如分类、回归等需要对大量数据集进行迭代的操作。
- GraphX:控制图、并行图操作和计算的一组算法和工具的集合。GraphX扩展了RDD API,包含控制图、创建子图、访问路径上所有顶点的操作
SparkR是一个提供从R中使用Spark的轻量级前端的R包。在Spark1.6以后,SparkR提供了分布式数据框架,它支持selection,filtering,aggregation等操作。也支持使用MLib分布式机器学习。
3 版本发展与就业前景
版本发展
- 重要里程碑
- 稳定版本一览( 2016年至今)
较经典的版本为1.x中的1.6.2版本和2.x中的2.3.2,成熟稳定,市占率高。
- spark1.x与2.x的优缺点对比
- 优点
- API抽象更高级、更统一,包括在spark-core,sparksql,sparksession等方面,学习更简单,开发效率更高,执行效率综合提升明显。
- 统一DataFrames和DataSets为DataSets,API进行了全部统一,简化学习和编程复杂度。
- 基本定位是低层API编程延用RDD,高级API编程均为DataSets,而大多数情况下用DataSets均可以解决问题。
- spark-streaming基于spark sql进行了API更高级抽象,即structured streaming(结构化流式编程),易用性和性能提高。
- 对诸多组件中的旧的rdd计算逻辑用DataFrame或DataSet进行了重写优化,并扩充了更多的算法。
- 缺点
- 对以前版本不是完全兼容,只是绝大部分兼容。
- 相对于1.6.x来讲,稳定性略差, bug不断。
- 结论
- 鉴于版本的迭代逐渐成熟化,我们本次授课定版为2.3.2版本。
- 优点
- 就业前景
- 成熟度相比于hadoop还差一些,但自身迭代和生态圈发展很快。
- 业务对实时性要求日渐增高,各大公司和小公司都在积极调研转向spark,都需要懂spark、用spark的人
- Spark特别适合于迭代运算比较多的机器学习算法,而机器学习正在如火如荼发展中。
- Spark未来可能会取代MapReduce,但与Hadoop仍会友好共生。
- 基于内存计算是最大优势,而内存瓶颈会越来越少,故Spark的爆发点还有很大空间。
- 总结:岗位需求量和发展前景都很广阔,是未来3-5年的技术应用最大热门。