hadoop生态圈:分布式存储-hdfs;分布式批处理-mapreduce
将大量数据进行处理,获取我们需要的有价值的信息
弊端:频繁的写磁盘;网络磁盘io
1 hadoop已经远远无法满足对于数据的处理效率的需求
2 原先是将数据在批判中进行转移,能不能放到内存中
spark处理引擎
RDD:分布式的弹性数据集。虽然是数据集但是内部不存储数据,工作地点:内存
RDD特性:
1 是由一个个的partition
2 每一个partition在计算的时候都有一个函数作用在其上
val rdd=sc.textfile()
rdd.map
3 rdd之间有依赖关系,分为宽依赖和窄依赖,有算子来区分依赖
4 rdd内部是一些KV格式的rdd(1,echo)(key,value)
5 自己寻找最佳计算位置
大数据的计算原则:::计算找数据,,移动计算比移动数据容易
任务调度:
spark提供了80多个算子供使用,算子可理解为我们已经写好的一些函数,封装在spark中,我们只需要调用
算子,三类:
1 转换算子,将数据进行格式化的转换。如rdd1:string-rdd2:int
2 action算子
3 cache persist(控制类算子)就是数据持久化的过程
宽窄依赖
窄依赖:父与子的对应关系是1对1
val rdd=sc.textfile()
val filterRDD=rdd.filter()转换算子
val mapRDD=filterRDD.map()
宽依赖:父与子的对应关系是1对多--shuffle
val rdd=sc.textfile()
val reduceRDD=rdd.reduceByKey聚合
val groipRDD=reduceRDD.groupByKey分组
为甚会有依赖?
1 避免数据丢失。。即使数据丢失、我可以根据依赖关系找到上一个RDD,重新进行计算。
2会根据RDD依赖关系划分job。切割stage
注:apllication(任务)--写的程序
job进程---action类算子(她两的个数一致)
stage--一组task
task---spark计算的最小单位,他的内部其实 是一个个的线程
每遇见宽依赖就会划分一次stage
DAG有向无环图
task其实就是将我们的partition进行一个关联和整合
fun2(fun1(tex))
这个函数知道遇见action算子结束
stage==taskset
RDD---- DAGScheduler高层调度器:根据我们的宽窄依赖切割job划分stage(重试3次)----taskScheduler底层调度器:将我们的stage的task根据数据的位置发送到该执行的地点(重试3次)
重试机制:task失败后,就是重新运行。基本可以保证任务能够完成
感谢echo老师
网友评论