一、问题现象
1,同样一个执行语句在Spark-shell中就可以执行,但是在Spark-submit中执行时等待了很长时间但是Task一直没有执行
2,通过Spark-submit执行时可以获取HIVE中的数据库结构
3,通过查看driver的执行日志并没异常,并且没有提示错误
二、分析问题
1,首先我们需要查看web界面中Job模块查看执行过程,通过查看执行流程我们可以看到正在执行的job,并且执行到第0个task(Runing)
2,如果这时直接点击driver的stderr是查看所有的执行过程,并不能发现错误 需要取去executes中查看活跃的Tasks 也就需要点击Active中不为0的task的stderr中查看日志
3,通过日志 发现错误:ERROR netty.Inbox: Ignoring error java.io.EOFException at java.io.DataInputStream.readFully(DataInputStream.java:197) 该错误是通讯异常,但是问题应该是环境配置导致的,故先查看spark所导入的jar包
4,通过查看任务启动时加载的Jar包发现其中有的jar包版本和现有jar包版本不一致
三、解决方法
1,将Spark中配置文件指定的HDFS上Jars地址中的Jars去除掉,并重新上传正确的Jars文件
2,删除命令: sudo -u hive hadoop fs -rmr hdfs://centos1/spark/jars
3,上传命令: sudo -u hive hadoop fs -put /opt/spark/jars/* hdfs://centos1/spark/jars