Spark on yarn报关于netty getchannel()Lio.netty....等的错

文章假设读者都已经完全部署好了Yarn与Spark,并且了解大数据集群间的基本关系。

这个问题我调试了好几,然后在网上查找相关文章才得以解决。最后还是得感谢一位韩国朋友的博客。(在此,我还真得再说一点,百度搜索感觉是越来越不行了,搜啥啥不行。最后我还是用的bing搜索到的。)

言归正传,其实这个具体报的什么错我没有记录下来,因为是在工作环境,文章是下班在家写的。总之大体意思就是在Spark任务在Yarn上执行,当任务之间有跨节点通信的时候任务就会卡在那里。追踪到Yarn log里看到的错误就是关于java.NoSuchMethodException:...........netty getChannel()Lio.netty......异常。其实这是大数据架构底层Netty通信,有某个类或者方法找不到引起的错误。

问题引起的原因其实是因为Spark用的netty包与Hadoop用的Netty包有冲突导致的,而为什么会有这个冲突呢,那是因为我把Spark目录下的yarn目录里的spark-2.1.0-yarn-shuffle.jar包一齐上传到了HDFS里Spark的依赖包目录里了(为了避免Spark在提交yarn任务的时候再将Spark的jars依赖包打包上传,我们一般会在HDFS下建立一个目录,事先上传依赖包,然后在Spark-default.conf文件里指定目录),其实我们只需要将spark安装目录下的jars下的所有包上传即可。

在此,其实网上有很多老铁说把那个找不到的Netty类或者方法重新再集成到任务里,一起提交到yarn集群。其实根本没这个必要,我也没有试过(因为复杂度有点高)。我们只需要将多上传的spark-2.1.0-yarn-shuffle.jar包从HDFS里删除掉就完全可以了,其它的什么也不必做,一切就这么顺利。

本人使用的Spark是2.1.0;Hadoop版本是2.4.1.

你可能感兴趣的:(大数据,Spark,on,yarn,Spark,on,yarn,运行PI报错)