ssc.textFileStream("/Users/dzzxjl/SStest/")
如果是在集群上运行,需要将程序打成JAR包,通过spark主目录下的bin/spark-submit 提交,并不断上传文档到HDFS上指定监听路径下以模拟实时数据流。SparkStreaming需要读取流式的数据,而不能直接从datas文件夹中创建。
如果是本地目录用file:///home/data 你不能移动文件到这个目录,必须用流的形式写入到这个目录形成文件才能被监测到。
在 Spark 官方提供关于集成 Kafka 和 Spark Streaming 的指导文档中,提到了两种方式,
- 第一种是 Receiver Based Approach,即通过在 Receiver 里实现 Kafka consumer 的功能来接收消息数据;
- 第二种是 Direct Approach, 即不通过 Receiver,而是周期性的主动查询 Kafka 消息分区中的最新 offset 值,进而去定义在每个 batch 中需要处理的消息的 offset 范围。本文采用的是第一种方式,因为目前第二种方式还处于试验阶段。
Streaming + Kafka
在Spark Streaming中消费Kafka数据,保证Exactly-once的核心有三点:
使用Direct方式连接Kafka;自己保存和维护Offset;更新Offset和计算在同一事务中完成;
用spark streaming流式处理kafka中的数据,第一步当然是先把数据接收过来,转换为spark streaming中的数据结构Dstream。
接收数据的方式有两种:
- 利用Receiver接收数据
- 直接从kafka读取数据
Structured Streaming
参考
- https://cloud.tencent.com/developer/article/1004821
- https://www.ibm.com/developerworks/cn/opensource/os-cn-spark-practice2/index.html
- https://zhuanlan.zhihu.com/p/51883927