Apache spark Cloudera Hadoop 2.6.0-cdh5.14.2和结构化流媒体
是否有人能够在Hadoop 2.6.0-cdh5.14.2上使用外部库(主要是spark sql-*)启动结构化流媒体 更新 最重要的是:我上一篇博文中的信息缺失:Spark的版本是2.3.0 根据我远方的朋友的建议,我这样做了:Apache spark Cloudera Hadoop 2.6.0-cdh5.14.2和结构化流媒体,apache-spark,cloudera,spark-structured-streaming,Apache Spark,Cloudera,Spark Structured Streaming,是否有人能够在Hadoop 2.6.0-cdh5.14.2上使用外部库(主要是spark sql-*)启动结构化流媒体 更新 最重要的是:我上一篇博文中的信息缺失:Spark的版本是2.3.0 根据我远方的朋友的建议,我这样做了: 我从python迁移到Scala(Scala得到了更好的支持,它是本机Spark语言) 我使用卡夫卡以外的其他来源运行结构化流媒体 我使用了一个简单的csv作为源: $ export SPARK_KAFKA_VERSION=0.10 $ spark2-shell
$ export SPARK_KAFKA_VERSION=0.10
$ spark2-shell
scala> import org.apache.spark.sql.Encoders
scala> case class Amazon(EventId:String, DOCOMOEntitlementId:String, AmazonSubscriptionId:String, AmazonPlanId:String, DOCOMOUserId:String, MerchantAccountKey:String, ResellerKey:String, Status:String, CreatedDate:String, EndDate:String, ActivatedDate:String, FailedDate:String, ExpiryDate:String, LastUpdated:String, dateTimeStart:String, dateTimeEnd:String, referrerSource:String, reasonCode:String)
scala> val schema = Encoders.product[Amazon].schema
scala> val data = spark.readStream.schema(schema).csv("/user/ale/csv.csv").as[Amazon]
scala> data.isStreaming
res0: Boolean = true
scala> val ss = data.writeStream.outputMode("append").format("console")
scala> ss.start()
这段代码神奇地工作了
Cloudera声称他们不支持结构化流媒体,根据这一点,我刚刚更改源代码的以下代码失败了:
val data =spark.readStream.format("kafka")...
提出这一例外:
java.lang.ClassNotFoundException: Failed to find data source: kafka. Please find packages at http://spark.apache.org/third-party-projects.html
at org.apache.spark.sql.execution.datasources.DataSource$.lookupDataSource(DataSource.scala:635)
at org.apache.spark.sql.streaming.DataStreamReader.load(DataStreamReader.scala:159)
... 49 elided
Caused by: java.lang.ClassNotFoundException: kafka.DefaultSource
at scala.reflect.internal.util.AbstractFileClassLoader.findClass(AbstractFileClassLoader.scala:62)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$23$$anonfun$apply$15.apply(DataSource.scala:618)
at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$23$$anonfun$apply$15.apply(DataSource.scala:618)
at scala.util.Try$.apply(Try.scala:192)
at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$23.apply(DataSource.scala:618)
at org.apache.spark.sql.execution.datasources.DataSource$$anonfun$23.apply(DataSource.scala:618)
at scala.util.Try.orElse(Try.scala:84)
at org.apache.spark.sql.execution.datasources.DataSource$.lookupDataSource(DataSource.scala:618)
... 50 more
我只使用提供的Cloudera库(没有外部JAR)。请注意
$ export SPARK_KAFKA_VERSION=0.10
这用于强制使用0.10版本(spark streaming kafka-…),因为集群上也存在0.8版本。但是没有卡夫卡罐子
现在的问题是,我缺少正确的库(jar)。Spark 2.3.0看起来很健康,尽管Cloudera网站上有所有警告
所以。。。是否有一个“非正式官方Cloudera Jar”来解决这个问题?有人找到一个好的Jar来部署解决这个问题的代码吗?来自cloudera的Jar选项更好:内部策略拒绝将第三方Jar与代码捆绑在一起
另一个选项是使用directStreaming重新实现所有结构化流媒体。这是我喜欢避免的工作。我想这就是我问题的答案:
18/11/15 10:51:25 WARN kafka010.KafkaOffsetReader: Error in attempt 1 getting Kafka offsets: org.apache.kafka.common.errors.GroupAuthorizationException: Not authorized to access group: spark-kafka-source-707ab780-c71c-408b-80dd-be1960a03dd6-360506181-driver-0
18/11/15 10:51:27 WARN kafka010.KafkaOffsetReader: Error in attempt 2 getting Kafka offsets: org.apache.kafka.common.errors.GroupAuthorizationException: Not authorized to access group: spark-kafka-source-707ab780-c71c-408b-80dd-be1960a03dd6-360506181-driver-1
18/11/15 10:51:28 WARN kafka010.KafkaOffsetReader: Error in attempt 3 getting Kafka offsets: org.apache.kafka.common.errors.GroupAuthorizationException: Not authorized to access group: spark-kafka-source-707ab780-c71c-408b-80dd-be1960a03dd6-360506181-driver-2
18/11/15 10:51:29 ERROR streaming.MicroBatchExecution: Query [id = 099e897f-2a44-4a50-bc57-46f898e05174, runId = b010d8d8-7b73-4f71-8ca5-f3eda47149c6] terminated
哨兵不允许这些人访问数据。由于它是在KafkaSourceProvider.scala中编码的,因此没有避免它的选项
希望这能节省其他人的时间。如果你有集群的管理员权限,没有什么能阻止你安装最新版本的Spark来运行结构化流媒体(事实上,你甚至不需要“安装”Spark,只需将其设置为提交任务)我用更有用的信息更新了问题,spark已经有了正确的版本,最后的问题是jars/cloudera策略。