使用火花流分析日志



我最近用Spark SQL对静态日志文件进行了分析(找出像IP地址这样出现十多次的东西(。问题来自这个网站。但是我使用了自己的实现。我将日志读入RDD,将该RDD转换为DataFrame(在POJO的帮助下(并使用DataFrame操作。

现在,我应该使用 Spark Streaming 对 30 分钟的窗口的流式处理日志文件以及一天的聚合结果进行类似的分析。解决方案可以再次在这里找到,但我想以另一种方式做。所以我所做的是这个

  • 使用 Flume 将数据从日志文件写入 HDFS 目录

  • 使用 JavaDStream 从 HDFS 读取.txt文件

然后我不知道如何进行。这是我使用的代码

Long slide = 10000L; //new batch every 10 seconds
Long window = 1800000L; //30 mins
SparkConf conf = new SparkConf().setAppName("StreamLogAnalyzer");
JavaStreamingContext streamingContext = new JavaStreamingContext(conf, new Duration(slide));
JavaDStream<String> dStream = streamingContext.textFileStream(hdfsPath).window(new Duration(window), new Duration(slide));

现在,我似乎无法决定是否应该将每个批处理转换为数据帧并执行以前对静态日志文件执行的操作。还是这种方式既费时又矫枉过正。

我是流媒体和Flume的绝对菜鸟。有人可以指导我吗?

在Spark中使用DataFrame(和数据集(在最新版本的Spark中得到了最推广的方式,因此这是一个正确的选择。我认为由于流的非显式性质,当您将文件移动到 HDFS 而不是从任何事件日志中读取时,会出现一些模糊性。

这里的要点是选择正确的批处理时间大小(或代码段中的幻灯片大小(,以便应用程序将处理在该时间段下加载的数据,并且不会有批处理队列。

最新更新