SparkStreaming监听windows10下面的文件夹

1、代码

import org.apache.log4j.{Level, Logger}
import org.apache.spark.SparkConf
import org.apache.spark.streaming.dstream.{DStream, ReceiverInputDStream}
import org.apache.spark.streaming.{Seconds, StreamingContext}
/**
 * @Author caoerbiao
 * @Date 2020/6/2 10:47
 * @Describe
 */
 
object HdfsWordCount {
  def main(args: Array[String]): Unit = {
    Logger.getLogger("org").setLevel(Level.ERROR)
    val sparkConf:SparkConf = new SparkConf().setAppName("HdfsWordCount").setMaster("local[2]")
    val ssc = new StreamingContext(sparkConf,Seconds(4))

    // 监听的hdfs目录只会计算实时放进的文件,不会计算已有文件或者文件夹下一直存在的文件
    //todo: 1、监听windows本地文件夹;E:\\data_test
    val textFileStream:DStream[String] = ssc.textFileStream("E:\\data_test")

    //todo: 2、监听hdfs路径
	// val textFileStream:DStream[String] = ssc.textFileStream("hdfs:/node01:8020/data")
    val result= textFileStream.flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_)
    
    result.print()
    ssc.start()
    ssc.awaitTermination()
  }
}

2、启动监听程序,依次将不同文件放入文件夹

SparkStreaming监听windows10下面的文件夹_第1张图片

 

  • 在启动sparkstreaming之前文件夹内存在的,即使后面修改文件内容,也不会被监听;
  • 复制一个同名文件text1.txt到其他路径,改变内容后;删掉监控文件夹下的text1.txt文件,从其他路径再次移入text1.txt,不再被监听;
  • 如果内容不更改,仅改变文件名,再次移入也不会被监听;
  • 文件不同名,不同内容,但是文件修改时间在监听开始那一刻之前的(word.txt是很久之前的一个文件,移入被监控文件夹),也不会被监听;

3、结论

  • sparkStreaming不会读取原本就已经存在于该文件夹里的文本,只会读取在监听期间,传进文件夹的文本,而且该文本还有要求,必须是它最后一次更改的操作,是在监听开始的那一刻之后的
  • sparkStreaming监控的是文件夹的流数据,不能直接在监控文件夹下面创建文件

你可能感兴趣的:(大数据)