为了账号安全,请及时绑定邮箱和手机立即绑定

Spark学习之问题整理

标签:
Spark

关于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%的数据会重复

解决方案:

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

设置一张事务表。


webp

待更。。。。。。

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



作者:大数据首席数据师
链接:https://www.jianshu.com/p/9692647aec7e


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消