Apache spark 如何从Apache Spark中定期追加的日志文件中获取数据?
我有一个Apache访问日志文件,其中包含一些数据,并且不断增加。我想使用ApacheSpark流式API分析这些数据 Spark对我来说是新的,我创建了一个程序,在其中,我使用Apache spark 如何从Apache Spark中定期追加的日志文件中获取数据?,apache-spark,spark-streaming,access-log,log-analysis,Apache Spark,Spark Streaming,Access Log,Log Analysis,我有一个Apache访问日志文件,其中包含一些数据,并且不断增加。我想使用ApacheSpark流式API分析这些数据 Spark对我来说是新的,我创建了一个程序,在其中,我使用jssc.textFileStream(directory)函数获取日志数据。但它不符合我的要求 请向我推荐一些使用spark分析日志文件的方法 这是我的密码 SparkConf conf = new SparkConf() .setMaster("spark://192.168.1.9:
jssc.textFileStream(directory)
函数获取日志数据。但它不符合我的要求
请向我推荐一些使用spark分析日志文件的方法
这是我的密码
SparkConf conf = new SparkConf()
.setMaster("spark://192.168.1.9:7077")
.setAppName("log streaming")
.setSparkHome("/usr/local/spark")
.setJars(new String[] { "target/sparkstreamingdemo-0.0.1.jar" });
StreamingContext ssc = new StreamingContext(conf, new Duration(5000));
DStream<String> filerdd = ssc.textFileStream("/home/user/logs");
filerdd.print();
ssc.start();
ssc.awaitTermination();
SparkConf conf=new SparkConf()
.setMaster(“spark://192.168.1.9:7077")
.setAppName(“日志流”)
.setSparkHome(“/usr/local/spark”)
.setJars(新字符串[]{“target/sparkstreamingdemo-0.0.1.jar”});
StreamingContext ssc=新StreamingContext(形态,新持续时间(5000));
DStream filerdd=ssc.textFileStream(“/home/user/logs”);
filerdd.print();
ssc.start();
ssc.终止();
此代码不会从现有文件返回任何数据。这仅在我创建新文件时有效,但当我更新该新文件时,程序不会再次返回更新的数据。如果文件被实时修改,您可以从Apache Commons IO使用。 这是最简单的示例:
public void readLogs(File f, long delay) {
TailerListener listener = new MyTailerListener();
Tailer tailer = new Tailer(f, listener, delay);
// stupid executor impl. for demo purposes
Executor executor = new Executor() {
public void execute(Runnable command) {
command.run();
}
};
executor.execute(tailer);
}
public class MyTailerListener extends TailerListenerAdapter {
public void handle(String line) {
System.out.println(line);
}
}
上面的代码可以用作日志读取器,也可以用作源代码。然后,您需要配置Flume sink以将收集的日志重定向到Spark流,并应用Spark来分析Flume流中的数据()
有关水槽设置的更多详细信息,请参见本文:您能提供您的代码吗?否则就很难找出问题的根源了。请提供一些分析日志文件的指南。Spark将处理您的新文件,但无法看到您已更新其中一个已处理的文件。Spark只处理一次文件,就是这样。如果要再次处理文件,可以更改文件名。是否有任何方法可以处理连续附加文件,如日志文件?谢谢@VictorBashurov。我将如何将此行发送到流媒体模块?例如,流媒体模块可以配置为从控制台输出获取数据