Spark Streaming 写kafka报错:kafka.cluster.BrokerEndPoint cannot be cast to kafka.cluster.Broker

最近有个spark 读写kafka任务,直接在idea 以local模式运行没有问题,可以放到集群却报错

报错:kafka.cluster.BrokerEndPoint cannot be cast to kafka.cluster.Brokera


然后百度查了下,说是spark与kafka版本问题冲突。查看了下集群spark1.6,kafka只找到了kafka_2.10-0.9.0-kafka-2.0.0.jar这个jar,估计是0.9版本吧。

      怎么解决问题呢?问题根源说是找到了,可是网上找了好久并付之行动就是没找到合适的。根据报错提示定位于spark_stream_kafka的jar与kafka api的jar包,没有好的解决办法,那下载spark1.6源码,将spark_stream_kafka的源码加入到项目,在idea工具上查看两个jar的代码,不存在类转换问题,在报错处println数据,打包到集群运行。

       反复修改pom.xml文件,打包运行。错误就仍然照旧同样一条。修改pom.xml文件中,查看了下kafka0.9比0.8多了BrokerEndPoint类,可问题是maven的都是0.8版的,0.9版哪里来的呢,不科学呀!百度呀百度,看到CDH多版本冲突的标题党,灵光一闪,会不会CDH有运行kafka0.9jar,项目maven的jar不生效。经过长久努力,终于查到/opt/cloudera/parcels/CDH/lib/spark/conf/classpath.txt中定义了kafka api 的jar

/opt/cloudera/parcels/CDH-5.7.2-1.cdh5.7.2.p0.18/jars/kafka-clients-0.9.0-kafka-2.0.0.jar
  /opt/cloudera/parcels/CDH-5.7.2-1.cdh5.7.2.p0.18/jars/kafka_2.10-0.9.0-kafka-2.0.0.jar

  终于松了口气,上传0.8版本的Jar,spark 读取kafka数据OK了,可是在写kafka数据时一直提示自定义分区规则类找不到,多次测试后,果断将两行配置删除掉。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spark Streaming可以很方便地读取Kafka中的数据,并将其入到HBase中。这里是一些基本的步骤: 1. 首先,你需要在你的Spark Streaming项目中添加Kafka和HBase的依赖。 2. 创建一个Spark StreamingStreamingContext对象,并设置批处理间隔。 3. 创建一个Kafka输入流,指定Kafka的相关参数,如Kafka集群地址、消费者组、Topic等。 4. 从输入流中获取数据,进行必要的转换和处理,然后将结果入到HBase中。入HBase可以使用HBase的Java API或者使用Spark对HBase的支持。 下面是一个简单的示例代码,假设你已经完成了步骤1和步骤2: ``` import org.apache.spark.streaming._ import org.apache.spark.streaming.kafka._ import org.apache.hadoop.hbase.client.{HBaseAdmin,HTable,Put} import org.apache.hadoop.hbase.{HBaseConfiguration, HTableDescriptor, TableName} import org.apache.hadoop.hbase.util.Bytes val ssc = new StreamingContext(sparkConf, Seconds(5)) val kafkaParams = Map[String, String]("metadata.broker.list" -> "localhost:9092", "group.id" -> "test-consumer-group") val topicsSet = Set("test") val messages = KafkaUtils.createDirectStream[String, String, StringDecoder, StringDecoder](ssc, kafkaParams, topicsSet) messages.foreachRDD { rdd => rdd.foreach { msg => val hconf = HBaseConfiguration.create() val hTable = new HTable(hconf, "table_name") val put = new Put(Bytes.toBytes(msg._1)) put.add(Bytes.toBytes("cf"), Bytes.toBytes("col"), Bytes.toBytes(msg._2)) hTable.put(put) } } ssc.start() ssc.awaitTermination() ``` 这个示例中,我们使用了KafkaUtils.createDirectStream方法创建了一个Kafka输入流,然后使用foreachRDD方法对每个RDD进行处理。在处理过程中,我们创建了一个HBase表实例,并将数据入到表中。这里只是一个简单的示例,实际上你需要根据你的数据格式和业务逻辑进行相应的处理和转换。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值