我想使用apache-phoenix框架。 问题是我一直有异常告诉我无法找到类HBaseConfiguration。 这是我想要使用的代码:
import org.apache.spark.SparkContext
import org.apache.spark.sql._
import org.apache.phoenix.spark._
// Load INPUT_TABLE
object MainTest2 extends App {
val sc = new SparkContext("local", "phoenix-test")
val sqlContext = new SQLContext(sc)
val df = sqlContext.load("org.apache.phoenix.spark", Map("table" -> "INPUT_TABLE",
"zkUrl" -> "localhost:3888"))
}
以下是我正在使用的SBT:
name := "spark-to-hbase"
version := "1.0"
scalaVersion := "2.11.8"
libraryDependencies ++= Seq(
"org.apache.hadoop" % "hadoop-mapreduce-client-core" % "2.3.0",
"org.apache.phoenix" % "phoenix-core" % "4.11.0-HBase-1.3",
"org.apache.spark" % "spark-core_2.11" % "2.1.1",
"org.apache.spark" % "spark-sql_2.11" % "2.1.1",
"org.apache.phoenix" % "phoenix-spark" % "4.11.0-HBase-1.3"
)
以下是例外:
线程中的异常" main" java.lang.NoClassDefFoundError: org / apache / hadoop / hbase / HBaseConfiguration at org.apache.phoenix.query.ConfigurationFactory $ ConfigurationFactoryImpl $ 1.call(ConfigurationFactory.java:49) 在 org.apache.phoenix.query.ConfigurationFactory $ ConfigurationFactoryImpl $ 1.call(ConfigurationFactory.java:46) 在 org.apache.phoenix.util.PhoenixContextExecutor.call(PhoenixContextExecutor.java:76) 在 org.apache.phoenix.util.PhoenixContextExecutor.callWithoutPropagation(PhoenixContextExecutor.java:91) 在 org.apache.phoenix.query.ConfigurationFactory $ ConfigurationFactoryImpl.getConfiguration(ConfigurationFactory.java:46) 在 org.apache.phoenix.jdbc.PhoenixDriver.initializeConnectionCache(PhoenixDriver.java:151) 在 org.apache.phoenix.jdbc.PhoenixDriver。(PhoenixDriver.java:142) 在 org.apache.phoenix.jdbc.PhoenixDriver。(PhoenixDriver.java:69) 在org.apache.phoenix.spark.PhoenixRDD。(PhoenixRDD.scala:43) 在 org.apache.phoenix.spark.PhoenixRelation.schema(PhoenixRelation.scala:52) 在 。org.apache.spark.sql.execution.datasources.LogicalRelation(LogicalRelation.scala:40) 在 org.apache.spark.sql.SparkSession.baseRelationToDataFrame(SparkSession.scala:389) 在 org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:146) 在 org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:125) 在org.apache.spark.sql.SQLContext.load(SQLContext.scala:965)at MainTest2 $ .delayedEndpoint $ MainTest2 $ 1(MainTest2.scala:9)at at MainTest2 $ delayedInit $ body.apply(MainTest2.scala:6)at scala.Function0 $ class.apply $ mcV $ sp(Function0.scala:34)at scala.runtime.AbstractFunction0.apply $ MCV $ SP(AbstractFunction0.scala:12) 在scala.App $$ anonfun $ main $ 1.apply(App.scala:76)at scala.App $$ anonfun $ main $ 1.apply(App.scala:76)at scala.collection.immutable.List.foreach(List.scala:381)at scala.collection.generic.TraversableForwarder $ class.foreach(TraversableForwarder.scala:35) 在scala.App $ class.main(App.scala:76)at MainTest2的MainTest2 $ .main(MainTest2.scala:6)(MainTest2.scala) 引起:java.lang.ClassNotFoundException: org.apache.hadoop.hbase.HBaseConfiguration at java.net.URLClassLoader.findClass(URLClassLoader.java:381)at java.lang.ClassLoader.loadClass(ClassLoader.java:424)at sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:331)at at java.lang.ClassLoader.loadClass(ClassLoader.java:357)... 26更多
我已经尝试更改hadoop-env.sh中的HADOOP_CLASSPATH,就像之前的post中所述。
我该怎么做才能解决这个问题?
答案 0 :(得分:0)
我找到了解决问题的方法。正如例外所述,我的编译器无法找到类HBaseConfiguration。 HBaseConfiguration在org.apache.hadoop.hbase库中使用,因此需要编译。我注意到HBgConfiguration类并没有像我想象的那样存在于org.apache.hadoop库中。对于我的PC计算机上安装的hbase 1.3.1版本,我设法在位于HBASE_HOME / lib文件夹中的hbase-common-1.3.1 jar中找到该类。
然后我将此依赖项包含在我的built.SBT中:
" org.apache.hbase" %" hbase-common" %" 1.3.1"
异常消失了。