Как лучше всего объединить Apache Spark DStream с stati c записями данных из файла последовательности HDFS? - PullRequest
0 голосов
/ 03 февраля 2020

Моя цель - контролировать ввод пользователя с помощью SparkStreaming. Пользователь вводит DStream и является просто ключом к записи данных (короткая строка). Программа должна отфильтровать и прочитать набор данных stati c (очень большой RDD, bigRDD) из файла последовательности HDFS (одна запись 30 МБ, весь набор данных составляет около 10 000 записей) по введенному пользователем значению ключа. Затем программа вычисляет bigRDD и возвращает пользователю записи результатов (по 30 МБ каждая). Я надеюсь, что расчет bigRDD будет как можно более локально распределен, чтобы избежать передачи данных по сети, и использовать persist для сокращения времени ввода-вывода жесткого диска. Как должны быть разработаны конкретные c шаги? Я пытался:

JavaStreamingContext jsc = new JavaStreamingContext(...) ;
JavaDStream<String> lines = jsc.socketTextStream(...) ;
seqRDD = jsc.sparkContext().sequenceFile(...);// RDD from sequence file can not cache.
bigRDD = pairRdd.mapToPair(...) ;// bigRDD is used for cache.
bigRDD.cache() ;
inputDStream = lines.mapToPair(...) ; // convert DStream<string> to PairDStream<string,string> for join.
inputDStream.foreachRDD (inputRdd-> {
  bigRDD2 = inputRdd.join(bigRDD);
  resultRDD = bigRDD2.map( ... do calculation ... );
  send_result_to_user(resultRDD) ;
})

Но я не знаю, подходят ли эти шаги?

1 Ответ

0 голосов
/ 09 февраля 2020

Я попытаюсь транслировать данные из DStream.RDD.collection () для каждого пакета и использовать RDD mapPartitions для обработки данных.

...