Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 如何从Apache Spark中定期追加的日志文件中获取数据?_Apache Spark_Spark Streaming_Access Log_Log Analysis - Fatal编程技术网

Apache spark 如何从Apache 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:

我有一个Apache访问日志文件,其中包含一些数据,并且不断增加。我想使用ApacheSpark流式API分析这些数据

Spark对我来说是新的,我创建了一个程序,在其中,我使用
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。我将如何将此行发送到流媒体模块?例如,流媒体模块可以配置为从控制台输出获取数据