Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.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/5/date/2.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
Java Databricks Spark参考应用程序:在Spark流中使用静态变量进行状态维护_Java_Apache Spark_Spark Streaming - Fatal编程技术网

Java Databricks Spark参考应用程序:在Spark流中使用静态变量进行状态维护

Java Databricks Spark参考应用程序:在Spark流中使用静态变量进行状态维护,java,apache-spark,spark-streaming,Java,Apache Spark,Spark Streaming,第节提到使用静态变量来维护: 运行计数 runningSum 润宁民 runningMax 我的理解是:在分布式模式下,数据流:contentSizeDStream(一个无限系列的RDD)将被分割并分布在多个工作进程中进行处理,每个工作进程将拥有自己的静态变量副本(runningCount…runningMax) 问:静态变量如何帮助维护状态? 代码段: JavaDStream<Long> contentSizeDStream = accessLogDStream.map(Apa

第节提到使用静态变量来维护:

  • 运行计数
  • runningSum
  • 润宁民
  • runningMax
我的理解是:在分布式模式下,数据流:
contentSizeDStream
(一个无限系列的RDD)将被分割并分布在多个工作进程中进行处理,每个工作进程将拥有自己的
静态变量副本(runningCount…runningMax)

问:静态变量如何帮助维护状态?

代码段:

JavaDStream<Long> contentSizeDStream =
accessLogDStream.map(ApacheAccessLog::getContentSize).cache();
contentSizeDStream.foreachRDD(rdd -> {
if (rdd.count() > 0) {
runningSum.getAndAdd(rdd.reduce(SUM_REDUCER));
runningCount.getAndAdd(rdd.count());
runningMin.set(Math.min(runningMin.get(), rdd.min(Comparator.naturalOrder())));
runningMax.set(Math.max(runningMax.get(), rdd.max(Comparator.naturalOrder())));
System.out.print("Content Size Avg: " + runningSum.get() / runningCount.get());
System.out.print(", Min: " + runningMin.get());
System.out.println(", Max: " + runningMax.get());
}
return null;
});
JavaDStream contentSizeDStream=
accessLogDStream.map(ApacheAccessLog::getContentSize).cache();
contentSizeDStream.foreachRDD(rdd->{
如果(rdd.count()>0){
运行SUM.getAndAdd(rdd.reduce(SUM_REDUCER));
运行count.getAndAdd(rdd.count());
set(Math.min(runningMin.get(),rdd.min(Comparator.naturalOrder());
runningMax.set(Math.max(runningMax.get(),rdd.max(Comparator.naturalOrder());
System.out.print(“平均内容大小:”+runningSum.get()/runningCount.get());
System.out.print(,Min:+runningMin.get());
System.out.println(,Max:+runningMax.get());
}
返回null;
});

虽然
DStream
表示分布式流数据,但这些操作揭示了一个多级抽象:应用于元素的操作,例如
map
filter
,以及它们的经典好友都分布在集群中操作。 在上面的代码中,
accessLogDStream.map(ApacheAccessLog::getContentSize)
就是一个例子
contentSize
将应用于
accessLogDStream
的元素

然后,我们有应用于
RDD
s的操作,例如
transform
foreachRDD
。它们对底层RDD抽象进行操作。这些操作的闭包中的代码附加到SparkStreaming调度程序,并在驱动程序上执行,而不是分发。然而,由于它们提供了对
RDD
的访问,我们仍然可以对RDD应用分布式操作,并将结果应用到单个驱动程序上下文

回到示例代码,
runningCount
是驱动程序上下文的局部变量。当我们执行
运行count.getAndAdd(rdd.count())时
我们在
rdd
上有效地应用了分布式
count
操作,将所有分区和执行器上的合计计数收集到驱动程序上,然后将该数字添加到本地上下文中的
runningCount
的值中

这样,流式处理程序就可以集中地汇总分布在集群中的数据,其他对流式处理作业的结果感兴趣的应用程序可以进一步使用这些数据