哪个是Apache Spark DStream与HDFS序列文件中的静态数据记录联接的最佳方式?

问题描述 投票:-1回答:1

我的目标是使用SparkStreaming监视用户输入。用户的输入是DStream,仅是数据记录(短字符串)的键。该程序需要过滤并通过用户输入的键值从HDFS序列文件(单个记录30MB,整个数据集约为10,000条记录)中读取静态数据集(非常大的RDD,bigRDD)。然后,程序将计算bigRDD,并将结果记录(每个记录30MB)返回给用户。我希望bigRDD的计算将尽可能地在本地分发,避免在网络上传输数据,并坚持使用以减少硬盘IO时间。具体步骤应如何设计?我尝试过:

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) ;
})

但是我不知道这些步骤是否合适?

apache-spark hdfs streaming sequence
1个回答
0
投票

我将尝试每批从DStream.RDD.collection()广播数据,并使用RDD mapPartitions处理数据。

© www.soinside.com 2019 - 2024. All rights reserved.