Apache spark Spark 1.6 dataproc py4j上的卡夫卡流错误

Apache spark Spark 1.6 dataproc py4j上的卡夫卡流错误,apache-spark,apache-kafka,google-cloud-dataproc,Apache Spark,Apache Kafka,Google Cloud Dataproc,我得到以下错误: Py4JError(调用o73.createDirectStreamWithoutMessageHandler.Trace:\npy4j.py4jeException:Method createDirectStreamWithoutMessageHandler([class org.apache.spark.streaming.api.java.JavaStreamingContext,class java.util.HashMap,class java.util.HashSe

我得到以下错误:

Py4JError(调用o73.createDirectStreamWithoutMessageHandler.Trace:\npy4j.py4jeException:Method createDirectStreamWithoutMessageHandler([class org.apache.spark.streaming.api.java.JavaStreamingContext,class java.util.HashMap,class java.util.HashSet,class java.util.HashMap])时发生u'An错误)不存在\n\tat py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:335)\n\tat py4j.ReflectionEngine.getMethod(ReflectionEngine.java:344)\n\tat py4j.Gateway.invoke(Gateway.java:252)\n\tat py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:133)\n\tat py4j.commands.CallCommand.CallCommand.execute(CallCommand.java:79)\n\tat py4j.GatewayConnection.run(GatewayConnection.java:209)\n\tat java.lang.Thread.run(Thread.java:745)\n\n',)

我正在使用spark-streaming-kafka-assembly_2.10-1.6.0.jar(它位于我所有节点+主机上的/usr/lib/hadoop/lib/文件夹中)

(编辑) 实际错误是:java.lang.NoSuchMethodError:org.apache.hadoop.warn.util.Apps.crossPlatformify(Ljava/lang/String;)Ljava/lang/String

这是由于hadoop版本错误造成的。因此,应使用正确的hadoop版本编译spark:

mvn-Phadoop-2.6-Dhadoop.version=2.7.2-DskipTests干净包


这将在external/kafka assembly/target文件夹中生成一个jar。

使用image version 1,我已成功运行Pypark流/

在这些示例中,“ad kafka inst”是我的测试kafka实例,带有“测试”主题

  • 使用无初始化操作的群集:

    $ gcloud dataproc jobs submit pyspark --cluster ad-kafka2 --properties spark.jars.packages=org.apache.spark:spark-streaming-kafka_2.10:1.6.0 ./kafka_wordcount.py ad-kafka-inst:2181 test 
    
  • 对完整kafka程序集使用初始化操作:

    • 下载/解包spark-1.6.0.tgz
    • 使用以下内容构建:

      $ mvn -Phadoop-2.6 -Dhadoop.version=2.7.2 package
      
    • 将spark-streaming-kafka-assembly_2.10-1.6.0.jar上传到新的GCS存储桶(例如MYBUCKET)
    • 在同一GCS存储桶中创建以下初始化操作(例如,gs://MYBUCKET/install\u spark\u kafka.sh):

    • 使用上述初始化操作启动群集:

      $ gcloud dataproc clusters create ad-kafka-init --initialization-actions gs://MYBUCKET/install_spark_kafka.sh
      
    • 启动流字计数:

      $ gcloud dataproc jobs submit pyspark --cluster ad-kafka-init ./kafka_wordcount.py ad-kafka-inst:2181 test
      

  • 集群是什么时候创建的/创建集群时是否传入了--image版本标志?您能否给出一些关于如何调用KafkaUtils.createStream()的上下文(或者,您如何调用底层方法)?该集群是昨天创建的,映像版本为1.0(spark 1.6)。现在。我们仍然使用图像版本0.1(spark 1.5.0)和spark-streaming-kafka-assembly_2.10-1.5.0.jar,也使用图像版本0.2和相同的jar,因为1.5.2 jar也不能工作。然而,在最新版本中,所有jar似乎都不起作用。使用KafkaUtils.createDirectStream方法时引发错误。当我使用spark 1.6和jar spark-streaming-kafka-assembly_2.10-1.6.0.jar(通过spark submit使用--jars选项)在本地运行代码时,代码似乎运行得很好。我今天下午一直在尝试复制,运气不太好。Spark 1.5是否有可能通过Spark 1.6进入您的Dataproc 1.0群集(例如,Spark-1.6和Spark-1.5都已安装,或者Spark-1.5已随您的作业打包)?我检查了每一个spark streaming kafka jar,我可以得到我的手(并从源代码构建了一个程序集jar),解包后签出了KafkaUtilsPythonHelper,以确保createDirectStreamWithoutMessageHandler方法具有正确的签名。我的初始化脚本只安装了一些python包,所以我认为这是不可能的。正如我之前所说的,它在本地工作,所以jar不应该是一个问题。当jar放在/usr/lib/hadoop/lib/文件夹中时,是否会再也找不到它?不过,我预计会有另一个错误。。。此外,在使用
    gcloud dataproc jobs submit pyspark
    时,--jars选项似乎不起作用,我是否需要执行与
    gcloud components update
    不同的更新?请随时给我发电子邮件,我的名字在google.com上没有空格,如果以下选项不适用于您,我们可以尝试了解您的安装情况。第二个选项确实起到了作用。由于hadoop版本不正确,mvn中的jar无法工作。上面的错误可能是由于一个错误的罐子。
    $ gcloud dataproc jobs submit pyspark --cluster ad-kafka-init ./kafka_wordcount.py ad-kafka-inst:2181 test