Scala 如何获取卡夫卡流并在Spark Shell中打印它?
首先,我用以下方式在文件夹中构建了一个SBTScala 如何获取卡夫卡流并在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"
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。或者检查其他人是否使用此端口并释放它。我可以通过执行以下操作来修复它:
val kafkaStream=KafkaUtils.createStream(ssc,“本地主机:2181”,“spark流媒体消费群体”,map(“spark主题”->5))
错误做法!这就是spark无法获取您的流的原因
val kafkaStream=KafkaUtils.createStream(ssc,“本地主机:2181”,“spark流媒体消费群体”,Map(“spark主题”->5))
正确的做法
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 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
-------------------------------------------