Scala 如何获取卡夫卡流并在Spark Shell中打印它?

Scala 如何获取卡夫卡流并在Spark Shell中打印它?,scala,shell,apache-spark,apache-kafka,spark-streaming,Scala,Shell,Apache Spark,Apache Kafka,Spark Streaming,首先,我用以下方式在文件夹中构建了一个SBT val sparkVersion = "1.6.3" scalaVersion := "2.10.5"

首先,我用以下方式在文件夹中构建了一个SBT

val sparkVersion = "1.6.3"                                                                                                                           
scalaVersion := "2.10.5"                                                                                                                             
resolvers += "Spark Packages Repo" at "https://dl.bintray.com/spark-packages/maven"                                                                  
libraryDependencies ++= Seq(                                                                                                                         
"org.apache.spark" %% "spark-streaming" % sparkVersion,                                                                                              
"org.apache.spark" %% "spark-streaming-kafka" % sparkVersion                                                                                         
 )                                                                                                                                                   
libraryDependencies +="datastax" % "spark-cassandra-connector" % "1.6.3-s_2.10"                                                                      
libraryDependencies +="org.apache.spark" %% "spark-sql" % "1.1.0"
后来,在我的“build.sbt”所在的文件夹中,我以以下方式启动了spark shell

 >/usr/hdp/2.6.0.3-8/spark/bin/spark-shell --packages datastax:spark-cassandra-connector:1.6.3-s_2.10 --conf spark.cassandra.connection.host=127.0.0.1
以下是spark shell启动时显示的警告:



在Spark shell中,我导入以下软件包

import org.apache.spark.SparkConf; import org.apache.spark.streaming.StreamingContext; import org.apache.spark.streaming.Seconds; import org.apache.spark.streaming.kafka.KafkaUtils; import com.datastax.spark.connector._ ; import org.apache.spark.sql.cassandra._ ;
然后在spark shell中按以下方式创建配置:

val conf = new SparkConf().setMaster("local[*]").setAppName("KafkaReceiver").set("spark.driver.allowMultipleContexts", "true").setMaster("local");
val ssc = new StreamingContext(conf, Seconds(10))
创建配置分配后,按以下方式创建新的spark streaming上下文:

val conf = new SparkConf().setMaster("local[*]").setAppName("KafkaReceiver").set("spark.driver.allowMultipleContexts", "true").setMaster("local");
val ssc = new StreamingContext(conf, Seconds(10))
在创建spark streaming context的过程中,上面显示的几个警告与其他警告一起再次出现,如下所示


然后打印流并以下面的方式启动ssc

kafkaStream.print()
ssc.start
在shell中使用上述命令后,输出如下图所示

后来开始了下面的混乱!没有打印值但信息如下图所示的流

重复打印的输出如下图所示


17/08/18 10:01:30信息作业调度器:从时间为1503050490000 ms的作业集启动作业流式处理作业1503050490000 ms.0
18年8月17日10:01:30信息作业调度器:已完成作业流作业1503050490000 ms.0,来自时间为1503050490000 ms的作业集
18年8月17日10:01:30信息作业调度器:总延迟:时间1503050490000毫秒为0.003秒(执行:0.000秒)
17/08/18 10:01:30信息块RDD:从持久性列表中删除RDD 3
18年8月17日10:01:30信息KafkaInputDStream:在1503050490000毫秒的第39个时间点在createStream上删除RDD块RDD[3]的块
17/08/18 10:01:30接收到的信息BlockTracker:删除批次阵列缓冲区(1503050470000毫秒)
17/08/18 10:01:30信息输入FoTracker:删除旧批元数据:1503050470000毫秒
17/08/18 10:01:30信息块管理器:删除RDD 3
17/08/18 10:01:40信息作业调度器:添加了150305000000毫秒的作业
-------------------------------------------                                                                                                          
时间:15030500000毫秒
-------------------------------------------


这意味着需要的端口已经在使用中。通常,Spark thrifteserver使用端口4040。因此,尝试使用spark/sbin文件夹中的stop-thriftserver.sh停止thriftserver。或者检查其他人是否使用此端口并释放它。

