当前位置: 首页 > 知识库问答 >
问题:

任务在Spark中失败,ClassNotFoundException

鲁辉
2023-03-14

我正试图编写一个简单的java程序,通过Spark从Cassandra读取数据。我是在POC级别做这件事的。我的代码是这样的

String keyspace = "newkspace1";
String tablename = "newtable5";
public static void main(String[] args) 
    {
        SparkConf conf = new SparkConf();
        conf.setAppName("Cassandra Demo");
        conf.setMaster("spark://ct-0094:7077");
        conf.set("spark.cassandra.connection.host", "192.168.50.124");
        conf.set("spark.cassandra.connection.native.port", "9041");
        conf.set("spark.cassandra.connection.rpc.port", "9160");
        PerformerClass app = new PerformerClass(conf);
        app.run();
    } 
private void run() 
    {
        JavaSparkContext sc = new JavaSparkContext(conf);
        showResults(sc);
        sc.stop();
    }
 private void showResults(JavaSparkContext sc) 
    {
        CassandraJavaPairRDD<Integer, Integer> rdd1 = javaFunctions(sc)
                .cassandraTable(keyspace, tablename, mapColumnTo(Integer.class), mapColumnTo(Integer.class))
                .select("keyval", "rangefield");


        List<Integer> lst = rdd1.keys().toArray();
        for(Integer l : lst)
        {
            System.out.println(l);
        }
    }

当我运行上述代码时,我得到了以下异常(下面粘贴了堆栈跟踪)

15/01/15 19:22:41警告调度程序。TaskSetManager:在0.0阶段(TID 1,ct-0094)中丢失了task 1.0:java。lang.ClassNotFoundException:com。税收。火花连接器。rdd。分割者。java的Cassandrappartition。网1美元。在java上运行(URLClassLoader.java:372)。网1美元。在java上运行(URLClassLoader.java:361)。安全访问控制器。java上的doPrivileged(本机方法)。网URLClassLoader。java上的findClass(URLClassLoader.java:360)。lang.ClassLoader。java上的loadClass(ClassLoader.java:424)。lang.ClassLoader。java上的loadClass(ClassLoader.java:357)。朗,同学们。java上的forName0(本机方法)。朗,同学们。org上的forName(Class.java:340)。阿帕奇。火花序列化程序。JavaDeserializationStream$$anon$1。resolveClass(JavaSerializer.scala:59)[…]

我错过了什么?

共有1个答案

戚森
2023-03-14

我自己通过浏览一些博客解决了这个问题。

实际上,程序的jar必须包含在程序中,就像

JavaSparkContext sc = new JavaSparkContext(conf);
sc.addJar("./target/SparkPOC-0.0.1-SNAPSHOT-jar-with-dependencies.jar");

这解决了问题。但是每次在运行代码之前,您都必须Maven Install(即创建jar)您的代码,然后运行它。我仍在寻找可以避免这些步骤的更好方法。

 类似资料:
  • 此任务用于停止当前构建并抛出。它从当前构建退出并向控制台显示异常消息。 属性用于为此元素设置异常消息。 1. Apache Ant失败任务属性 属性 描述 必需 显示失败原因的消息 否 仅当当前目录中存在属性时才会失败 否 仅在当前项目中不存在属性时才会失败 否 下面来看一下Ant Fail Task的一些例子,如下所示。 2. Apache Ant失败任务示例 无消息 设置消息 使用unless

  • 我有一个kotlin项目,我使用了导航组件。在我的本地机器中,我可以使用,并且工作正常。但是在我的远程ubuntu中,当我调用时,我会得到这样的消息:有人能帮助我吗 root@sarvdata:/home/test2/wooshop#gradle生成任务:app:GenerateSafeargsDebug失败 失败:生成失败,出现异常。

  • null 请访问https://help.gradle.org获取更多帮助 生成在3M 12s中失败异常:Gradle task assembleDebug失败,退出代码为%1

  • 您可以在下面找到代码:https://github.com/ulkan/oc_mareu

  • 你知道错误的根源是什么吗?filepath也不太长,每次都不是256个符号,那也没有问题:/ 提前谢谢:)

  • 我刚刚更新了我的cordova android到7.1.0,以支持Android27 sdk,以解决插件不能与SDK26一起工作的问题。 我尝试更改GradleBuilder.js文件中的gradle分发url,但没有成功。 编辑2:我想解决这个问题的firebase插件似乎是问题的一部分。移除:cordova-plugin-firebase允许应用程序的构建没有问题。似乎在添加插件后,我不能简单