java.lang.ClassNotFoundException в программе Scala - PullRequest
0 голосов
/ 03 июля 2018

Я пытаюсь подключить hbase от spark, и я хочу запустить файл scala jar в spark-submit. Я не уверен, как писать классы в 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-файла и хочу выполнить этот jar-файл с помощью spark-submit. Ниже приведена команда spark-submit, которую я использовал для запуска jar

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)

Может кто-нибудь, как написать этот код выше с классом и объектом. ценим вашу помощь

1 Ответ

0 голосов
/ 03 июля 2018

Здесь может быть что-то не так, как вы упаковали свою банку.

Во-первых, 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 для полного примера проекта.

...