1.spark 是什么?
spark是一个用来实现快速而通用的集群计算的平台
他的一个主要特点是能够在内存中计算,因而更快。不过即使是必须在磁盘上进行的复杂计算,spark依然比MapReduce更加高效。
总的来说,spark适用于各种各样原先需要多种不同的分布式平台的场景,包括批处理、迭代算法、交互式查询、流处理。通过一个统一的框架支持这些不同的计算,spark可以简单低耗的把这些处理流程整合在一起。 因此spark的核心引擎由这通用和速度快的特点。
1.2 spark 的各个组件
下面分别介绍各个组件:
1.2.1 spark core
spark core实现了spark的基本功能,包含任务调度、内存管理、错误回复、与存储交互等模块。spark core中还包含了对弹性分布式数据集(resilient distributed dataset) 简称RDD 的api定义。RDD表示分布分布在多个计算节点上可以并行操作的元素集合,是spark主要的编程抽象。spark core提供了创建和操作这些集合的多个api。
1.2.2 spark sql
spark sql 是用来操作结构化数据的程序包。通过spark sql我们可以使用sql或者Apache Hive 版本的sql方言来查询数据。spark sql支持多种数据源,比如Hive表、Paquet以及Json等。开发这都可以在单个的应用中同时使用sql和复杂的数据分析。
1.2.3 spark streaming
spark streaming 是spark提供的对实时数据进行流式计算的组件。比如生产环境中的网页服务器izhi,或者是网络服务中用户提交的状态更新组成的消息队列,都是数据流。spark streaming提供了用来操作数据流的api,并且与spark core中的RDD api高度对应。这样无论是操作内存或者是硬盘,或者是实时数据流,都能应对自如。从底层设计来看,spark streaming 支持与spark core同级别的容错行,吞吐量以及可伸缩性。
1.2.4 Mlib
这是一个常见机器学习ML功能的程序库,叫做MLib。Mlib提供了很多中机器学习算法,包括分类、回归、聚类、协同过滤等。
1.2.5 GraphX
GraphX 是用来操作图)(比如社交网络的朋友关系图)的程序库,可以进行并行的图计算。与spark streaming和spark sql类似,GraphX也扩展了spark的RDD api,能用来创建一个顶点和边都包含任意属性的有向图。GraphX还支持针对图的各种操作,比如图分割,和操作所有定点,以及常用图算法。
1.2.6 集群管理器
就底层而言,spark设计可以高效的在一个计算节点到术前个计算节点之间伸缩的计算,spark灵活的支持在各种集群管理器上运行,包括Hadoop YARN,Apache Mesos,以及spark自带的一个简易的调度器。如果要在没有安装任何集群管理器上安装spark,那么spark自带的独立调度器可以让你轻松入门,而如果在已经安装了Hadoop YARN 或者Mesos的集群,你的应用同样可以流畅的运行在机器上。
1.3 spark 简史
spark是由一个强大而活跃的开源社区开发和维护的。2009年作为一个研究项目在加州大学伯克利分校RAD实验室诞生。spark一开始是为交互式查询和迭代算法设计的,同时还支持内存式存储和高效的容错机制。
2009年诞生
2010年3月开源
2013年6月交给了apache基金会,现在已经成为了apache下面的顶级项目