Spark学习之问题整理

作者: 大数据首席数据师 | 来源:发表于2018-11-14 21:56 被阅读17次

    关于RDD算子的问题:

    1、如果Application中只有一个action类算子,那么有没有必要使用控制类算子?

    没有,因为一个action类算子对应一个job,没必要往内存或磁盘中写。

    2、如果持久化的级别是MEMORY_ONLY(CACHE),如果内存不足会不会出现OOM?

    不会出现,能存多少就存多少,不会报错。存不下的就不存了,等需要的时候会根据依赖关系重新计算。

    3、如果持久化的级别是MEMORY_AND_DISK,会不会将一个partition的数据一部分存储到内存一部分在磁盘?

    不会,因为存储单元是partition,不容分割。

    Stage中的一些问题:

    1、stage中每一个task(管道计算模式)在什么时候落地磁盘?

    如果是stage后面是action类算子:

    collect:将每一个管道的计算结果收集到Driver端的内存中。

    saveAsTextFile:将每一个管道的计算结果写到指定记录。

    count:将管道的计算结果统计记录数,返回给Driver。

    如果是stage后面是stage:

    在shuffle write阶段会写磁盘,目的是为了防止reduce task拉取数据失败。倘若不写入磁盘,一旦拉取失败会重新向Map端拉取数据,会重新shuffle,写入磁盘,直接在磁盘拉取就可以。

    2、spark在计算的过程中,是不是非常消耗内存?

    不是,因为stage的计算模式是管道计算模式。

    3、什么场景下最耗内存?

    控制类算子,cache

    4、解释一下如果管道中有cache逻辑,他是如何缓存数据的?

    会复制一份相同的数据进行缓存。

    5、RDD弹性分布式数据集,为什么不能存储数据,还依然叫数据集?

    虽然RDD是逻辑上的概念,但是RDD具有管理数据的能力,也可说RDD所映射的数据。

    推测执行相关问题:

    1、如果1T数据,单机运行30分钟就能执行完毕,但是使用spark来计算(4个节点),需要2小时,为什么?

    原因:

    1)计算发生了数据倾斜(大量的数据给了少量的task,少量的数据给了大量的task);

    2)开启了推测执行机制,会复制多份挣扎task。

    2、对于ETL(Extract Transform Load)类型的业务,开启推测执行,重试机制,对于最终的结果会不会有影响?

    会有影响。最终数据库中会有重复的数据。比如,当task执行到90%的时候发生了错误,开启重试机制,那么这90%的数据会重复

    解决方案:

    关闭各种推测、重试机制。

    设置一张事务表。

    待更。。。。。。

    大家喜欢多多关注,你的关注是我最大的动力

    可以关注我的微信公众号:首席数据师 里面有很多关于大数据的干货

    相关文章

      网友评论

        本文标题:Spark学习之问题整理

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