• 从Spark1.6到Spark2.1,Logging该何去何从


    大家都知道spark 1.6.0版本比较稳定,也比较流行。

    我们项目组也是,最初用的就是这个版本。

    这段时间,项目组引入spark 2.1.0版本,我想尝尝鲜。

    Pom中刚刚换了dependency马上编译失败了。

    首先是在1.6中用的最多的trait之一org.apache.spark.Logging 在2.1中变成了org.apache.spark.internal.Logging

    看着internal就觉得不对劲,细看定义果然:

    private[spark] trait Logging {…}

    而1.6中的定义是这样儿的

    @DeveloperApi

    trait Logging {…}

    看不懂二者的区别没关系,因为当你把

    import org.apache.spark.Logging

    改成

    import org.apache.spark.internal.Logging

    IDEA会提醒你“Symbol Logging is inaccessible from this place”

    简单说你不能用。

    还是得回去理解源码啊。

    1.6中的注解 @DeveloperApi就不用解释什么了,开发者API

    2.1中的private[spark]是啥意思呢?

    private[SomePackage] means, it is visible inside the package only (no modifier in Java)

    protected[SomePackage] means, it can be seen in sub-classes but only if they are inside SomePackage

    好吧,只能在package中用…

    我不死心,又去官方API 看了下,赫然写着:

    “NOTE: DO NOT USE this class outside of Spark. It is intended as an internal utility. This will likely be changed or removed in future releases.”

    人家早就打算只是内部使用了。。。

    那就没有替代方案了吗。。。

    目前看来只能老老实实地像下面这样使用了:

    protected final val logger : Logger= LoggerFactory.getLogger(this.getClass())

    logger.info("handline file:{}",f.getPath)

    另外,版本升级是一个渐进的过程,pom.xml中可能既存在1.6的包又存在2.1的包,以下这个异常可能会让人迷惑:

    java.lang.NoClassDefFoundError: org/codehaus/commons/compiler/UncheckedCompileException java.lang.ClassNotFoundException: org.codehaus.commons.compiler.UncheckedCompileException

    罪魁祸首是库共享编译器。

    把以下dependency添加到pom.xml中就OK了:

     <dependency>

                <groupId>org.codehaus.janino</groupId>

                <artifactId>commons-compiler</artifactId>

                <version>2.7.8</version>

            </dependency>

    等有其他的东西,再补充。

    参考:

    http://spark.apache.org/docs/1.6.0/api/scala/index.html#org.apache.spark.Logging

    https://stackoverflow.com/questions/42352091/spark-sql-fails-with-java-lang-noclassdeffounderror-org-codehaus-commons-compil?s=1|20.5422

  • 相关阅读:
    【嵌入式】arm-linux-gcc/ld/objcopy/objdump参数概述
    【Java】Java复习笔记-第四部分
    【C/C++】C语言复习笔记-17种小算法-解决实际问题
    【Java】Java复习笔记-三大排序算法,堆栈队列,生成无重复的随机数列
    【Java】Java复习笔记-第三部分
    【教程】ubuntu下安装NFS服务器
    【Java】Java复习笔记-第二部分
    【Java】Java复习笔记-第一部分
    【教程】ubuntu下安装samba服务器
    【C/C++】一道试题,深入理解数组和指针
  • 原文地址:https://www.cnblogs.com/envoy/p/8472528.html
Copyright © 2020-2023  润新知