Spark计算模型

Spark计算模型

标签(空格分隔): spark


Spark依靠Scala强力的面向函数的编程、Actor通信模式、闭包、容器、泛型,借助统一资源分配调度框架Mesos,融合了MR和dryad,形成了简洁灵活高效的大数据分布式框架。为什么要用spark?因为有时候需要同时处理的数据量太大,超过了一台电脑所能承受的量,或者是有些计算过于复杂,计算时间过久,这种人等计算机的状态是难以接受的,于是要用分布式计算来处理,而spark已经逐渐代替hadoop的mapreduce在分布式计算中的使用,因为它更快更简便。同样在即时计算中,spark streaming也变得越来越好,而且spark MLlib也是我未来学习的目标。

Spark程序模型

Created with Raphaël 2.1.0 start data(HDFS等) RDD 1 textFile() 把HDFS中的数据读入RDD RDD 2 filter() 根据一定规则过滤 RDD 3 count() 从过滤结果中统计需要的结果 End

一个简单的spark计算模型如上图,整个流程感觉不到分布式的存在,像编写单机程序一样。(但实际上他的运行模型涉及集群中多个不同分工的节点,后续再进行整理。)首先将数据从HDFS或Hive或Hbase等地方读到RDD弹性分布式数据集中,RDD包含多个partition逻辑块,分别进行计算汇总到下一个RDD中,最终得到result partition。

RDD

RDD是一种逻辑数据结构,包含了所操作的数据的实际地址和RDD所要进行的运算,一个RDD包括了多个partition,他们在物理上可能不连续,可能分布在不同的节点上,但是进行同一个运算,结果可能写入到同一个partition中(在下一个RDD中)。

4种创建方式

  1. 从文件系统中获取
  2. 从父RDD进行计算后得到结果RDD
  3. 调用sc的parallelize方法,将Driver上的数据集转换成RDD
  4. 通过cache()等函数将计算后的RDD缓存到内存中,供后续计算使用。

RDD的2种算子

  1. Transformation:变换只是定义了spark程序该如何做,等到有action执行的时候,才会真正执行。这类算子包括:
    输入输出分区一对一:mapValues(a=>a+1)针对每一个数据进行相同的操作
    单个RDD聚集:combineByKey、reduceByKey和partitionBy,这三个在MapReduce很有代表性。
    对两个RDD聚集:cogroup,两个RDD的相同分区进行combineByKey操作。
    连接:join:两个RDD进行笛卡儿积,然后对结果RDD进行combineByKey计算。同样还有左外连接和右外连接。后两者相比于join多了对某一个RDD中的元素在另一个RDD中是否存在的判断,若为空赋值null,然后再进行combineByKey操作。

  2. Action:触发Spark提交job,并将计算结果输出到Spark系统。
    这类算子都会执行sc.runJob进行作业提交,从而触发Transformation的执行。根据输出的对象不同,可以分为无输出、HDFS、Scala集合和数据类型

    无输出:foreach,没有结果RDD和Array,而是返回Unit
    
    HDFS:saveAsTextFile将结果写入到HDFS中,一个RDD写入到HDFS的一个block中;
    saveAsObjectFile将一个partition中的每10个元素组成一个Array数组,然后序列化,写成SequenceFile格式,同样是一个RDD对应HDFS中的一个block。
    
    Scala集合和数据类型:collect将RDD转换成一个scala Array数组,供scala计算。
    collectAsMap将RDD转换成HashMap,如果存在相同的Key,则保留新的Key。
    reduceByKeyLocally先将RDD进行reduce操作,然后再collectAsMap。
    lookup对制定key的value形成sequence。
    count计数。
    top统计最大的k个元素,这个函数感觉应用场景非常大,因为大数据中最值更有价值。相似的还有take最小的k个元素。
    reduce对RDD中每个分区进行reduceleft,再对分区结果进行reduceleft。
    fold在reduce的基础上,每有一个元素都会对0进行一次reduce。
    aggregate对RDD中的多个分区同时进行aggregate,然后将各个分区的结果进行reduce归并。(怎么看都是mapreduce的思路)
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值