Hivesql执行失败,Call From namenode2 to namenode2:10020 failed on connection排查与解决

该错误发生在一次hiveSQL的任务执行过程中,报错namenode拒绝连接,而且这个SQL严格意思上来说并不能说失败了,因为它的一个stage阶段是完成的。

在这里插入图片描述
其实这种错误以前也时不时发生,但是正如报错所描述,我一直以为只是单纯的在任务执行中,资源吃紧造成卡顿而导致的,并且重新跑一次就好了,所以一直没当回事。

在这里插入图片描述
然而随着发生的次数增多,不能再继续无视下去了,并且直觉告诉我很有可能并不是预想的那么回事,所以深入研究下到底怎么回事。首先进入hive的日志看看能不能有什么线索。
在这里插入图片描述
很显然,什么都没有。以前都是止步于这里,但是这次要好好的深入一下。直接先进入hadoop的namenode日志看看。

在这里插入图片描述
果然找到了真正原因,这个错误发生是因为datanode不可用。造成数据节点不可用的原因是非常多的,例如

1.重复格式化Namenode
2.Datanode节点磁盘资源满了又或者这个节点因为各种原因too busy
3.在执行hivesql的机器上没有做域名映射,因为namenode和datanode是用局域网通信的

所以还是要去相应的datanode节点看看到底是怎么一回事,进入三台datanode节点的日志一看,全都报同一个错

在这里插入图片描述
这个错误的原因同样有很多种,一般是文件操作超租期,实际上就是data在stream操作过程中文件被删除了,通常是因为Mapred多个task操作同一个文件,一个task完成后删掉文件导致。还有可能是因为lzo文件为0导致的。在这里我的判断是第一种。

因为我执行的SQL是解析json数据然后导入到表中,文件格式为lzo,51个文件总计大小3.8G,转成txt大概有15个G左右,而当时的stage-1阶段是4个map,1个reduce,所以导致这个问题。

最后,解决方案如下:

1.修改每个datanode节点的配置文件hdfs-site.xml:增加dfs.datanode.max.transfer.threads属性的设置,设置为8192
2.在执行sql的时候,增加reduce数量
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值