Spark技术内幕: 如何解决Shuffle Write一定要落盘的问题?
2015-01-11 15:13
381 查看
在Spark 0.6和0.7时,Shuffle的结果都需要先存储到内存中(有可能要写入磁盘),因此对于大数据量的情况下,发生GC和OOM的概率非常大。因此在Spark 0.8的时候,Shuffle的每个record都会直接写入磁盘,并且为下游的每个Task都生成一个单独的文件。这样解决了Shuffle解决都需要存入内存的问题,但是又引入了另外一个问题:生成的小文件过多,尤其在每个文件的数据量不大而文件特别多的时候,大量的随机读会非常影响性能。Spark 0.8.1为了解决0.8中引入的问题,引入了FileConsolidation机制,在一定程度上解决了这个问题。由此可见,Hash Based Shuffle在Scalability方面的确有局限性。而Spark1.0中引入的Shuffle Pluggable Framework,为加入新的Shuffle机制和引入第三方的Shuffle机制奠定了基础。在Spark1.1的时候,引入了Sort Based Shuffle;并且在Spark1.2.0时,Sort Based Shuffle已经成为Shuffle的默认选项。但是,随着内存成本的不断下降和容量的不断上升,Spark Core会在未来重新将Shuffle的过程全部是in memory的吗?我认为这个不太可能也没太大必要,如果用户对于性能有比较苛刻的要求而Shuffle的过程的确是性能优化的重点,那么可以尝试以下实现方式:
1) Worker的节点采用固态硬盘
2) Woker的Shuffle结果保存到RAMDisk上
3) 根据自己的应用场景,实现自己的Shuffle机制
1) Worker的节点采用固态硬盘
2) Woker的Shuffle结果保存到RAMDisk上
3) 根据自己的应用场景,实现自己的Shuffle机制
相关文章推荐
- Spark技术内幕: 如何解决Shuffle Write一定要落盘的问题?
- 如何自行解决Oracle的技术问题?
- 一起谈.NET技术,如何解决分布式系统中的跨时区问题[原理篇]
- spark:学习过程中遇到的一些问题及解决方法(如何将本地文件发布到HDFS)--11
- 第91课:SparkStreaming基于Kafka Direct案例实战和内幕源码解密 java.lang.ClassNotFoundException 踩坑解决问题详细内幕版本
- 乱想乱写之如何解决技术问题 (转)
- 如何用Spark解决一些经典MapReduce问题
- ajax技术如何解决浏览器前进后退按键失效的问题
- Apache Spark技术实战之6 -- spark-submit常见问题及其解决
- 【心得】如何解决技术问题
- 第000讲-Spark内核解密:Spark到底解决了什么根本性的技术问题?
- [技术分享- ISA篇] 如何解决IE7/8客户端与ISA验证时弹框的问题
- Apache Spark技术实战之6 -- spark-submit常见问题及其解决
- 真正的创新必然是基于对市场的了解,对客户反馈的观察,开发出来的产品一定要适应市场,提出的模式一定要能解决现实的问题。而在这其中,技术只是一种实现手段。
- 一起谈.NET技术,如何解决分布式系统中的跨时区问题[实例篇]
- Hypervisor技术如何解决离线VDI问题
- 一起谈.NET技术,如何解决“呈现控件时出错”的问题
- Spark到底解决了什么根本性的技术问题?
- Apache Spark技术实战之6 -- spark-submit常见问题及其解决
- 没有技术大牛,如何解决问题