zoukankan      html  css  js  c++  java
  • [杂谈]重新认识RDD

    在spark中,怎么强调RDD都不为过,很多资料把RDD的第一个单词翻译成弹性,我觉得这个翻译偏离本意太严重了

    • RDD,能够快速恢复的分布式式内存数据集;为什么是内存数据集? 因为spark是为更高效的迭代计算而设计的,相比其它的计算框架比如mr,spark大尺度地利用了集群的内存(数据一旦落盘,就需要序列化,磁盘io, 甚至网络io,性能就低了)

    • 因为是内存数据集,RDD的容错性设计不能基于副本(内存多宝贵啊,哪经得起副本这种败家玩法;而且如果使用副本技术,需要把同一个副本的数据存放到不同的机器的内存,这个会发生很大的网络io),而是基于lineage。这个和mr有很大差别。

    • RDD需要在计算过程中提供容错能力,海量数据集的快速恢复是必备能力。RDD不能像RMDB使用像redo,undo这种细粒度的方式来提供恢复能力。为什么?

    • 如果RDD使用细粒度的方式,它需要建立内存共享(share memory)的机制,需要做大量的内存加锁,线程/进程同步的工作,可想而知,效率会很低。

    • RDD使用的是粗粒度的容错性:先通过transformation建立逻辑上的lineage。如果需要容错,可以通过lineaga重新计算一遍transforamtion来构造RDD,大部分场景中,这个过程要远比从磁盘重新load数据进内存快得多。

    • 这种方式,可以避免对RDD加锁,避免实现分布式锁和分布式同步,性能会更高,但是必须要求RDD“不可变”。

    • 当然,spark也为RDD提供了缓存的能力,避免重新计算,尤其对复杂低效的计算,比如shuffle。总之,这种方式,简单粗暴,能快速恢复但消耗内存。

    快速恢复是RDD特性,这也是Resilient这个单词的本意呀。

  • 相关阅读:
    LINQ/EF/Lambda 比较字符串日期时间大小
    WinForm RDLC SubReport Step by step
    centos7安装7-zip
    centos修改命令提示符颜色
    更换官方zabbix.repo为阿里云镜像
    利用shell脚本清理nginx日志
    docker
    centos 建立静态 IP 与 IP 地址丢失的解决办法
    构建lnmp高可用架构
    keepalived高可用
  • 原文地址:https://www.cnblogs.com/ivanny/p/look_into_rdd.html
Copyright © 2011-2022 走看看