Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/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
Google cloud dataflow Google云数据流工作线程_Google Cloud Dataflow_Apache Beam - Fatal编程技术网

Google cloud dataflow Google云数据流工作线程

Google cloud dataflow Google云数据流工作线程,google-cloud-dataflow,apache-beam,Google Cloud Dataflow,Apache Beam,假设我们有一个工人有4个CPU核。如何在数据流工作机中配置并行性?我们的并行化是否超过了#个内核 在哪里可以获得此类信息 对于批处理作业,每个核心使用一个工作线程,每个工作线程独立处理一块输入空间 对于流作业,每个核心可以有更多的工作线程等待输入。对于批处理作业,每个核心使用一个工作线程,每个工作线程独立处理一块输入空间 对于流作业,每个核心可以有更多的工作线程等待输入。我以前也认为数据流工作线程每个核心使用1个线程。然而,我最近发现这只适用于批处理模式。在流模式下,除非另有规定,否则它使用30

假设我们有一个工人有4个CPU核。如何在数据流工作机中配置并行性?我们的并行化是否超过了#个内核


在哪里可以获得此类信息

对于批处理作业,每个核心使用一个工作线程,每个工作线程独立处理一块输入空间


对于流作业,每个核心可以有更多的工作线程等待输入。

对于批处理作业,每个核心使用一个工作线程,每个工作线程独立处理一块输入空间


对于流作业,每个核心可以有更多的工作线程等待输入。

我以前也认为数据流工作线程每个核心使用1个线程。然而,我最近发现这只适用于批处理模式。在流模式下,除非另有规定,否则它使用300个线程,如图所示。这与当前的情况相反。要限制工作线程的数量,请使用
--numberOfWorkerHarnessThreads=N

我是如何发现这一点的: 我有一个ParDo的流媒体工作,可以读取XML文件并解析它们。工作人员内存不足,因为他们试图一次处理太多的文件。我使用静态AtomicInteger来计算ParDo的并发执行数。此外,我还记录了用于执行ParDo的threadid。我可以看到一个worker上有多达300个并发执行,记录的不同threadid的数量也表明该worker正在使用大量线程

我通过限制
--numberOfWorkerHarnessThreads=10
使用的线程数,解决了内存问题。我还尝试将该数字设置为1个线程,但这似乎导致在任何给定时间只执行一个管道步骤。这并不奇怪,但我想要更高级别的并行性,所以10对于我的用例来说似乎是个不错的数字


编辑:添加了一些额外信息。感谢@safurudin mahic找到了相关的Beam源代码。

我以前也认为数据流工作程序每个核心使用1个线程。然而,我最近发现这只适用于批处理模式。在流模式下,除非另有规定,否则它使用300个线程,如图所示。这与当前的情况相反。要限制工作线程的数量,请使用
--numberOfWorkerHarnessThreads=N

我是如何发现这一点的: 我有一个ParDo的流媒体工作,可以读取XML文件并解析它们。工作人员内存不足,因为他们试图一次处理太多的文件。我使用静态AtomicInteger来计算ParDo的并发执行数。此外,我还记录了用于执行ParDo的threadid。我可以看到一个worker上有多达300个并发执行,记录的不同threadid的数量也表明该worker正在使用大量线程

我通过限制
--numberOfWorkerHarnessThreads=10
使用的线程数,解决了内存问题。我还尝试将该数字设置为1个线程,但这似乎导致在任何给定时间只执行一个管道步骤。这并不奇怪,但我想要更高级别的并行性,所以10对于我的用例来说似乎是个不错的数字


编辑:添加了一些额外信息。感谢@safurudin mahic找到相关的Beam源代码。

1台机器有4个内核,并行度是4?谢谢,我们能在文档中找到这些信息吗?非常有帮助。我是在寻找或回答我自己稍微不同的问题时遇到这个问题的。您能否澄清一下,在本地运行数据流作业(例如,在具有8个CPU的计算引擎实例上)与在8个N1-standard-1数据流工作者上远程运行数据流作业之间是否存在差异?显然,自动缩放是一个区别,但本地与远程是否有任何优势或劣势?特别是与并行处理有关的。谢谢@VS_FF:本地运行程序主要用于实验和调试,并没有经过大量优化。除了不能使用自动缩放功能外,它还可以在内存中执行更多操作(如洗牌),并且不能扩展到几乎同样大的数据集。这个答案对于流式作业是不正确的,而且它还缺少一些参考linkSo 1 4核机器,并行度是4?谢谢,我们能在文档中找到这些信息吗?非常有帮助。我是在寻找或回答我自己稍微不同的问题时遇到这个问题的。您能否澄清一下,在本地运行数据流作业(例如,在具有8个CPU的计算引擎实例上)与在8个N1-standard-1数据流工作者上远程运行数据流作业之间是否存在差异?显然,自动缩放是一个区别,但本地与远程是否有任何优势或劣势?特别是与并行处理有关的。谢谢@VS_FF:本地运行程序主要用于实验和调试,并没有经过大量优化。除了不能使用自动缩放功能外,它还可以在内存中执行更多操作(如洗牌),并且不能扩展到几乎同样大的数据集。这个答案对于流式作业是不正确的,而且它缺少一些参考链接