锁屏面试题百日百刷-Spark篇(六)

锁屏面试题百日百刷,每个工作日坚持更新面试题。锁屏面试题app、小程序现已上线,官网地址:https://www.demosoftware.cn。已收录了每日更新的面试题的所有内容,还包含特色的解锁屏幕复习面试题、每日编程题目邮件推送等功能。让你在面试中先人一步!接下来的是今日的面试题:

1.什么时候需要启用checkpoint?

(1)使用了stateful转换-如果 application 中使用了updateStateByKey或reduceByKeyAndWindow等 stateful 操作,必须提供 checkpoint 目录来允许定时的RDD checkpoint

(2)希望能从意外中恢复Driver。

2.导出checkpoint数据

<1> checkpoint 的时机

在 Spark Streaming 中,JobGenerator 用于生成每个 batch 对应的 jobs,它有一个定时器,定时器的周期即初始化 StreamingContext 时设置的 batchDuration。这个周期一到,JobGenerator 将调用generateJobs方法来生成并提交 jobs,这之后调用 doCheckpoint 方法来进行 checkpoint。doCheckpoint 方法中,会判断当前时间与streaming application start 的时间之差是否是 checkpoint duration 的倍数,只有在是的情况下才进行checkpoint。

<2> checkpoint 的形式

最终 checkpoint 的形式是将类 Checkpoint的实例序列化后写入外部存储,值得一提的是,有专门的一条线程来做将序列化后的 checkpoint 写入外部存储。

3.Spark的内存模型

Spark的Executor的内存管理是基于JVM的内存管理之上,Spark对JVM堆内(On-Heap)空间进行了更为详细的分配,以便充分利用内存,同时Spark引入堆外内存(OffHeap)内存,可以直接在Worker节点的系统内存中开辟空间,进一步优化内存使用。

Spark的堆内(On-Heap)空间是由--executor-memory或spark.executor.memory参数配置,Executor内运行的并发任务共享JVM堆内内存。而且该堆内内存是一种逻辑上的管理,因为对象的释放都是由JVM完成。

Spark引入堆外内存(OffHeap)内存主要是为了提高Shuffle排序的效率,存储优化过的二进制数据。从2.0之后Spark可以直接操作系统的堆外内存,减少不必要的开销。改参数默认不开启,通过spark.memory.offHeap.ennable参数启用,并由spark.memory.offHeap.size参数设定堆外空间大小。

默认情况下,Spark 仅仅使用了堆内内存。Executor 端的堆内内存区域大致可以分为以下四大块:

Execution 内存:主要用于存放 Shuffle、Join、Sort、Aggregation 等计算过程中的临时数据

Storage 内存:主要用于存储 spark 的 cache 数据,例如RDD的缓存、unroll数据;

用户内存(User Memory):主要用于存储 RDD 转换操作所需要的数据,例如 RDD 依赖等信息。

预留内存(Reserved Memory):系统预留内存,会用来存储Spark内部对象。

Execution 内存和 Storage 内存动态调整

上面两张图中的 Execution 内存和 Storage 内存之间存在一条虚线,这是为什么呢?

在 Spark 1.5 之前,Execution 内存和 Storage 内存分配是静态的,换句话说就是如果 Execution 内存不足,即使 Storage 内存有很大空闲程序也是无法利用到的;反之亦然。这就导致我们很难进行内存的调优工作,我们必须非常清楚地了解 Execution 和 Storage 两块区域的内存分布。而目前 Execution 内存和 Storage 内存可以互相共享的。也就是说,如果 Execution 内存不足,而 Storage 内存有空闲,那么 Execution 可以从 Storage 中申请空间;反之亦然。所以上图中的虚线代表 Execution 内存和 Storage 内存是可以随着运作动态调整的,这样可以有效地利用内存资源。Execution 内存和 Storage 内存之间的动态调整可以概括如下

具体的实现逻辑如下:

1 程序提交的时候我们都会设定基本的 Execution 内存和 Storage 内存区域(通过

spark.memory.storageFraction 参数设置);

2 在程序运行时,如果双方的空间都不足时,则存储到硬盘;将内存中的块存储到磁盘的策略是按照 LRU规则进行的。若己方空间不足而对方空余时,可借用对方的空间(; 存储空间不足是指不足以放下一个完整的 Block);

3 Execution 内存的空间被对方占用后,可让对方将占用的部分转存到硬盘,然后"归还"借用的空间

4 Storage 内存的空间被对方占用后,目前的实现是无法让对方"归还",因为需要考虑 Shuffle过程中的很多因素,实现起来较为复杂;而且 Shuffle 过程产生的文件在后面一定会被使用到,而 Cache在内存的数据不一定在后面使用。

注意:上面说的借用对方的内存需要借用方和被借用方的内存类型都一样,都是堆内内存或者都是堆外内存,不存在堆内内存不够去借用堆外内存的空间。

