为什么spark-sql比hive执行速度快,但数据量大时spark-sql稳定性差?

导言 

这个问题是早些年的提问,大概2021年,现在回头看仍有收获。

 Shuffle之累

彼时,Spark的shuffle模型确实存在因文件句柄数过多而引发的问题,但随着技术演进至Spark 2.x版本后,sort based Shuffle机制已大体解决了这一困扰,并且随后引入的ESS外部shuffle服务及远程shuffle架构更是对提升shuffle稳定性做出了显著贡献。

成也内存,败也?

关于与内存溢出(OOM)无关的观点,此看法值得进一步探讨。Spark所采用的依赖内存资源的DAG执行模型,在内部计算流程中往往难以精准预估各环节所需的内存规模。尽管有人声称仅用10GB内存就能处理高达1000GB的数据,这无疑得益于精细的编程技艺和参数调优,然而对于广大非专业使用者而言,他们可能并未充分掌握此类框架的操作技巧,因此Spark在面临复杂任务时易于出现崩溃的现象仍然较为普遍。

时代的局限

追溯至早期Hive基于MapReduce执行计算的时代,两者之间的重要差异恰好体现在内存使用理念上。鉴于MapReduce设计之初,内存资源极度珍贵,设计理念自然无法以内存为中心,转而频繁倚重磁盘读写操作。众所周知,磁盘往往就是性能的杀手,这也是数据库及SQL领域历经多年优化的核心目标——减少不必要的I/O操作。故而,当Hive借助MR进行计算时,由于MR频繁地与磁盘交互,其性能表现自然无法令人满意。

殊途同归

相比之下,Hive后来引入Tez引擎后,对内存的依赖度明显增强,随之而来的是内存异常以及系统稳定性的潜在挑战,这一点与Spark存在的稳定性问题颇为相似。Tez的主要使命在于优化Hadoop MapReduce模型,提供一个更灵活高效的大数据处理环境。然而,Tez在运行过程中对资源的需求相对更高,特别是内存方面。若YARN集群资源配置不足或不合理,如Container大小、内存限制设定不当,将可能导致任务因资源耗尽而失败,从而影响整个系统的稳定性。

权衡罢了

综上所述,无论是Spark还是Hive,在追求高性能与高稳定性之间的权衡取舍,正是大数据技术二十年发展历程的真实写照,犹如“鱼与熊掌不可兼得”的古老智慧,在当今时代背景下得到了生动体现。

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1024点线面

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值