spark+kafka+idea+sbt+scala踩坑

集羣的spark還沒有用起來,自建一個單機spark,然後連接本機的kafka生產者消費消息。

idea+spark

 

scala代碼

package ex

import org.apache.spark.SparkConf
import org.apache.spark.streaming.Seconds
import org.apache.spark.streaming.StreamingContext
import org.apache.spark.streaming.kafka010.KafkaUtils
import org.apache.spark.streaming.kafka010.LocationStrategies.PreferConsistent
import org.apache.spark.streaming.kafka010.ConsumerStrategies.Subscribe
import org.apache.kafka.common.serialization.StringDeserializer
object KafkaCount {
  def main(args: Array[String]): Unit = {
    //創建streamingContext
    var conf=new SparkConf().setAppName("SparkStreamKaflaWordCountDemo");
    var ssc=new StreamingContext(conf,Seconds(4));
    //創建topic
    //var topic=Map{"test" -> 1}
    var topic=Array("test");
    //指定zookeeper
    //創建消費者組
    var group: String ="con-consumer-group"
    //消費者配置
    val kafkaParam = Map(
      "bootstrap.servers" -> "localhost:9092",//用於初始化鏈接到集羣的地址
      "key.deserializer" -> classOf[StringDeserializer],
      "value.deserializer" -> classOf[StringDeserializer],
      //用於標識這個消費者屬於哪個消費團體
      "group.id" -> group,
      //如果沒有初始化偏移量或者當前的偏移量不存在任何服務器上,可以使用這個配置屬性
      //可以使用這個配置,latest自動重置偏移量爲最新的偏移量
      "auto.offset.reset" -> "latest",
      //如果是true,則這個消費者的偏移量會在後臺自動提交
      "enable.auto.commit" -> (false: java.lang.Boolean)
    );
    //創建DStream,返回接收到的輸入數據
    var stream=KafkaUtils.createDirectStream[String,String](ssc, PreferConsistent,Subscribe[String,String](topic,kafkaParam))
    //每一個stream都是一個ConsumerRecord
    stream.map(s =>(s.key(),s.value())).print();
    ssc.start();
    ssc.awaitTermination();
  }
}

sbt工程

name := "test2"

version := "0.1"

scalaVersion := "2.11.8"


libraryDependencies += "org.apache.spark" %% "spark-streaming-kafka-0-10" % "2.3.2"// % "provided"
libraryDependencies += "org.apache.spark" % "spark-core_2.11" % "2.3.2" % "provided"

libraryDependencies += "org.apache.spark" % "spark-streaming_2.11" % "2.1.1" % "provided"

因爲自己環境的spark爲2.3.2,所以需要下載對應的spark-core_2.11爲2.3.2版本,2.11代表spark基於scala版本2.11;

因爲kafka爲2.0版本,spark-streaming-kafka-0-10選0-10版本,因爲自己環境的spark爲2.3.2, 跟spark最爲接近2.3.0版本,雖然我寫的是2.3.2,但是下載的是2.3.0版本。spark-streaming-kafka裏2.3.0版本有些方法跟2.1.0方法不一樣,spark如果是2.3.0版本,必須選2.3.0以上的spark-streaming-kafka;

spark-streaming版本2.1.1也適用於2.3.2版本的spark,裏面方法沒有差異。

kafka生產者

[root@zhangchenglong-test kafka_2.11-2.0.0]# bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test 
>asdf
>122222222222222
>1234'
>zcl123
>zcl124
>zcl125
>ssssssssssssssssssssssss

spark結果

-------------------------------------------
Time: 1541685796000 ms
-------------------------------------------

-------------------------------------------
Time: 1541685800000 ms
-------------------------------------------
(null,ssssssssssssssssssssssss)

-------------------------------------------
Time: 1541685804000 ms
-------------------------------------------

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章