Task 之间内存分布

为了更好地使用使用内存,Executor 内运行的 Task 之间共享着 Execution 内存。具体的,Spark 内部维护了一个 HashMap 用于记录每个 Task 占用的内存。当 Task 需要在 Execution 内存区域申请 numBytes 内存,其先判断 HashMap 里面是否维护着这个 Task 的内存使用情况,如果没有,则将这个 Task 内存使用置为0,并且以 TaskId 为 key,内存使用为 value 加入到 HashMap 里面。之后为这个 Task 申请 numBytes 内存,如果Execution 内存区域正好有大于 numBytes 的空闲内存,则在 HashMap 里面将当前 Task 使用的内存加上numBytes,然后返回;如果当前 Execution 内存区域无法申请到每个 Task 最小可申请的内存,则当前 Task 被阻塞,直到有其他任务释放了足够的执行内存,该任务才可以被唤醒。每个 Task 可以使用 Execution 内存大小范围为 1/2N ~ 1/N,其中 N 为当前 Executor 内正在运行的 Task 个数。一个 Task 能够运行必须申请到最小内存为 (1/2N * Execution 内存);当 N = 1 的时候,Task 可以使用全部的 Execution 内存。

比如如果 Execution 内存大小为 10GB,当前 Executor 内正在运行的 Task 个数为5,则该 Task 可以申请的内存范围为 10 / (2 * 5) ~ 10 / 5,也就是 1GB ~ 2GB的范围。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 华为荣耀原线刷解锁id锁屏平台工具包是为解决华为荣耀手机出现id锁屏问题而推出的一款工具包。在使用华为荣耀手机时,有时会出现id锁屏问题,这种情况下,你需要使用正确的工具才能解决这个问题。 华为荣耀原线刷解锁id锁屏平台工具包是华为品牌推出的一款专门针对id锁屏问题的工具包。它包含了一系列的工具和软件,能够帮助你使用最有效的方式来解决id锁屏问题。在使用该工具包之前,你需要确保你的手机已经成功地连接到计算机上,然后按照工具包的说明一步一步地进行操作。 使用该工具包可以在一定程度上帮助你减少手机维修的花费,让你能够更加方便快捷地解锁id锁屏问题。但是,需要注意的是,在使用该工具包之前,你需要仔细阅读说明,并且确认已经备份了重要的数据和文件,以免造成数据的丢失。 总之,华为荣耀原线刷解锁id锁屏平台工具包是一款非常实用的解决id锁屏问题的工具,但使用者需要在正确认识工具的功能和使用前提下,按照说明正确操作,以免产生不必要的风险。 ### 回答2: 华为荣耀原线刷解锁ID锁屏平台工具包是为了解决恢复华为荣耀手机的出厂设置而设计的。在使用这个工具包之前,首先需要确保手机已经开启了USB调试和OEM解锁功能,否则会出现无法使用的情况。 通过使用华为荣耀原线刷解锁ID锁屏平台工具包,可以轻松地解决一些华为荣耀手机出现的问题。例如,当手机出现无法正常启动、系统崩溃、忘记锁屏密码、无法进入系统等问题时,可以使用这个工具包进行解决。它可以将手机恢复到出厂设置,同时解锁ID锁屏,让用户重新设置密码并重新使用手机。 同时,需要注意的是,使用这个工具包必须谨慎。因为要对手机进行解锁,需要进行一些操作,如果不小心操作不当可能会造成数据丢失,所以一定要备份好手机上的重要数据。此外,在使用工具包的时候,根据不同的手机型号,需要下载相应的刷机包和驱动程序,确保刷机的成功性。 总之,华为荣耀原线刷解锁ID锁屏平台工具包对于华为荣耀手机的重要性不言而喻,但是在使用的时候必须谨慎。只有在懂得如何使用这个工具包的前提下,才能避免不必要的麻烦。 ### 回答3: 华为荣耀手机原线刷解锁ID锁屏平台工具包,指的是用户可通过该工具包对自家的荣耀系列手机进行指定操作。具体而言,在一些特殊的使用场景下(例如忘记了ID或密码),该工具包能够帮助用户解决手机无法正常使用的问题。 然而,需要注意的是,解锁ID锁屏需要一些特殊的前提条件和操作步骤,而操作不当有可能会导致手机出现各种问题。所以,在使用该工具包前,用户需要具有相应的技术和操作经验,并严格按照软件的提示和操作手册步骤执行操作,以避免造成不必要的麻烦和损失。 总之,华为荣耀原线刷解锁ID锁屏平台工具包是一个可以帮助用户解决荣耀手机锁屏问题的工具,但是需要用户具备一定的技术实力和操作经验。如果不确定自己的操作技巧,建议用户寻求专业的技术支持和服务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值