【问题标题】:NoSuchMethodError exception when connecting to HBase连接 HBase 时出现 NoSuchMethodError 异常
【发布时间】:2017-06-12 12:04:05
【问题描述】:

尝试从 Scala 代码访问 HBase 时遇到一个特殊异常。

这是那个故事的长篇:

我在我的机器(Ubuntu 16.04)上以独立模式安装了 HBase 1.2.6。 接下来我尝试执行以下代码:

import org.apache.hadoop.conf.Configuration
import org.apache.hadoop.hbase.client.ConnectionFactory
import org.apache.hadoop.hbase.io.compress.Compression.Algorithm
import org.apache.hadoop.hbase.{HBaseConfiguration, HColumnDescriptor, HTableDescriptor, TableName}

object HelloWorld {
    private val TABLE_NAME = "MY_TABLE_NAME_TOO"
    private val CF_DEFAULT = "DEFAULT_COLUMN_FAMILY"

    def main(args: Array[String]): Unit = {
        val config: Configuration = HBaseConfiguration.create()

        val connection = ConnectionFactory.createConnection(config)
        val admin = connection.getAdmin

        val table = new HTableDescriptor(TableName.valueOf(TABLE_NAME))
        table.addFamily(new HColumnDescriptor(CF_DEFAULT).setCompressionType(Algorithm.NONE))

        System.out.print("Creating table. ")
        admin.createTable(table)
        System.out.println(" Done.")
    }
}

build.sbt 文件:

name := "myapp"

version := "1.0"

scalaVersion := "2.12.1"

libraryDependencies += "org.apache.storm" % "storm-core" % "1.0.3"

libraryDependencies += "org.apache.hbase" % "hbase-client" % "1.2.6" exclude("org.slf4j","slf4j-log4j12")

libraryDependencies += "org.apache.hbase" % "hbase-common" % "1.2.6" exclude("org.slf4j","slf4j-log4j12")

libraryDependencies += "org.apache.hadoop" % "hadoop-common" % "2.8.0" exclude("org.slf4j","slf4j-log4j12")

libraryDependencies += "org.apache.hbase" % "hbase-protocol" % "1.2.6" exclude("org.slf4j","slf4j-log4j12")  

我使用这些命令从 sbt 执行代码:

$ sbt
> compile
> run

我收到以下错误:

[info] Running hbase.HelloWorld
[info] 566  [main] WARN  o.a.h.u.NativeCodeLoader - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
[error] Exception in thread "main" java.lang.NoSuchMethodError: org.apache.hadoop.security.authentication.util.KerberosUtil.hasKerberosTicket(Ljavax/security/auth/Subject;)Z
[error]         at org.apache.hadoop.security.UserGroupInformation.<init>(UserGroupInformation.java:652)
[error]         at org.apache.hadoop.security.UserGroupInformation.loginUserFromSubject(UserGroupInformation.java:843)
[error]         at org.apache.hadoop.security.UserGroupInformation.getLoginUser(UserGroupInformation.java:802)
[error]         at org.apache.hadoop.security.UserGroupInformation.getCurrentUser(UserGroupInformation.java:675)
[error]         at org.apache.hadoop.hbase.security.User$SecureHadoopUser.<init>(User.java:293)
[error]         at org.apache.hadoop.hbase.security.User.getCurrent(User.java:191)
[error]         at org.apache.hadoop.hbase.security.UserProvider.getCurrent(UserProvider.java:167)
[error]         at org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:215)
[error]         at org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:119)
[error]         at hbase.HelloWorld$.main(HelloWorld.scala:48)
[error]         at hbase.HelloWorld.main(HelloWorld.scala)
java.lang.RuntimeException: Nonzero exit code returned from runner: 1
    at scala.sys.package$.error(package.scala:27)
[trace] Stack trace suppressed: run last compile:run for the full output.
[error] (compile:run) Nonzero exit code returned from runner: 1
[error] Total time: 1 s, completed Jun 12, 2017 2:56:48 PM

当行时发生异常

val connection = ConnectionFactory.createConnection(config)

到达。

这对我来说毫无意义。我希望有人能对此有所了解。

【问题讨论】:

    标签: scala sbt hbase apache-storm


    【解决方案1】:

    删除此依赖后一切正常:

    libraryDependencies += "org.apache.storm" % "storm-core" % "1.0.3"
    

    显然同时使用 Storm 和 HBase 可能会出现问题。 (我不知道如何解决这个问题。)

    【讨论】:

      猜你喜欢
      • 2019-02-21
      • 2019-09-30
      • 1970-01-01
      • 1970-01-01
      • 2012-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-20
      相关资源
      最近更新 更多