Spark简介
主要用来加快数据分析的运行和读写速度
基于MapReduce算法实现的分布式计算,在拥有Hadoop MapReduce所有优点的基础上,其任务的中间结果还可以保存在内存中,查询速度快
处理迭代算法(机器学习、图挖掘算法)和交互式数据挖掘算法方面具有较大优势
核心概念是RDD,弹性分布式数据集
弹性,在计算过程中,当遇到内存不足时,它可以与硬盘进行数据交换,虽然在某种程度上程序要降低性能,但可以保证计算的顺利进行
分布式的,它可以分布在多台机器上进行并行计算
表示已分区、不可改变的能够被并行操作的数据集合
RDD数据集的操作结束都可以存储至内存,下一个操作内容从内存中读取
不同的数据格式对应不同的RDD
BDAS
大数据时代数据处理目标
通过对历史数据低延时交互式处理,从而更快地作出决策,例如一个站点缓慢的原因
通过对流式数据的快速处理,从而可以作出实时决策,例如实时监测并阻止蠕虫
通过对复杂数据的处理,从而作出更好、更准确的决策,例如异常检测、趋势分析等
常见的开源分析栈
主要关注保存在磁盘上的大型数据集,虽然在批处理上具有较多的优化,但处理速度相对较慢
目标是将批处理、交互式处理和流处理在一个堆栈中实现,能够比较容易地开发复杂的算法,并且与目前开源的Hadoop/HDFS相兼容
结构
资源管理层
实现基础设施框架的共享、数据中心的多级程序
数据管理层
基础框架间有效的数据共享
数据处理层
内存数据处理以及处理的时间、质量和成本
应用层
主要包括新的应用
RDD
在保留MapReduce等数据流模型框架的优点同时(自动容错、本地优化分配、可扩展性),使得用户可以明确地将一部分数据缓存在内存中,以加速这部分数据之后的查询和计算过程
提供了一种高度限制的共享内存,但是这些限制可以使得自动容错的开支变得很低
使用一种称为血统的容错机制,即每一个RDD都包含关于它是如何从其他RDD变换过来的以及如何重建某一块数据的信息
通用的迭代并行计算的框架,使得用户能够显示地控制计算的中间结果,然后将其自由地运用于之后的计算
基本概念
只读、分区记录的集合。RDD只能基于在稳定物理存储中的数据集和其他已有的RDD上执行确定性操作来创建
RDD不需要物化,RDD含有如何从其他RDD衍生出本RDD的相关信息,据此可以从物理存储的数据计算出相应的RDD分区
依赖的分类
narrow dependency
如果RDD的每个分区最多只能被一个Child RDD的一个分区使用
可以支持在同一个cluster node上以管道形式执行多个命令
恢复更加有效,只需要重新计算丢失的父分区就行,而且可以并行地在多个节点进行重计算
wide dependency
如果多个Child RDD分区都可以依赖
需要所有父分区都是可用的,可能还需要调用类似MapReduce的操作进行跨节点传递
一个RDD可以包含多个分区,每个分区就是一个dataset片段,RDD可以相互依赖
和分布式共享内存DSM的对比
RDD限制应用执行批量写操作,这样有助于实现有效的容错
落后的任务,RDD可以通过备份的任务进行处理
SparkSQL
SparkSQL对SQL的处理和关系型数据库对SQL语句的处理方法类似
处理过程
先讲SQL语句进行解析,形成一个Tree
后面的绑定、优化等过程都是对语法树进行的操作,操作的方法是采用Rule
通过模式匹配,对不同类型的节点采用不同的操作,在整个SQL语句处理过程中,语法树和Rule相互配合,完成了解析、绑定、优化、物理计划等过程,最终生成可以执行的物理计划
MLlib
是Spark对常用的机器学习算法的实现库,也包括相应的测试和数据生成器
支持四种常见的机器学习问题
二元分类
回归
协同过滤
聚类
一个底层下降优化基础算法
支持的算法
基本统计
概要统计
相关分析
分层取样
假设检验
随机数据生成
分类与回归
线性模型
决策树
朴素贝叶斯
协同过滤
最小二乘法
聚类
K-means
降维
奇异值分析
主成分分析
特征提取及转换