美文网首页
今日份Spark(一)

今日份Spark(一)

作者: 日更专用小马甲 | 来源:发表于2019-05-09 22:56 被阅读0次

    和MR的对比

    Spark相对于MapReduce在2类场景下会显著增强:

    1. 交互式的场景
    2. 内存迭代计算型的场景。

    原因比较简单:比如在1TB日志中,查找Error日志,找到Error日志后再查找早上10点到12点的日志,再找10点00到10点05的日志,类似于单机时候问题排查。

    如果用MR实现,可能就是一次次类似grep的操作,如果通过Spark实现就可以在找到Error日志时把数据缓存在内存。避免反复从文件系统加载数据。因为RAM比硬盘或者网络快很多。

    粗颗粒度转换 vs 细颗粒度更新

    一张表100万数据,数据是用户名,年龄,粗颗粒度就是分成若干个分区,比如每1万条数据一个分区作为维度,共100个分区。细颗粒度就是每条数据作为维度。如果年龄要统一加一岁,粗颗粒转换就是用一个map函数存储age += 1这样的信息,不管原来的年龄是18,30还是54。细颗粒度更新就是每条数据单独存储,18的变为19,30的变为31,54的变为55。

    High Performance Spark上对于粗颗粒度的解释:

    functions that are applied to the entire dataset

    函数作用于整个数据集,相应的就是作用于单条数据,比如数据库的某行记录的更新。

    细颗粒度的优势是更新可以针对单条数据,缺点是如果要保证容错性,要把每个阶段的数据都存下来,比如18和19这2个年龄。

    粗颗粒度就可以针对异常的分区,根据血缘关系,直接从上层数据计算而来。等于用时间换空间。

    粗颗粒度的另一个优势是可以惰性求值。

    惰性求值

    transform算子如map、filter不会立即执行,而是在action算子时才触发执行。action算子会触发调度器,基于RDD之间的转换关系,构建一个DAG(有向无环图)。也就是说在求值时,它会构建出如何通过一系列步骤到达要求值的点,比如先filer再map,就是2个步骤。这些步骤被称为执行计划。然后调度器依据这些执行计划计算出缺失的分区。

    把算子想象成编程的指令。整个过程就是指令编译为可执行代码并惰性求值的故事!

    针对pipeline类型的情况,可以进行指令合并。

    相关文章

      网友评论

          本文标题:今日份Spark(一)

          本文链接:https://www.haomeiwen.com/subject/kldnoqtx.html