spark.storage.memoryFraction参数的含义,实际⽣产中如何调优?
解析:
答:1)⽤于设置RDD持久化数据在Executor内存中能占的⽐例,默认是0.6,,默认Executor 60%的内存,可以⽤来保存持久化的RDD数据。根据你选择的不同的持久化策略,如果内存不
够时,可能数据就不会持久化,或者数据会写⼊磁盘。2)如果持久化操作⽐较多,可以提⾼spark.storage.memoryFraction参数,使得更多的持久化数据保存在内存中,提⾼数据的读取性
能,如果shuffle的操作⽐较多,有很多的数据读写操作到JVM中,那么应该调⼩⼀点,节约出更多的内存给JVM,避免过多的JVM gc发⽣。在web ui中观察如果发现gc时间很⻓,可以设置
spark.storage.memoryFraction更⼩⼀点。
spark.shuffle.memoryFraction参数的含义,以及优化经验?
解析:
答:1)spark.shuffle.memoryFraction是shuffle调优中 重要参数,shuffle从上⼀个task拉去数据过来,要在Executor进⾏聚合操作,聚合操作时使⽤Executor内存的⽐例由该参数决定,默认
是20%
如果聚合时数据超过了该⼤⼩,那么就会spill到磁盘,极⼤降低性能;2)如果Spark作业中的RDD持久化操作较少,shuffle操作较多时,建议降低持久化操作的内存占⽐,提⾼shuffle操作
的内存占⽐⽐例,避免shuffle过程中数据过多时内存不够⽤,必须溢写到磁盘上,降低了性能。此外,如果发现作业由于频繁的gc导致运⾏缓慢,意味着task执⾏⽤⼾代码的内存不够⽤,
那么同样建议调低这个参数的值
介绍⼀下你对Unified Memory Management内存管理模型的理解?
解析:
答:Spark中的内存使⽤分为两部分:执⾏(execution)与存储(storage)。执⾏内存主要⽤于shuffles、joins、sorts和aggregations,存储内存则⽤于缓存或者跨节点的内部数据传输。
6之前,对于⼀个Executor,内存都有哪些部分构成:
解析:
www.aboutyun.com/thread-24246-1-1.html 22/57
2019/4/24 spark相关的⾯试题跟答案,带着问题学习效果更佳哟。?)-⾯试区-about云开发
1)ExecutionMemory。这⽚内存区域是为了解决 shuffles,joins, sorts and aggregations 过程中为了避免频繁IO需要的buffer。 通过spark.shuffle.memoryFraction(默认 0.2) 配置。
2)StorageMemory。这⽚内存区域是为了解决 block cache(就是你显⽰调⽤dd.cache, rdd.persist等⽅法), 还有就是broadcasts,以及task results的存储。可以通过参数
spark.storage.memoryFraction(默认0.6)。设置
3)OtherMemory。给系统预留的,因为程序本⾝运⾏也是需要内存的。 (默认为0.2).
传统内存管理的不⾜:
1).Shuffle占⽤内存0.2*0.8,内存分配这么少,可能会将数据spill到磁盘,频繁的磁盘IO是很⼤的负担,Storage内存占⽤0.6,主要是为了迭代处理。传统的Spark内存分配对操作⼈的要求⾮
常⾼。(Shuffle分配内存:ShuffleMemoryManager, TaskMemoryManager,ExecutorMemoryManager)⼀个Task获得全部的Execution的Memory,其他Task过来就没有内存了,只能等待。
2).默认情况下,Task在线程中可能会占满整个内存,分⽚数据特别⼤的情况下就会出现这种情况,其他Task没有内存了,剩下的cores就空闲了,这是巨⼤的浪费。这也是⼈为操作的不当
造成的。
3).MEMORY_AND_DISK_SER的storage⽅式,获得RDD的数据是⼀条条获取,iterator的⽅式。如果内存不够(spark.storage.unrollFraction),unroll的读取数据过程,就是看内存是否⾜
够,如果⾜够,就下⼀条。unroll的space是从Storage的内存空间中获得的。unroll的⽅式失败,就会直接放磁盘。
4). 默认情况下,Task在spill到磁盘之前,会将部分数据存放到内存上,如果获取不到内存,就不会执⾏。永⽆⽌境的等待,消耗CPU和内存。
在此基础上,Spark提出了UnifiedMemoryManager,不再分ExecutionMemory和Storage Memory,实际上还是分的,只不过是Execution Memory访问Storage Memory,Storage Memory也
可以访问Execution Memory,如果内存不够,就会去借。
---------------------------------------------------------------------------------------------------------------------
【Spark⾯试2000题101-130】Spark on Yarn⾯试篇04
本篇题集主要是Spark on Yarn相关的⾯试题,主要涉及Spark on Yarn、Yarn、Mapreduce相关⾯试题。
⼀、⾯试题30题
解析:
1)可扩展性(对于变化的应付能⼒)
a) JobTracker内存中保存⽤⼾作业的信息
b) JobTracker使⽤的是粗粒度的锁
2)可靠性和可⽤性
a) JobTracker失效会多事集群中所有的运⾏作业,⽤⼾需⼿动重新提交和恢复⼯作流
3)对不同编程模型的⽀持
www.aboutyun.com/thread-24246-1-1.html 23/57
2019/4/24 spark相关的⾯试题跟答案,带着问题学习效果更佳哟。?)-⾯试区-about云开发
HadoopV1以MapReduce为中⼼的设计虽然能⽀持⼴泛的⽤例,但是并不适合所有⼤型计算,如storm,spark