本次调研案例
1.使用SparkStreaming去周期性监测指定本地文件目录下是否有文件写入或创建,有则读入SparkRDD进行过滤,分词,计数并将统计结果写入本地
2,使用SparkStreaming去周期性监测hdfs系统上指定目录下是否有文件新上传,有则读入SparkRDD进行过滤,分词,计数并将统计结果写入hdfs系统
调研结果
1,2两个测试案例均测试成功
问题分析
SparkStreaming本身提供了监测文件目录状态功能,能监测指定目录下是否有新数据生成并进行处理,但在监测程序运行之前该目录生成的数据,监测程序是无法获取到的
SparkStreaming是按我们设置好的时间片段去批量处理数据的(所谓的微批处理),达不到按记录或文件一条一条的去处理,若想达到该效果需要与kafka,消息队列等高级数据源配合使用
SparkStreaming是按时间片段将监测目录下新生成的文件读入内存并生成一个SparkRDD对象进行分析处理
本期项目中词库分析的数据放在hdfs系统上的每个用户独立的zip包下txt文件,若使用原生的SparkStreaming去处理会出现一些问题,
原生SparkStreaming只能按照指定时间片段去读取监测到新上传文件并且会将这些文件一起读到一个SparkRDD对象中,然而分析处理完的结果不是我们想要的
我们需要将每个用户的数据都视为一个分析任务并将处理的结果分别存入hdfs系统并且带上用户标识
若在上传用户数据到hdfs系统时设置每个用户数据上传间隔为X(X>10)秒,并且词库分析程序这边设置SparkStreaming监测周期也为X秒,能实现SparkStreaming按一个文件一个文件的去处理(但并非最佳实现)
综上所述,本期项目先还是使用SparkCore的API进行处理分析,需要解决的问题(自己实现hdfs系统上的文件监控,自定义词库与输入法词库的加载合并等等,需要后续讨论)