• 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)!
  • 相关阅读:
    调度器2—cat /proc/<pid>/sched内容分析
    调度器1—相关接口和命令行工具
    Java中的String类
    Java中的数组
    代码访问使用Let's Encrypt证书的网站提示certificate has expired的解决方法
    Linux环境Clion使用Protobuf
    PyTorch Dataloader读取时如何在进程之间传输数据
    6 安装Grafana 展示promethues数据
    5 Prometheus relabel配置
    4 PromQL
  • 原文地址:https://www.cnblogs.com/xiashiwendao/p/7617721.html
Copyright © 2020-2023  润新知