spark提交异常日志分析

java.lang.NoSuchMethodError: org.apache.spark.sql.SQLContext.sql(Ljava/lang/String;)Lorg/apache/spark/sql/Dataset;
这是因为代码中调用的是spark2.0的接口,但是提交任务采用的是spark-submit(spark1的提交指令,spark2的提交指令是spark2-submit)方式导致;
再后来通过spark2-submit进行提交,但是发现爆了一个ClassNotFound(Config)的异常,根据堆栈找地方,发现是一个Configure类的初始化,和开发人员以沟通,原来是提交包的时候没有全量提交;Config是在config-1.2.1.jar中,所以运行环境没有该jar包导致。
spark运行日志其实是在yarn的日志中,在cloudera中选择YARN->菜单中选择Web UI->ResourceManager Web UI->点击ID列,进入到详情页面,在最下面点击logs链接即可看到日志。
但是注意:
dataframe.rdd.map(r => XXX)
在scala中map引用函数里面打日志,但是始终都没有打出来,但是map前面的日志却可以在控制台通过println打印出来。
我一直觉得很奇怪。后来才知道这是因为map执行是在各个节点中进行,并没有在提交代码的进程中;所以你在当前线程下看不到日志;
后来我又到YARN下面查看日志也没有看到println出来的日志,这是怎么回事?因为输入到日志文件的都是log4j类输出到配置文件配置的日志文件中;println是输出到控制台,我们知道tail方式看日志是无法看到println打出的日志的。
java.io.IOException: Cannot run program "/etc/hadoop/conf.cloudera.yarn/topology.py" (in directory "
首先确认你本地是否有这个文件;
然后,spark2-submit的时候,添加--master yarn(spark2是yarn,网上讲是yarn-cluster,难道是spark1吗),说明此次任务提交是给YARN(相对应的是提交给spark自己,这是spark alone模式);
  第三种情况,添加完后该异常仍然出现,后来看到另外一种情况是文件没有权限,后来topology文件添加了cloudera-scm权限后搞定(我的情况是文件root权限)。其实对于已经存在文件报一些异常比如无法读取,不存在,很可能就是因为权限问题。org.apache.spark.sql.AnalysisException: Call From s1/192.168.156.105 to s1:8020 failed on connection exception: java.net.ConnectException: 拒绝连接; For more details see:  http://wiki.apache.org/hadoop/ConnectionRefused
但凡是出现此类异常就说明了你所请求的服务ip端口不存在或者错误;我碰到的问题就是hdfs的metastore服务部署在A机器,但是代码中hdfs://B机器ip:8020,导致了此异常;登录A机器lsof -i:8020可以看到hdfs用户进行;但是登录B机器却无法发现hdfs用户进程内容。
数据不对
对于Not In的处理,切记:转化为join的形式为Left Join(left_outer)!

posted on 2017-10-01 20:14  张叫兽的技术研究院  阅读(920)  评论(0编辑  收藏  举报

导航