我编写了一个spark流式项目,使用saveAsNewAPIHadoopFile forEachRDD将输出记录到文件中。但是这个操作非常慢。如果我评论将输出保存到文件,我可以每分钟处理1000个事件,这个保存输出到文件我每分钟只能处理250个事件。 我的代码非常简单,只有这两行。
if (rdd !=null && !rdd.isEmpty() && !rdd.partitions().isEmpty()) {
String file =3D getOutputLocation(contextVal.getString(FEATURE_SCORE_OU=
TPUT_LOCATION));
rdd.saveAsNewAPIHadoopFile(file, Text.class, Text.class, outputFormatCl=
ass);
}
有什么方法可以改善性能。我应该在内存或HBase或某处收集数据,然后在我们有足够的数据后执行一次登录HDFS吗?如果我有一个庞大的数据,我想将输出记录到HDFS,那么建议是什么?如果我记录DStream的每个RDD,那么它非常慢。我应该收集每个分区的数据然后记录。无法找到在进行流处理时有效地将数据记录到HDFS的推荐方法。