• Hive的JDBC访问引发的Maven依赖的实践


    invalid LOC header (bad signature)
      原来是因为依赖问题,直接依赖“hive-server”的见解依赖jetty-all有冲突;诡异的是在main方法中执行是OK的,但是放到web工程里面就有问题;推测原因是web工程的tomcat的jar包和hive-server的依赖包有冲突。
    解决流程:
      1. 因为新加入了两个依赖,hive-jdbc以及hadoop-common;分别注释,定位hive-jdbc有问题;
      2. 将hive-jdbc所有的依赖进行exclude(在eclispse中的pom编辑工具里面右键做即可);执行,OK;由此判断一定是hive-jdbc的依赖有问题;
      3. 然后来到pom的文本格式模式;逐个增量的去掉exclude项;直到发现有问题的项(可能不止一个),全部撸一边,哪些项就是需要排除就像退潮后的裸泳一样明显了;
      注意:采用eclipse的pom工具进行可视化exclude某个组件的时候,不是仅仅exclude某个依赖,而是所有的依赖都会被删掉,比如我把hive-server的org.log4j给exclude,那么所有的依赖该组件的依赖都会添加上exclude org.log4j,所以要小心执行这个动作;最好先提交再处理,有问题可以及时回滚。
      后来JSP编译也报错了;同样的原因,将hdfs-common里面的servlet-api进行排除即可。这是因为servlet-api已经由容器(tomcat,JBoss等)提供;所以不需要。如果添加上了,反而会在容器中运行的时候发生异常。所以需要进行排除。这个也是为什么MainTest里面运行没问题,但是放到了Web里面则有问题的原因。
      注意,我刚才犯了一个非常低级的错误,就是在排除的时候,直接添加<exclution>节点,但是其实是应该添加<exclusions><exclusion>...</exclusion></exclusions>。
    其实我只需要hadoop-common这个包,不需要其他依赖;于是(通过“*”来排除所有的依赖):

            <dependency>
                <groupId>org.apache.hadoop</groupId>
                <artifactId>hadoop-common</artifactId>
                <version>2.6.0</version>
                <exclusions>
                    <exclusion>
                        <groupId>*</groupId>
                        <artifactId>*</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>


      maven工程有一个地方不太好,每次改pom配置文件,工程重新加载,都会从新写org.eclipse.wst.common.component文件,结果导致配置的Deployment Assembly内容丢失。

  • 相关阅读:
    linux学习 建立静态库,动态库,写简单的makefile
    C++中顶层const和底层const
    BDB (Berkeley DB)数据库简单介绍(转载)
    Java中Map的使用
    Spring MVC 3 深入总结
    nvl,空时的推断和取值
    java堆栈 (转)
    mybatis--面向接口编程
    HDU 4888
    socket编程——一个简单的样例
  • 原文地址:https://www.cnblogs.com/xiashiwendao/p/8214932.html
Copyright © 2020-2023  润新知