【问题标题】:java.lang.ClassNotFoundException in scala programscala程序中的java.lang.ClassNotFoundException
【发布时间】:2018-07-03 18:36:06
【问题描述】:

我正在尝试从 spark 连接 hbase,并且我想在 spark-submit 中运行 scala jar 文件。我不确定如何在 scala 中编写类,任何人都可以帮忙

package com.jeevan.sparkhbase

import org.apache.spark._
import org.apache.spark.rdd.NewHadoopRDD
import org.apache.hadoop.hbase.{HBaseConfiguration, HTableDescriptor}
import org.apache.hadoop.hbase.client.HBaseAdmin
import org.apache.hadoop.hbase.mapreduce.TableInputFormat
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hbase.HColumnDescriptor
import org.apache.hadoop.hbase.util.Bytes
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.HTable;



class InsertData {
  def main(arg: Array[String]) {
    val conf = HBaseConfiguration.create()
    val tableName = "emp"
    conf.set(TableInputFormat.INPUT_TABLE, tableName)

    val myTable = new HTable(conf, tableName);
    var p = new Put(new String("row999").getBytes());
    p.add("cf".getBytes(), "column_name".getBytes(), new String("value999").getBytes());
    myTable.put(p);
    myTable.flushCommits();
  }
}

我使用 maven 构建 jar 并希望使用 spark-submit 执行这个 jar 文件。以下是我用来运行 jar 的 spark-submit 命令

spark-submit --class com.jeevan.sparkhbase.InsertData --master local[*] SHIntegration-0.0.1-SNAPSHOT-jar-with-dependencies.jar

我收到这个错误

java.lang.ClassNotFoundException: com.jeevan.sparkhbase.InsertData
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:348)
        at org.apache.spark.util.Utils$.classForName(Utils.scala:230)
        at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:732)
        at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:180)
        at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:205)

谁能用类和对象编写上面的代码。感谢您的帮助

【问题讨论】:

    标签: scala apache-spark hbase


    【解决方案1】:

    这里有几件事可能是错误的,包括你如何打包你的 jar。

    首先,InsertData 应该是 object 而不是 class

    object InsertData {
      def main(arg: Array[String]) {
          // stuff
      }
    }
    

    其次,您实际上并没有在任何地方连接到 Spark。您需要在您的应用中添加类似这样的内容:

    val spark = SparkSession.builder().appName(jobName).master("local[1]").getOrCreate()
    

    查看我的spark-hello-world 以获取完整的示例项目。

    【讨论】:

    • 除了上面提到的答案之外,请检查您的 spark 和 Scala 版本兼容性
    猜你喜欢
    • 1970-01-01
    • 2020-05-07
    • 2019-03-04
    • 1970-01-01
    • 1970-01-01
    • 2012-03-30
    • 1970-01-01
    • 2018-10-06
    • 1970-01-01
    相关资源
    最近更新 更多