hive中shuffle 与 spark shuffle 中的异同

由于目前的项目有强制的资源限制,hive任务不能满足要求,需要将hiveSQL 改成spark 的scala脚本运行,但是再过程中遇到了很多坑,这里记录一下可能涉及到的原理问题。

由于hive SQL 是使用SQL实现,再逻辑非常复杂的情况下,只能将任务分成多个阶段,同时尽量减少job数 来提高效率。在这种情况下,有可能出现复算以及计算无效数据的情况,需要衡量计算无效数据的效率以及避免计算而出现的额外job所花费的时间开销。

当数据量较大的时候(我的任务是千万亿级)的任务,我的建议还是尽量减少job数,开启mr任务的时间开销以及合并文件,统计等时间开销非常大。

由于是第一次接触spark 以及 scala,最开始使用Dataframe 将hiveSql直接照搬下来,但是发现以前可以跑通的sql 再spark下总是会出现 lost shuffle 0 等异常。查询之后发现是shuffle write 以及 shuffle read 数据量非常大。

之后根据业务逻辑使用java rdd 进行部分步骤的处理,尽量减少shuffle过程,情况有所好转,但是还是感觉spark非常的不稳定。由于分布式数据处理不可避免的会出现shuffle问题。因此对于hive的shuffle以及spark的shuffle,进行了简单的研究。

首先是Hive 的shuffle 过程

hive任务本质是将sql优化成map reduce 任务进行处理,因此shuffle过程就是mr任务的shuffle 过程,而shuffle的过程主要是将数据从 map task端拉往 reduce task 端。

  1. 在跨节点拉取数据时,尽量减少对带宽的不必要消耗,同时减少磁盘io对task执行的影响
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值