当前位置:   article > 正文

spark 集群启动出现 Unrecognized Hadoop major version number: 3.0.0-cdh6.3.2

unrecognized hadoop major version number: 3.0.0-cdh6.3.2

我是cdh集群,如果你不是cdh6.3以上,你可以走了

这是我的pom,我现在在本地往hive写数据,没问题,但是,如果打成jar包,放到服务器上,执行就有问题

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <properties>
  7. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  8. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  9. <maven.compiler.source>1.8</maven.compiler.source>
  10. <maven.compiler.target>1.8</maven.compiler.target>
  11. <scala.version>2.11.12</scala.version>
  12. <spark.version>2.4.0</spark.version>
  13. <java.version>1.8</java.version>
  14. </properties>
  15. <groupId>org.example</groupId>
  16. <artifactId>DataPrepare</artifactId>
  17. <version>1.0-SNAPSHOT</version>
  18. <dependencies>
  19. <!--scala-->
  20. <dependency>
  21. <groupId>org.scala-lang</groupId>
  22. <artifactId>scala-library</artifactId>
  23. <version>${scala.version}</version>
  24. </dependency>
  25. <dependency>
  26. <groupId>org.apache.spark</groupId>
  27. <artifactId>spark-core_2.11</artifactId>
  28. <version>${spark.version}</version>
  29. </dependency>
  30. <dependency>
  31. <groupId>org.apache.spark</groupId>
  32. <artifactId>spark-hive_2.11</artifactId>
  33. <version>${spark.version}</version>
  34. </dependency>
  35. <dependency>
  36. <groupId>org.apache.spark</groupId>
  37. <artifactId>spark-sql_2.11</artifactId>
  38. <version>${spark.version}</version>
  39. </dependency>
  40. </dependencies>
  41. <build>
  42. <finalName>WordCount</finalName>
  43. <plugins>
  44. <plugin>
  45. <groupId>net.alchim31.maven</groupId>
  46. <artifactId>scala-maven-plugin</artifactId>
  47. <version>3.2.2</version>
  48. <executions>
  49. <execution>
  50. <goals>
  51. <goal>compile</goal>
  52. <goal>testCompile</goal>
  53. </goals>
  54. </execution>
  55. </executions>
  56. </plugin>
  57. <plugin>
  58. <groupId>org.apache.maven.plugins</groupId>
  59. <artifactId>maven-assembly-plugin</artifactId>
  60. <version>3.0.0</version>
  61. <configuration>
  62. <archive>
  63. <manifest>
  64. <mainClass>WordCount</mainClass>
  65. </manifest>
  66. </archive>
  67. <descriptorRefs>
  68. <descriptorRef>jar-with-dependencies</descriptorRef>
  69. </descriptorRefs>
  70. </configuration>
  71. <executions>
  72. <execution>
  73. <id>make-assembly</id>
  74. <phase>package</phase>
  75. <goals>
  76. <goal>single</goal>
  77. </goals>
  78. </execution>
  79. </executions>
  80. </plugin>
  81. </plugins>
  82. </build>
  83. </project>

 

后来了解到,只有在用代码集成hive-jdbc,spark-core,spark-sql,spark-hive等依赖的时候,就会报出这么一个问题。

spark-hive.jar包和spark2.4有冲突,这个是一个社区问题,不是你的问题。

本地,idea运行时,需要有这个spark-hive,但是你上传到集群交给,yarn去执行每台机器的spark就必须把他注释掉

解决方案:丢到集群的时候,注释掉,在进行打包

  1. <!--<dependency>-->
  2. <!--<groupId>org.apache.spark</groupId>-->
  3. <!--<artifactId>spark-hive_2.11</artifactId>-->
  4. <!--<version>${spark.version}</version>-->
  5. <!--</dependency>

成功

 

参考:

这篇文章非常清楚,从原理上说明了这个问题

Spark运行CDH6.3.2碰到的由于hive驱动引起的问题解决方法

原文:

一、概述

  spark使用hive中有比较多的坑,尤其是版本问题引起的jar包冲突,比较好的方式是使用与CDH匹配的hive和hadoop版本,这样可以减少很多的jar冲突问题,但是在IDEA调试过程中还是难免会碰到jar包冲突问题。

二、CDH6.3.2中碰到问题解决方法

1、java.lang.NoSuchFieldError: HIVE_STATS_JDBC_TIMEOUT

  这个问题,基本发生在远程启动spark客户端,并且访问spark集群,然后再连接hive造成的。因为,无论升级到spark的什么版本,用hive的什么版本,在集群环境下直接启动spark-sql或者spark-shell访问hive都不会发生这个问题。只有在用代码集成hive-jdbc,spark-core,spark-sql,spark-hive等依赖的时候,就会报出这么一个问题。

导致这个问题的原因如下:用代码启动spark,并且连接spark standalone 或者yarn模式spark-client方式的时候,本地机器会成为driver,diver负责向hive通信。代码在通信的过程中,需要依赖hive相关的jar包。在连接hive之前,spark会进行一下连接相关参数的检查,检查的参数来自于hive的jar包,其中就有这么一个:HIVE_STATS_JDBC_TIMEOUT。然而,spark集群下面依赖的hive的jar包还是1.2.1版本的,所以集群模式连接hive没有问题。然后hive升级到了2之后的版本,hive去掉了这个参数(大家可以现在去spark的github上面看看最新的代码,里面已经做了相关修改,但是命名还是:hardcode。),然后spark-sql里面的代码依然是要调用hive的这个参数的,然后就报错了。

这个问题在jira上说加上 spark.sql.hive.metastore.jars  spark.sql.hive.metastore.version这两个参数(当然这两个参数还是要加的),然后这两个参数并不能解决这个问题,因为在用到这两个jar包之前,spark就已经对连接hive参数进行了检测。

所以最终解决办法是:在spark 2.4.4的代码中,删除掉HIVE_STATS_JDBC_TIMEOUT以及另外一个参数,然后重新编译spark-hive的jar包。再 将此jar包替换现有的spark-hive的jar包。

  如果你不想重新编译spark源码包,可以现在本地使用较低版本的hive和hadoop驱动包,调试成功后将spark-hive_2.11的pom中依赖删除,直接使用集群中的jars中的包即可。

2、Unrecognized Hadoop major version number: 3.0.0

  这是因为CDH6.3.2版本与你pom中设置hadoop版本不一致,换成3.0.0-cdh6.3.2版本就可以了。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/360366
推荐阅读
相关标签
  

闽ICP备14008679号