代码之家  ›  专栏  ›  技术社区  ›  Omegaspard

使用saveToPhoenix方法在Hbase上加载/保存RDD时出现异常

  •  0
  • Omegaspard  · 技术社区  · 7 年前

    我想使用apache phoenix框架。

    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.phoenix.query.ConfigurationFactory$ConfigurationFactoryImpl$1.call(ConfigurationFactory.java:49) org.apache.phoenix.query.ConfigurationFactory$ConfigurationFactoryImpl$1.call(ConfigurationFactory.java:46) PhoenixContextExecutor.call(phoenixcontextExecuter.java:76) phoenix.util.phoenix ContextExecutor.callWithoutPropagation(phoenix contextExecuter.java:91) PhoenixDriver.initializeConnectionCache(PhoenixDriver.java:151) 在 凤凰城jdbc PhoenixDriver 在 架构(PhoenixRelation.scala:52) 在 org.apache.spark.sql.execution.datasources.LogicalRelation。(logicalrelations.scala:40) apache.spark.sql.SparkSession.baseRelationToDataFrame(sparksression.scala:389) 在 load(DataFrameReader.scala:146) 在 load(DataFrameReader.scala:125) 加载(SQLContext.scala:965) MainTest2$.delayedEndpoint$MainTest2$1(MainTest2.scala:9) MainTest2$delayedInit$body。应用(maintest1.scala:6)于 scala.Function0$class.apply$mcV$sp(Function0.scala:34)at 在scala.App$$anonfun$main$1。应用(App.scala:76)在 scala.App$$anonfun$main$1。应用(App.scala:76)于 scala.collection.generic.TraversableForwarder$class.foreach(TraversableForwarder.scala:35) 在scala.App$class.main(应用程序scala:76)处 原因:java.lang.ClassNotFoundException: org.apache.hadoop.hbase。HBA配置 findClass(URLClassLoader.java:381)位于 loadClass(ClassLoader.java:424)位于

    post .

    我能做些什么来克服这个问题?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Omegaspard    7 年前

    我找到了解决问题的办法。正如例外情况所示,我的编译器无法找到HBaseConfiguration类。HBaseConfiguration在org.apache.hadoop中使用。hbase库,因此需要编译。我注意到org.apache中没有HBaseConfiguration类。正如我所想的hadoop库。对于安装在PC机上的hbase 1.3.1版本,我设法在hbase\u HOME/lib文件夹中的hbase-common-1.3-1 jar中找到了这个类。

    然后我在我的构建中包含这个依赖项。SBT: