web-dev-qa-db-ja.com

spark ssc.textFileStreamはディレクトリからファイルをストリーミングしていません

Eclipse(maven confを使用)を使用して2つのワーカーで以下のコードを実行しようとしていますが、それぞれに2つのコアがあるか、spark-submitを使用してみました。

public class StreamingWorkCount implements Serializable {

    public static void main(String[] args) {
        Logger.getLogger("org.Apache.spark").setLevel(Level.WARN);
        JavaStreamingContext jssc = new JavaStreamingContext(
                "spark://192.168.1.19:7077", "JavaWordCount",
                new Duration(1000));
        JavaDStream<String> trainingData = jssc.textFileStream(
                "/home/bdi-user/kaushal-drive/spark/data/training").cache();
        trainingData.foreach(new Function<JavaRDD<String>, Void>() {

            public Void call(JavaRDD<String> rdd) throws Exception {
                List<String> output = rdd.collect();
                System.out.println("Sentences Collected from files " + output);
                return null;
            }
        });

        trainingData.print();
        jssc.start();
        jssc.awaitTermination();
    }
}

そしてそのコードのログ

15/01/22 21:57:13 INFO FileInputDStream: New files at time 1421944033000 ms:

15/01/22 21:57:13 INFO JobScheduler: Added jobs for time 1421944033000 ms
15/01/22 21:57:13 INFO JobScheduler: Starting job streaming job 1421944033000 ms.0 from job set of time 1421944033000 ms
15/01/22 21:57:13 INFO SparkContext: Starting job: foreach at StreamingKMean.Java:33
15/01/22 21:57:13 INFO DAGScheduler: Job 3 finished: foreach at StreamingKMean.Java:33, took 0.000094 s
Sentences Collected from files []
-------------------------------------------
15/01/22 21:57:13 INFO JobScheduler: Finished job streaming job 1421944033000 ms.0 from job set of time 1421944033000 ms
Time: 1421944033000 ms
-------------------------------------------15/01/22 21:57:13 INFO JobScheduler: Starting job streaming job 1421944033000 ms.1 from job set of time 1421944033000 ms


15/01/22 21:57:13 INFO JobScheduler: Finished job streaming job 1421944033000 ms.1 from job set of time 1421944033000 ms
15/01/22 21:57:13 INFO JobScheduler: Total delay: 0.028 s for time 1421944033000 ms (execution: 0.013 s)
15/01/22 21:57:13 INFO MappedRDD: Removing RDD 5 from persistence list
15/01/22 21:57:13 INFO BlockManager: Removing RDD 5
15/01/22 21:57:13 INFO FileInputDStream: Cleared 0 old files that were older than 1421943973000 ms: 
15/01/22 21:57:13 INFO FileInputDStream: Cleared 0 old files that were older than 1421943973000 ms: 
15/01/22 21:57:13 INFO ReceivedBlockTracker: Deleting batches ArrayBuffer()

問題は、ディレクトリにあるファイルからデータを取得していないことです。私を助けてください。

13
Kaushal

別のディレクトリで試してから、ジョブの実行中にこれらのファイルをそのディレクトリにコピーしてください。

12
pzecevic

同じ問題がありました。これが私のコードです:

lines = jssc.textFileStream( "file:/// Users/projects/spark/test/data ');

textFileSTreamは非常に機密です。私がやったことは:

1. Run Spark program
2. touch datafile
3. mv datafile datafile2
4. mv datafile2  /Users/projects/spark/test/data

そしてそれはそれをしました。

4
matthieu lieber

パスの前にスキームを追加する必要があると思います。つまり、_file://_または_hdfs://_です。


コメントの編集を元に戻す理由:実際にはパスの「前」に追加する必要があるのは_file://_と_hdfs://_であるため、パス全体は_file:///tmp/file.txt_または_hdfs:///user/data_。構成にNameNodeが設定されていない場合、後者は_hdfs://Host:port/user/data_である必要があります。

1
tgpfeiffer

JavaDocは、関数が新しいファイルのみをストリーミングすることを提案しています。

参照: https://spark.Apache.org/docs/1.0.1/api/Java/org/Apache/spark/streaming/api/Java/JavaStreamingContext.html#textFileStream(Java.lang.String)

Hadoop互換ファイルシステムで新しいファイルを監視し、それらをテキストファイルとして読み取る入力ストリームを作成します(キーをLongWritable、値をText、入力形式をTextInputFormatとして使用)。ファイルは、同じファイルシステム内の別の場所から「移動」して、監視対象のディレクトリに書き込む必要があります。で始まるファイル名。無視されます。

0
Anil G

textFileStreamは、フォルダー内のファイルが追加または更新である場合にのみフォルダーを監視できます。

ファイルを読みたいだけの場合は、SparkContext.textFileを使用できます。

0
wzktravel

Sparkストリーミングはディレクトリ内の新しいファイルのみを読み取り、更新されたファイルは(ディレクトリ内にあると)読み取らず、すべて同じ形式である必要があることを考慮に入れる必要があります。

ソース

0
froblesmartin