大数据学习大数据,机器学习,人工智能程序员

Spark学习之问题整理

2018-11-14  本文已影响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%的数据会重复

解决方案:

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

设置一张事务表。

待更。。。。。。

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

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

上一篇下一篇

猜你喜欢

热点阅读