Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.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_Spark Streaming - Fatal编程技术网

Apache spark 如何提高性能节省火花流输出

Apache spark 如何提高性能节省火花流输出,apache-spark,spark-streaming,Apache Spark,Spark Streaming,我已经编写了一个spark流项目,它使用saveAsNewAPIHadoopFile forEachRDD将输出记录到一个文件中。但是这个操作非常慢。如果我将输出保存到一个文件中,我可以每分钟处理1000个事件,而将输出保存到一个文件中,我每分钟只能处理250个事件。 我的代码非常简单,只有这两行 if (rdd !=null && !rdd.isEmpty() && !rdd.partitions().isEmpty()) { String file =

我已经编写了一个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,那么建议是什么?如果我记录数据流的每个HRDD,那么它的速度非常慢。我应该为每个分区收集数据,然后记录日志吗。在进行流处理时,找不到有效地将数据记录到HDFS的推荐方法。

我认为您不能简单地通过缓存RDD来节省时间。序列化和反序列化以及DB查询是非常昂贵的操作。这就是Spark使用轻量级Kryo序列化快速移动对象的原因之一。谢谢您的回复。我已经将Kryo配置为默认序列化。但在这里,我只是为每个数据流将字符串保存到HDFS,这对于每次输出写入来说非常昂贵。为什么要保存多次,我看不出每次处理其中一个数据流时将RDD保存到HDFS有什么好处。您在这里实际想要实现什么?我们正在从Kafka流获取数据,我们正在对该数据进行一些处理,并将输出记录在HDFS中。请尝试在数据流而不是rdd上执行saveAsNewAPIHadoopFile。我要说的第二件事是阅读关于使用foreachRDD的设计模式,我认为仅仅通过缓存RDD并不能节省时间。序列化和反序列化以及DB查询是非常昂贵的操作。这就是Spark使用轻量级Kryo序列化快速移动对象的原因之一。谢谢您的回复。我已经将Kryo配置为默认序列化。但在这里,我只是为每个数据流将字符串保存到HDFS,这对于每次输出写入来说非常昂贵。为什么要保存多次,我看不出每次处理其中一个数据流时将RDD保存到HDFS有什么好处。您在这里实际想要实现什么?我们正在从Kafka流获取数据,我们正在对该数据进行一些处理,并将输出记录在HDFS中。请尝试在数据流而不是rdd上执行saveAsNewAPIHadoopFile。我要说的第二件事是阅读关于使用foreachRDD的设计模式