zoukankan      html  css  js  c++  java
  • 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)!
  • 相关阅读:
    数据结构(四十七)归并排序(O(nlogn))
    数据结构(四十六)插入排序(1.直接插入排序(O(n²)) 2.希尔排序(O(n3/2)))
    数据结构(四十五)选择排序(1.直接选择排序(O(n²))2.堆排序(O(nlogn)))
    数据结构(四十四)交换排序(1.冒泡排序(O(n²))2.快速排序(O(nlogn))))
    数据结构(四十三)排序的基本概念与分类
    策略模式(strategy pattern)
    多线程同步之读者写者问题
    多线程同步之信号量
    多线程同步之条件变量
    多线程同步之互斥量
  • 原文地址:https://www.cnblogs.com/xiashiwendao/p/7617721.html
Copyright © 2011-2022 走看看