我可以通过执行以下操作来修复它:

  • 注意区分大小写,因为Scala是区分大小写的语言。 在下面的代码部分中,使用了map()而不是map()
  • val kafkaStream=KafkaUtils.createStream(ssc,“本地主机:2181”,“spark流媒体消费群体”,map(“spark主题”->5))
    错误做法!这就是spark无法获取您的流的原因

    val kafkaStream=KafkaUtils.createStream(ssc,“本地主机:2181”,“spark流媒体消费群体”,Map(“spark主题”->5))
    正确的做法

  • 检查制作人是否正在播放地图功能中提到的卡夫卡主题!Spark无法从前面提到的主题中获取您的流,无论是当Kafka producer停止将数据流传输到该主题时,还是当流传输中的数据完成时,Spark开始从数组缓冲区中删除RDD并显示如下消息
    17/08/18 10:01:30信息作业调度器:从时间为1503050490000 ms的作业集启动作业流式处理作业1503050490000 ms.0
    18年8月17日10:01:30信息作业调度器:已完成作业流作业1503050490000 ms.0,来自时间为1503050490000 ms的作业集
    18年8月17日10:01:30信息作业调度器:总延迟:时间1503050490000毫秒为0.003秒(执行:0.000秒)
    17/08/18 10:01:30信息块RDD:从持久性列表中删除RDD 3
    18年8月17日10:01:30信息KafkaInputDStream:在1503050490000毫秒的第39个时间点在createStream上删除RDD块RDD[3]的块
    17/08/18 10:01:30接收到的信息BlockTracker:删除批次阵列缓冲区(1503050470000毫秒)
    17/08/18 10:01:30信息输入FoTracker:删除旧批元数据:1503050470000毫秒
    17/08/18 10:01:30信息块管理器:删除RDD 3
    17/08/18 10:01:40信息作业调度器:添加了150305000000毫秒的作业
    -------------------------------------------                                                                                                          
    时间:15030500000毫秒
    -------------------------------------------
    

  • 遵循@YehorKrivokon和@VinodChandak的评论和回复,避免面临警告
    有点晚了,但这可以帮助其他人。Spark shell已经实例化了SparkContext,它作为sc提供。因此,要创建StreamingContext,只需将现有的sc作为参数传递。希望这有帮助

    你能粘贴输出吗
    kafkaStream.print()
    ssc.start
    
    17/08/18 10:01:30 INFO JobScheduler: Starting job streaming job 1503050490000 ms.0 from job set of time 1503050490000 ms                             
    17/08/18 10:01:30 INFO JobScheduler: Finished job streaming job 1503050490000 ms.0 from job set of time 1503050490000 ms                             
    17/08/18 10:01:30 INFO JobScheduler: Total delay: 0.003 s for time 1503050490000 ms (execution: 0.000 s)                                             
    17/08/18 10:01:30 INFO BlockRDD: Removing RDD 3 from persistence list                                                                                
    17/08/18 10:01:30 INFO KafkaInputDStream: Removing blocks of RDD BlockRDD[3] at createStream at <console>:39 of time 1503050490000 ms                
    17/08/18 10:01:30 INFO ReceivedBlockTracker: Deleting batches ArrayBuffer(1503050470000 ms)                                                          
    17/08/18 10:01:30 INFO InputInfoTracker: remove old batch metadata: 1503050470000 ms                                                                 
    17/08/18 10:01:30 INFO BlockManager: Removing RDD 3                                                                                                  
    17/08/18 10:01:40 INFO JobScheduler: Added jobs for time 1503050500000 ms                                                                            
    -------------------------------------------                                                                                                          
    Time: 1503050500000 ms                                                                                                                               
    -------------------------------------------
    
    WARN AbstractLifeCycle: FAILED SelectChannelConnector@0.0.0.0:4040: java.net.Bind   
    java.net.BindException: Address already in use
    
    17/08/18 10:01:30 INFO JobScheduler: Starting job streaming job 1503050490000 ms.0 from job set of time 1503050490000 ms                             
    17/08/18 10:01:30 INFO JobScheduler: Finished job streaming job 1503050490000 ms.0 from job set of time 1503050490000 ms                             
    17/08/18 10:01:30 INFO JobScheduler: Total delay: 0.003 s for time 1503050490000 ms (execution: 0.000 s)                                             
    17/08/18 10:01:30 INFO BlockRDD: Removing RDD 3 from persistence list                                                                                
    17/08/18 10:01:30 INFO KafkaInputDStream: Removing blocks of RDD BlockRDD[3] at createStream at <console>:39 of time 1503050490000 ms                
    17/08/18 10:01:30 INFO ReceivedBlockTracker: Deleting batches ArrayBuffer(1503050470000 ms)                                                          
    17/08/18 10:01:30 INFO InputInfoTracker: remove old batch metadata: 1503050470000 ms                                                                 
    17/08/18 10:01:30 INFO BlockManager: Removing RDD 3                                                                                                  
    17/08/18 10:01:40 INFO JobScheduler: Added jobs for time 1503050500000 ms                                                                            
    -------------------------------------------                                                                                                          
    Time: 1503050500000 ms                                                                                                                               
    -------------------------------------------