卡夫卡->;火花流->;Hbase。任务不可序列化错误,原因是:java.lang.IllegalStateException:作业处于定义状态而不是运行状态

卡夫卡->;火花流->;Hbase。任务不可序列化错误,原因是:java.lang.IllegalStateException:作业处于定义状态而不是运行状态,java,hbase,apache-kafka,spark-streaming,Java,Hbase,Apache Kafka,Spark Streaming,我正试图为某个主题编写Kafka命令行生成器生成的数据 我面临问题,无法继续。下面是我的代码,我将其创建为一个jar,并在spark shell上运行spark submit 我在foreachRDD()中做错了吗?SparkKafkaDemo$2.call(SparkKafkaDemo.java:63)下面的错误消息行有什么问题 SparkConf sparkConf = new SparkConf().setAppName("JavaKafkaDemo").setMaster("local"

我正试图为某个主题编写Kafka命令行生成器生成的数据

我面临问题,无法继续。下面是我的代码,我将其创建为一个jar,并在spark shell上运行spark submit

我在
foreachRDD()中做错了吗?
SparkKafkaDemo$2.call(SparkKafkaDemo.java:63)
下面的错误消息行有什么问题

SparkConf sparkConf = new SparkConf().setAppName("JavaKafkaDemo").setMaster("local").setSparkHome("/Users/kvk/softwares/spark-1.3.1-bin-hadoop2.4");

            JavaStreamingContext jsc = new JavaStreamingContext(sparkConf, Duration.seconds(1));

            int numThreads = 2;
            Map<String, Integer> topicMap = new HashMap<String, Integer>();

            topicMap.put("nonview", numThreads);

            JavaPairReceiverInputDStream<String, String> messages =
                    KafkaUtils.createStream(jsc, "localhost", "ViewConsumer", topicMap);

            JavaDStream<String> lines = messages.map(new Function<Tuple2<String, String>, String>() {
                @Override
                public String call(Tuple2<String, String> tuple2) {
                    return tuple2._2();
                }
            });

            lines.foreachRDD(new Function<JavaRDD<String>, Void>() {
                                 @Override
                                 public Void call(JavaRDD<String> stringJavaRDD) throws Exception {
                                     JavaPairRDD<ImmutableBytesWritable, Put> hbasePuts = stringJavaRDD.mapToPair(
                                             new PairFunction<String, ImmutableBytesWritable, Put>() {
                                                 @Override
                                                 public Tuple2<ImmutableBytesWritable, Put> call(String line) throws Exception {

                                                     Put put = new Put(Bytes.toBytes("Rowkey" + Math.random()));
                                                     put.addColumn(Bytes.toBytes("firstFamily"), Bytes.toBytes("firstColumn"), Bytes.toBytes(line+"fc"));
                                                     return new Tuple2<ImmutableBytesWritable, Put>(new ImmutableBytesWritable(), put);
                                                 }
                                             });

                                     // save to HBase- Spark built-in API method
                                     hbasePuts.saveAsNewAPIHadoopDataset(newAPIJobConfiguration1.getConfiguration());
                                     return null;
                                 }
                             }
            );
            jsc.start();
            jsc.awaitTermination();

请添加序列化

sparkConf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer");

请添加序列化

sparkConf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer");

谢谢Vijay的回复。实际上,我通过传递实现PairFunction接口的具体类的对象来修改代码。这就解决了问题。但是,我仍然面临一个问题,因为我的代码可以正确地进行行数计算(类似于word count,它可以从消息中计算唯一行数),而不是hbase插入。我可以清楚地看到RDD块从kafka集群中涌现出来,但是hbase插入并没有发生。我能知道可能是什么问题吗?我正在使用多个线程运行master。请参阅此链接。用于hbase插入代码。我是不是错过了什么或是做错了什么。我没有看到任何错误,但spark一直在接收消息,但没有向hbase写信。感谢Vijay的回复。实际上,我通过传递实现PairFunction接口的具体类的对象来修改代码。这就解决了问题。但是,我仍然面临一个问题,因为我的代码可以正确地进行行数计算(类似于word count,它可以从消息中计算唯一行数),而不是hbase插入。我可以清楚地看到RDD块从kafka集群中涌现出来,但是hbase插入并没有发生。我能知道可能是什么问题吗?我正在使用多个线程运行master。请参阅此链接。用于hbase插入代码。我是不是错过了什么或是做错了什么。我没有看到任何错误,但spark一直在接收消息,但没有向hbase写信。感谢Vijay的回复。实际上,我通过传递实现PairFunction接口的具体类的对象来修改代码。这就解决了问题。但是,我仍然面临一个问题,因为我的代码可以正确地进行行数计算(类似于word count,它可以从消息中计算唯一行数),而不是hbase插入。我可以清楚地看到RDD块从kafka集群中涌现出来,但是hbase插入并没有发生。我能知道可能是什么问题吗?我正在使用多个线程运行master。请参阅此链接。用于hbase插入代码。我是不是错过了什么或是做错了什么。我没有看到任何错误,但spark一直在接收消息,但没有向hbase写入。