-
离线分析
对于一段时间的数据,进行收集,整理,分析,得出一定的结论
这个结论会帮助人们做出一定的决策。不要求时限性。
批处理方式 -
在线(实时)分析
必须要求时限性,在最短时间之内对输入的数据进行响应
流处理方式
spark
对于大规模数据处理的快如闪电的统一的分析引擎
作者:
美国加州大学伯克利分校AMP(算法,机器,人)实验室
目的:
通过对算法,机器和人的大规模整合,展现大数据的应用
特点:
-
速度
比MR快100X,即使使用磁盘快10X以上(理论值)
快的原因:
a.基于内存
b.DAG有向无环图
c.查询上的优化
d.物理的执行引擎 -
易用性
a.支持scala,java,python,R,SQL
b.可以使用scala,python,R,SQL的shell交互式使用
c.提供了超过80种的高级操作(算子) -
通用性
在一个应用程序中可以无缝整合所有的组件
在一个技术栈统治所有
sparkCore:不做特殊指定,就是spark的核心引擎
sparkSQL:处理结构化数据的组件
sparkStreaming:处理实时数据的组件
通过批处理模拟实时处理
是伪实时计算框架,使用微批处理方式
MLlib:机器学习算法库
GraphX:图计算 -
运行在任何地点
a.可以在很多环境上运行
local standalone onYarn …
b.可以读取各种数据源
HDFS,Hive,Hbase,file,jdbc,…
为什么MR计算的慢?spark为什么快?
MR在shuffle阶段要进行很多次的磁盘IO操作,大大降低了运行的效率
每做一次HDFS的写操作都需要默认存储3个副本,也消耗了大量的资源
spark在必要的时候也需要做shuffle,避免不了磁盘IO的操作
但是在不必要使用shuffle的时候,可以使用内存替代磁盘,提高效率
环境搭建:
-
本地环境(local)
a.解压缩
b.配置环境变量
c.执行
spark-submit --master local[*] --class xxx xx.jar -
独立模式(standalone)
服务,调度器等一切都有spark自己提供自己使用
在本地模式的基础上
a.修改配置文件
spark-env.sh SPARK_MASTER_HOST=node200
slaves node200
b.启动服务
${SPARK_HOME}/sbin/start-all.sh
或者 start-master.sh;start-slaves.sh
c.正确执行
spark-submit --master spark://node200:7077 --class xxx xx.jar -
集群模式(on Yarn)
在独立的模式的基础上,修改配置文件
spark-env.sh
HADOOP_CONF_DIR=xxx
两种部署方式
1)client
在哪个节点提交任务,就直接在那个节点启动Driver
直接把结果输出到控制台
2)cluster
不管在哪个节点提交任务,都向master汇报,
由master分配节点启动Driver
把结果输出到hadoop的日志文件中
RDD(弹性的分布式的数据集)
是sparkCore的计算核心,是计算的瞬时结果.
弹性的:对于一些小的变化,不影响整体变化
分布式的:rdd本身不是分布式,里面的数据是分布式存储的
数据集:数据的集合,就是从各种数据源读来的数据。
- 特点:
1.rdd内的partition是并行计算,有统一的计算规则,过程互不干扰
2.RDD是依赖于上一个RDD
3.每个RDD的输入数据来源于上一个RDD的数据输出
4.每个RDD的数据是不可变的
5.每个application都可以通过源码绘制一张有向无环图
6.RDD是抽象的概念,partition是具体的概念 - 五大特性
1.分区的集合
2.一个函数作用于所有的切片
3.rdd依赖于其他rdds
4.rdd可以重新分区
5.hdfs上的block块数据,直接读取到当前节点内存中计算,遵循数据本地性
容错:
整体来说是根据依赖关系进行的,依赖关系我们叫血统。
如果某个partition出现错误,会根据运算运行图向它的父级依赖查找数据
如果能找到数据,直接取数据进行下面的运算,无需考虑上面的内容
如果找不到数据,一直向上级查找直到找到数据(最坏的情况是找到HDFS)
如果某个节点计算时间长,可以重新找个位置,从HDFS上读取数据重新计算
哪个快就取哪个的数据,另一个被舍弃掉。
算子:
官网中 hige-level operation
本质:函数
区分算子和函数:
使用rdd调用的就是算子
使用的是普通的集合调用就是函数
分类:
-
转换算子(transformation算子)
可以对数据做各种各样的处理,但是不提交任务。
相当于是规划整体的执行过程。
创建算子:
从无到有的过程,把数据转换成rdd类型
a.textFile(读文本)
b.wholeTextFiles(读文本)
c.makeRdd(已知集合)
d.parallelize(已知集合)
缓存算子:
可以对需要保存的rdd做持久化
a.cache
b.persist
c.checkPoint -
行动算子(action算子)
在由转换算子规划好任务之后,由行动算子提交任务,开始执行
把rdd转成具体的数据
持久化:
a.就是把rdd临时永久保存到计算机的某个地方。
b.持久化是自动容错的,如果某个位置的数据丢失,会自动获取数据重新计算,把计算到当前rdd的结果自动补充到丢失的位置。
使用方式:
- 创建持久化: