当前位置 博文首页 > qq262593421的博客:spark向hbase写入数据报错:tried to access

    qq262593421的博客:spark向hbase写入数据报错:tried to access

    作者:[db:作者] 时间:2021-08-30 10:28

    问题描述

    spark向hbase写入数据时抛出的报错,实现代码转:https://blog.csdn.net/qq262593421/article/details/105969665

    "C:\Program Files\Java\jdk1.8.0_111\bin\java.exe" "-javaagent:D:\JetBrains\IntelliJ IDEA 2019.2.3\lib\idea_rt.jar=50701:D:\JetBrains\IntelliJ IDEA 2019.2.3\bin" -Dfile.encoding=UTF-8 -classpath C:\Users\com\AppData\Local\Temp\classpath2035139547.jar com.xtd.hbase.SparkHBase
    SLF4J: Class path contains multiple SLF4J bindings.
    SLF4J: Found binding in [jar:file:/F:/Maven/repository/org/slf4j/slf4j-log4j12/1.6.1/slf4j-log4j12-1.6.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
    SLF4J: Found binding in [jar:file:/F:/Maven/repository/org/apache/logging/log4j/log4j-slf4j-impl/2.4.1/log4j-slf4j-impl-2.4.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
    SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
    Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
    Exception in thread "main" org.apache.hadoop.hbase.DoNotRetryIOException: java.lang.IllegalAccessError: tried to access method com.google.common.base.Stopwatch.<init>()V from class org.apache.hadoop.hbase.zookeeper.MetaTableLocator
    	at org.apache.hadoop.hbase.client.RpcRetryingCaller.translateException(RpcRetryingCaller.java:229)
    	at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithoutRetries(RpcRetryingCaller.java:202)
    	at org.apache.hadoop.hbase.client.ClientScanner.call(ClientScanner.java:320)
    	at org.apache.hadoop.hbase.client.ClientScanner.nextScanner(ClientScanner.java:295)
    	at org.apache.hadoop.hbase.client.ClientScanner.initializeScannerInConstruction(ClientScanner.java:160)
    	at org.apache.hadoop.hbase.client.ClientScanner.<init>(ClientScanner.java:155)
    	at org.apache.hadoop.hbase.client.HTable.getScanner(HTable.java:811)
    	at org.apache.hadoop.hbase.client.MetaScanner.metaScan(MetaScanner.java:193)
    	at org.apache.hadoop.hbase.client.MetaScanner.metaScan(MetaScanner.java:89)
    	at org.apache.hadoop.hbase.client.MetaScanner.allTableRegions(MetaScanner.java:324)
    	at org.apache.hadoop.hbase.client.HRegionLocator.getAllRegionLocations(HRegionLocator.java:88)
    	at org.apache.hadoop.hbase.util.RegionSizeCalculator.init(RegionSizeCalculator.java:94)
    	at org.apache.hadoop.hbase.util.RegionSizeCalculator.<init>(RegionSizeCalculator.java:81)
    	at org.apache.hadoop.hbase.mapreduce.TableInputFormatBase.getSplits(TableInputFormatBase.java:256)
    	at org.apache.hadoop.hbase.mapreduce.TableInputFormat.getSplits(TableInputFormat.java:237)
    	at org.apache.spark.rdd.NewHadoopRDD.getPartitions(NewHadoopRDD.scala:130)
    	at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:253)
    	at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:251)
    	at scala.Option.getOrElse(Option.scala:121)
    	at org.apache.spark.rdd.RDD.partitions(RDD.scala:251)
    	at org.apache.spark.SparkContext.runJob(SparkContext.scala:2126)
    	at org.apache.spark.rdd.RDD.count(RDD.scala:1168)
    	at com.xtd.hbase.SparkHBase$.main(SparkHBase.scala:34)
    	at com.xtd.hbase.SparkHBase.main(SparkHBase.scala)
    Caused by: java.lang.IllegalAccessError: tried to access method com.google.common.base.Stopwatch.<init>()V from class org.apache.hadoop.hbase.zookeeper.MetaTableLocator
    	at org.apache.hadoop.hbase.zookeeper.MetaTableLocator.blockUntilAvailable(MetaTableLocator.java:596)
    	at org.apache.hadoop.hbase.zookeeper.MetaTableLocator.blockUntilAvailable(MetaTableLocator.java:580)
    	at org.apache.hadoop.hbase.zookeeper.MetaTableLocator.blockUntilAvailable(MetaTableLocator.java:559)
    	at org.apache.hadoop.hbase.client.ZooKeeperRegistry.getMetaRegionLocation(ZooKeeperRegistry.java:61)
    	at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.locateMeta(ConnectionManager.java:1185)
    	at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.locateRegion(ConnectionManager.java:1152)
    	at org.apache.hadoop.hbase.client.RpcRetryingCallerWithReadReplicas.getRegionLocations(RpcRetryingCallerWithReadReplicas.java:300)
    	at org.apache.hadoop.hbase.client.ScannerCallableWithReplicas.call(ScannerCallableWithReplicas.java:153)
    	at org.apache.hadoop.hbase.client.ScannerCallableWithReplicas.call(ScannerCallableWithReplicas.java:61)
    	at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithoutRetries(RpcRetryingCaller.java:200)
    	... 22 more
    
    Process finished with exit code 1
    

    问题解决

    spark依赖包依赖中排除 com.google.guava jar包,然后手动引入一个低版本的 com.google.guava jar包

        <!-- https://mvnrepository.com/artifact/org.apache.spark/spark-sql -->
        <dependency>
          <groupId>org.apache.spark</groupId>
          <artifactId>spark-sql_2.11</artifactId>
          <version>${spark.version}</version>
          <exclusions>
            <exclusion>
              <groupId>com.google.guava</groupId>
              <artifactId>guava</artifactId>
            </exclusion>
          </exclusions>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
        <dependency>
          <groupId>com.google.guava</groupId>
          <artifactId>guava</artifactId>
          <version>15.0</version>
        </dependency>

    Maven全部配置:https://blog.csdn.net/qq262593421/article/details/105769886

    cs