我希望每M分钟处理最后N小时的数据。数据通过pubsub传输时会有各种延迟,但我不想因为时间偏差或数据延迟而延迟窗口触发。也就是说,我只想处理触发时可用的数据,并希望基于墙时间触发(但每个窗口应包括基于数据事件时间的[Triggered time-M hours,Triggered time]之间的数据)
我尝试使用滑动窗口,但触发是基于事件时间的,并且似乎由于数据延迟而延迟
最好的方法是什么
谢谢,您应该在FixedWindows中使用触发器。这将与您描述的完全一样
在数据流中将消息发布到发布/订阅主题的推荐方式是什么。
我曾经使用过客户端API,但不认为这是在数据流中处理此问题的最佳方法
PublishResponse-response=client.projects().topics()
.publish(fullTopicName、publishRequest)
.execute();
从数据流作业向PubSubTopic发布消息的最佳方法是使用PubsubIO类。例如:
Pipeline p=Pipeline.create();
//做一些变换
p、
我们在扩大使用谷歌云数据流时注意到,我们将开始在使用中的IP地址上超过我们的配额。我们知道,请求配额增加是一种选择(并且已经这样做了,并且已经被批准用于CPU),但我们想知道是否有可能(或将要)在没有外部IP地址的情况下运行数据流实例(出于配额原因和IP地址的成本).目前无法在没有外部IP地址的情况下运行Google云数据流实例。如果你需要额外的工人,你应该要求增加配额。现在可以了。从:
要关闭公共IP,请执行以下操作:
为您的网络或子网络启用专用Google访问
在云数据流作业的参数中,指定-
我找不到关于它的任何文档,所以我想知道如果输出文件已经存在(在gs://bucket中),会发生什么行为
谢谢,
G文件将被覆盖。这有几个动机:
“类似于报告”的用例(计算输入数据的摘要并将结果放在GCS上)似乎比增量生成数据并在每次执行管道时将更多数据放在GCS上的用例要频繁得多
如果重新运行管道是幂等(-ish?)的,这是很好的。例如,如果您在管道中发现一个bug,您可以修复它并重新运行它,然后享受覆盖的正确结果。在这种情况下,附加到文件的管道将很难使用
不需要为TextIO.Write指
我在使用Python SDK编写自定义接收器时遇到问题。
为了调试它,我使用了logging.info或print方法,但它不能很好地工作。
有什么好方法可以调试自定义接收器吗?您在日志记录方面遇到了什么问题
当使用Dataflow pipeline runner运行时,应该可以在云控制台中访问日志,如中所述
您还可以使用direct runner在本地执行管道,这可能会使调试更容易。在beam和data flow之外独立运行python代码,以获得预期的输入
当我运行Dataflow作业时,它会将我的小程序包(setup.py或requirements.txt)上传到Dataflow实例上运行
但是数据流实例上实际运行的是什么?我最近收到了一个stacktrace:
File "/usr/lib/python2.7/httplib.py", line 1073, in _send_request
self.endheaders(body)
File "/usr/lib/python2.7/httplib.py", line 1035, in
我有一个云数据流管道,我在其中更改事件的原始时间戳,以模拟事件延迟到达的真实场景。然而,在管道的每次运行中,我似乎都会减少一定比例的事件。在DoFn中,我使用以下代码更改时间戳:
Instant newTimestamp = originalTimestamp.minus(Duration.standardMinutes(RANDOM.nextInt(15)));
c.outputWithTimestamp(KV.of(Integer.toString(RANDOM.nextInt(100)),
我需要将管道中的主数据流(1.5TB)连接到两个不同的数据集(4.92GB和17.35GB)。我用于为这两个对象执行CoGroupByKey的键是相同的。有没有办法避免在第一次完成后重新洗牌联接的左侧?目前,我只是将输出保留为KV>。这似乎比在第一次连接后逐段发送每个元素要好,但第二个groupByKey似乎花费的时间比我预期的要长得多。我打算开始研究拆分CoGroupByKey,看看是否可以忽略分组的一侧,但我真的觉得在这一点上不降低到那个级别更安全
在处理主输入时,您是否考虑过访问较小的数据
我见过许多关于同一主题的问题。但是,我在给地面军事系统写信方面仍然有问题。我正在读pubsub的主题,并试图将其推广到GCS。我提到过。但是,在最新的beam软件包中找不到IOChannelUtils
PCollection<String> details = pipeline
.apply(PubsubIO.readStrings().fromTopic("/topics/<project>/sampleTopic"));
PCollectio
到目前为止,我们似乎只能对DoFn使用sideinput在处理每个输入行时使用sideinput
是否有任何方法可以利用TextIO.Write的输入?
就我而言
outputTuple.get(deadletterTag)
.apply("Write to deadletter files",
TextIO.write().to(String.format("gs://dataflow-xxx/deadletter/%s/", uniqueID)
我是dataflow的新手,尝试使用PubsubIO.writeStrings()to(“projects/market place sql/topics/emisions”)的apply方法时,我正在尝试向pub/sub写一些消息,它说:
[]该错误只是类型不匹配。管道类的apply()方法接受类型为pttransform的第二个参数
在dataflow SDK 2.4.0中,我曾经能够运行:
PipelineOptionsFactory.register(MyPipelineOptions.class);
MyPipelineOptions options = PipelineOptionsFactory.fromArgs(args).withValidation().create().as(MyPipelineOptions.class);
options.setRunner(DataflowRunner.class
与标题相同,Dataflow是否可以使用临时创建的VM实例而不是已经创建的实例?在询问OP请求的原因后,我将提供以下潜在答案:
数据流背后的功能是在处理数据管道时实现高度并行。原始请求的背景故事是,当作为本地运行程序运行时,“某物”正在工作,但当使用数据流作为运行程序时,它没有按预期工作。这似乎导致OP思考“我们将使用本地运行程序运行数据流”。在我看来,这不是一个好主意。一种是使用localrunner进行开发和单元测试。本地跑步者不提供任何形式的水平缩放。。。它实际上只在一台机器上运行
当在分
我们正在使用ApacheBeam,希望设置logback MDC。logback MDC是一个很好的资源,当您收到一个请求并存储一个用户ID(在我们的例子中,它是custId、fileId、requestId)时,那么每当开发人员登录时,它就会神奇地将该信息标记到开发人员日志中。开发人员不再忘记在每次添加日志语句时添加它
我从一个端到端的集成类型测试开始,该测试将apache beam direct runner嵌入到我们的微服务中进行测试(在生产中,微服务调用数据流)。目前,我看到在调用exp
在将实体写入数据存储时,如何在apache beam数据存储api中为数据存储指定名称空间?我看到ApacheBeamSDK api有DataStoreIO.v1.read().withNamespace()。在写入数据存储时,我们如何指定名称空间?我没有看到DataStoreIO.v1.write().withNamespace()
当运行使用DataflowAssert的DataFlowUnitTest时,我会得到异常
java.lang.RuntimeException: DataflowAssert requires that JUnit and Hamcrest be linked in.
要修复此异常,我需要向pom文件中添加哪些依赖项?将以下依赖项添加到pom文件中,以链接到所需的库中
<dependency>
<groupId>junit</groupId>
<
我有一个连接到pub/sub的流媒体管道,发布GCS文件的文件名。从那里我想读取每个文件并解析出每行上的事件(这些事件是我最终想要处理的)
我能用TextIO吗?当文件名在执行过程中定义时,您是否可以在流式管道中使用它(与使用TextIO作为源和文件名在构造时已知不同)。如果没有,我想做如下事情:
从pub/sub获取主题
ParDo读取每个文件并获取行
处理文件的行
在本例中,我可以使用FileBasedReader或类似的工具来读取文件吗?文件不是太大,所以我不需要并行读取单个文件,但我需要
我正在尝试使用Dataflow删除数百万个数据存储实体,速度非常慢(5个实体/秒)。我希望你能向我解释一下我应该遵循的模式,让它以合理的速度发展。仅仅增加更多的工人并没有帮助
数据存储管理控制台能够删除特定类型的所有实体,但它失败很多,并且需要一周或更长时间才能删除4000万个实体。Dataflow应该能够帮助我删除数百万只匹配某些查询参数的实体
我猜应该采用某种类型的批处理策略(例如,我创建了一个包含1000次删除的变异),但我并不清楚我将如何处理。DatastoreIO一次只提供一个实体供我
我写了一个DoFn,输出一个集合。
当我执行管道时,我得到异常
Caused by: com.google.cloud.dataflow.sdk.util.IllegalMutationException: DoFn UnmarshalGcsPath mutated value
[SectionBodyRecord{txId='3UR93528NX413902J'},
SectionBodyRecord{txId='15N97640P5806660M'},
Section
我已尝试以最精确的方式遵循此文档:
请查看以下我的代码:
public static void main(String args[])
{
DataflowPipelineOptions options=PipelineOptionsFactory.as(DataflowPipelineOptions.class);
options.setTempLocation("gs://balajee_test/stagging");
options.setProject(
我有一个数据流管道试图构建一个索引(键值对)并计算一些度量(比如每个键的值的数量)。输入数据总计约60 GB,存储在地面军事系统上,管道中分配了约126名工作人员。每个Stackdriver,所有工人的CPU利用率约为6%
尽管有126名工人,但管道似乎没有取得任何进展,根据墙壁时间,瓶颈似乎是一个简单的计数步骤,然后一组接一组。虽然所有其他步骤平均花费不到1小时,但计数步骤已经花费了50天的时间。日志中似乎没有关于所有警告的有用信息
计数步骤是按照WordCount示例中的相应步骤执行的:
d
我正在尝试使用GCP Memorystore处理在GCP数据流上运行的事件流作业的会话ID。尝试连接到Memorystore时,作业失败并超时:
redis.clients.jedis.exceptions.JedisConnectionException: Failed connecting to host 10.0.0.4:6379
at redis.clients.jedis.Connection.connect(Connection.java:207)
at redis.
没有一个提供的数据流模板与我需要做的匹配,所以我尝试编写自己的模板。我成功地运行了像word count示例这样的示例代码,没有任何问题,所以我尝试将从BigQuery读取和写入Panner的独立示例分割在一起,但源代码中有太多东西我不理解,无法适应我自己的问题
我真的迷路了,非常感谢您的帮助
目标是使用DataFlow和Apache Beam SDK读取包含3个字符串字段和1个整数字段的BigQuery表,然后将3个字符串字段的内容连接成一个字符串,并将该新字符串放入名为“key”的新字段中,
我是Apache Beam的新手,尝试使用DirectRunner和DataflowRunner运行一个示例读写程序。在我的用例中,很少有CLI参数,为了实现这一点,我创建了一个接口“CustomOptions.java”,它扩展了PipelineOptions
使用DirectRunner,程序运行正常,但使用DataflowRunner时,会显示“接口CustomOptions缺少名为“project”的属性”
pom.xml
<dependencies>
<dep
我想安排数据流sql作业。这是我的gcloud命令
gcloud数据流sql查询“我的选择查询”--作业名称dfsql-2d7a0189-177fc4f9444--区域us-east4--bigquery写入处理写入截断--bigquery项目开发dp myproject--bigquery数据集mydataset--bigquery表mytable--服务帐户电子邮件数据流运行
@myserviceaccount.iam.gserviceaccount.com--子网
如何安排此gcloud命
我有一个TFX管道在GCP AI平台管道中运行(托管Kubeflow)。它正常运行了一段时间,但在BigQuery ExampleGen步骤中突然停止正常工作
BQ ExampleGen利用数据流从BQ读取数据并保存到TreRecords。数据流作业启动但没有执行任何操作-它在启动/准备工作人员期间被卡住
工作日志显示python依赖项是使用pip安装的。问题是,pip不断下载同一软件包的不同版本以解决依赖冲突,但它没有显示冲突是什么。
我已经在worker VM启动时连接到它,但它没有显示pi
我正在处理这个场景:
在Google云存储中,我的文件存储在以下结构中:
PS*:这两个文件在同一个文件夹中(这是一个缩进错误)
我想做的是:
1] 阅读每天的2个文件“client_info.csv”+“client_events.csv”
2] 基于每个文件中的公共列联接列,以获得1个pcollection
3] 进行转换
4] 将数据加载到bigquery
我写了一个只从一个日期开始读取的代码,它运行得很好,但我无法解决所有日期的迭代部分
如果您有任何建议,请提供。 < P>一个解决方案
我想用除默认行分隔符之外的行分隔符读取csv文件。每个csv记录跨越多行,因此TextIO.Read不够
我应该扩展FileBasedSource还是存在任何现有的CSVBBasedSource(带有自定义行/字段分隔符)
我在查看splitIntoBundles()api时,XmlSource没有覆盖isSplittable(),因此可以将其拆分为多个捆绑包,我想知道XmlSource是如何处理这一点的,因为拆分可以发生在a的中间,因为拆分只基于desiredBundleSize 这是正确的,
我们有一个Beam/Dataflow管道(使用Dataflow SDK 2.0.0-beta3&在GCP上运行),它使用模板功能。每当我们运行它时,它总是发出以下警告:
11:05:30,484 0 [main] INFO org.apache.beam.sdk.util.DefaultBucket - No staging location provided, attempting to use default bucket: dataflow-staging-us-central1-
我现在正在实现一个在Dataflow上运行的Apache beam应用程序,它使用来自Cloud PubSub的数据,转换数据的格式,并将结果发送到另一个Cloud PubSub。它加载流数据的定义,流数据描述键的名称和类型以及每个数据应如何转换。定义存储在GCS中,并在应用程序启动时加载
我的问题是更新定义和通知数据流上运行的每个pttransform对象的更改的方法。有可能在网上这样做吗?还是我们必须耗尽并重新创建数据流应用程序
有没有一种方法可以设置一个只在窗格完成时触发一次的触发器?我所说的“完整”是指水印超过窗口的末尾加上任何允许的延迟。我不想在那之前触发任何中间触发器。
我目前试图“伪造”此行为的方法是设置。withAllowedLateness(Duration.standardHours(1),ClosingBehavior.FIRE\u ALWAYS)),然后通过检查if(c.pane().isLast()){…
或者更准确地说,大致如下:
Pipeline p = Pipeline.create(Pipe
有没有一种方法可以在ApacheBeam中将side输入应用于BigQueryIO.read()操作
例如,假设我在PCollection中有一个值,我想在查询中使用该值从BigQuery表中获取数据。这是否可以使用侧面输入?还是应该在这种情况下使用其他方法
我在类似的情况下使用了NestedValueProvider,但我想只有当某个值取决于我的运行时值时,我们才能使用它。或者我可以在这里用同样的东西吗?如果我错了,请纠正我
我尝试的代码:
Bigquery bigQueryClient =
在我的管道中,我希望根据先前转换的结果将消息输出到PubSub主题之一。目前,我正在向同一主题发送输出:
SearchItemGeneratorOptions=PipelineOptions工厂.fromArgs(args).withValidation().as(SearchItemGeneratorOptions.class);
Pipeline p=Pipeline.create(选项);
p、 应用(…)
//其他转换
.apply(“ParseFile”,new ParseFile()
我正在尝试使用ApacheBeam(JavaSDK)(专门针对Google Cloud的Dataflow runner)来评估一个有点复杂的状态机工作流
具体来说,我想利用有状态处理和计时器,如本文所述:
在查看数据流时,它表示:
计时器:“数据流支持非合并窗口中的计时器”。好的,很好
有状态处理:
“非合并窗口支持状态”。好的
SetState和MapState还不受支持。“嗯……这听起来像个问题。我不清楚支持什么,以及博客文章中的方法是否需要SetState和MapState
因此
我有一个现有的BEAM管道,它正在处理通过2条路径摄取的数据(来自Google Pubsub主题)。“热”路径执行一些基本转换并将其存储在数据存储中,“冷”路径执行固定的每小时窗口,以便在存储之前进行更深入的分析
到目前为止,管道一直运行良好,直到我在发布到Pubsub之前开始对数据进行一些本地缓冲(因此数据到达Pubsub可能会晚几个小时)。引发的错误如下所示:
java.lang.IllegalArgumentException: Cannot output with timestamp 2
我有一个项目,它有一个ApacheBeam管道,依赖项的设置方式必须使用PubSub的0.20.0-beta版本。
此管道一直在运行(无边界)
[+]问题:
PubSub消息大约每30分钟重复一次
[+]我所尝试的:
我读过很多解决方案,其中提到了Dataflow runner是如何设置检查点的,在这些检查点中进行确认的。我还了解到,使用诸如GroupByKey之类的PTTransform可以更快地确认这些消息。因此,我尝试了按键打开窗口、触发和分组,但我仍然从PubSub重复收到消息
[+]问
我正在为一家电子商务公司设计一个篮子丢弃系统。系统将根据以下规则向用户发送消息:
30分钟内用户在站点上没有交互
已经向篮子中添加了价值超过50美元的产品
尚未完成交易
我使用谷歌云数据流来处理数据,并决定是否应该发送消息。我有以下几种选择:
使用持续时间为30分钟的滑动窗口
具有延时30分钟的基于时间的触发器的全局窗口
我想这里可以用推拉窗。但我的问题是,对于这个用例,是否有一个基于全局窗口和基于处理时间的触发器以及延迟的解决方案?
据我所知,基于Apache Beam文档的触发器=>
触
我正在尝试使用DataflowTemplateOperator从气流DAG运行数据流作业
我的数据流作业基于从GoogleCloudDataPrep作业生成的模板,该作业读取GCS文件并将其加载到BigQuery表中。
此数据流作业从Dataprep启动时运行正常,但在气流中启动时失败,错误如下:
java.lang.NullPointerException
at java.util.regex.Matcher.getTextLength(Matcher.java:1283)
at java.u
我们之前运行的是Beam 2.11.0,由于URN格式的明显变化,它开始失败。当我尝试更新和使用最新版本(2.13.0)时,管道开始超时,在测试期间,我从日志中发现的唯一看似相关的错误是:
> Ap.ApCh.BeAM.VAND.Pr.V1P13P1.COM.GoGoL.TyfBuff.ValuePrimuloBuffelExtExc:当解析协议消息时,输入在字段的中间意外终止。这可能意味着输入被截断,或者嵌入的消息误报了自己的长度。
为了进一步测试这一点,我尝试使用Beam docs/rep
我在数据流管道中有3个数据流步骤
从pubsub读取,保存在表中,并拆分为多个事件(放入上下文输出)
对于每个拆分,查询db并使用其他数据装饰事件
发布到另一个pubsub主题以进行进一步处理
问题:
在步骤1之后,将其拆分为10K到20K事件
现在,在步骤2中,它的数据库连接已用完。(我有一个静态hikari连接池)
它工作非常好,将减少数据量。我使用的是n1-standard-32机器
我应该如何将输入限制到下一步?因此,并行性将受到限制或限制事件进入下一步。我认为基本思想是在执行步骤2时降
我们在批处理模式下使用数据流已有一段时间了。然而,我们似乎找不到太多关于其流媒体模式的信息
我们在以下用例中提供了一个示例:
数据/事件被实时传输到BigQuery中
在分析之前,我们需要对数据进行转换/清理/反规范化
生意
现在,我们当然可以在批处理模式下使用数据流,从BigQuery(基于时间戳)中获取数据,并以这种方式对其进行转换/清理/反规范化
但这是一个有点混乱的方法,特别是因为数据是实时流式传输的,它可能会很难确定需要处理哪些数据。听起来也很脆弱
如果我们可以简单地在数据流中转换
使用PubsubIO.Read作为源,在批处理模式下运行数据流管道时遇到问题。我尝试使用.maxNumRecords和.maxReadTime使其成为一个有界集合。但是,我的工作挂起在读取步骤上,并且出现套接字超时异常。只有在作业运行时将消息发布到主题时,它才会处理排队的消息。我的印象是,如果我为管道指定订阅,它将处理启动时丢失的任何消息。我正在使用Dataflow SDK 1.9 for Java。下面是我的代码片段
AuditPipelineOptions options = Pipelin
升级到Beam 2.0后,管道类不再具有getOptions()类。
我有一个复合p转换,它依赖于在itsexpand方法中获取选项:
public class MyCompositeTransform extends PTransform<PBegin, PDone> {
@Override
public PDone expand(PBegin input) {
Pipeline pipeline = input.getPipeline();
我们从中提到的示例中了解了。这到底意味着什么?阅读数据流中有关窗口的相关数据可能是值得的。滑动时间窗口还使用数据流中的时间间隔来定义数据束;但是,使用滑动时间窗口时,窗口重叠。每个窗口可能捕获五分钟的数据,但新窗口每十秒钟启动一次。滑动窗口开始的频率称为周期。
更多详细信息可从“窗口”文档“滑动时间窗口”子章节中获取 在数据流中读取有关窗口的相关数据可能是值得的。滑动时间窗口还使用数据流中的时间间隔来定义数据束;但是,使用滑动时间窗口时,窗口重叠。每个窗口可能捕获五分钟的数据,但新窗口每十秒钟启
虽然我使用的是2.2:
注意:默认情况下,PubsubIO转换创建无边界的pcollection。使用PubsubIO.Read创建PCollection后,在应用对元素进行分组的任何转换(如GroupByKey或Combine)之前,应该对该PCollection应用窗口策略
所以,如果我不需要使用分组转换,那么在使用PubsubIO.Read时是否不需要应用窗口
如果我使用分组转换,但没有指定窗口,会发生什么?是否有默认应用于PubsubIO.Read的默认窗口
默认的窗口策略是使用所有元素
到目前为止,我一直在处理ApacheBeam中的一个场景,其中给定了特定的HTTP代码,我可能会保留元素以在下一次迭代中重新启动
我们已经用内部代码实现了这一点,只使用了一个时间触发器
.apply(
"Sample Window",
Window.into(FixedWindows.of(Duration.standardMinutes(1)))
.triggering(AfterProcessin
我想为我运行的每个google dataflow作业定制作业名称和作业Id。我要为作业创建自定义的作业名称
但我无法设置自定义的工作id
我发现了一个com.google.cloud.dataflow.sdk.options.dataflowworkerharnesspoptions接口,它有一个方法setJobId(字符串值)。但我无法使用它来创建自定义的作业id
有没有办法创建自定义作业Id?作业Id是作业的数据流服务标识符,必须是全局唯一的,因此该服务不允许用户选择一个。您可能需要配置作业
我有两个p-Collection,如下所示
P1 = ['H','E','L','L','O','W','O','R','L','D']
P2 = ['W','E','L','C','O','M','E']
我想从第一个集合中排除元素,如果它存在,则从第二个集合中排除元素以获得下面的结果
Result = ['H','R','D']
优化和快速的方法是什么?使用CombinePerKey:
Python:
爪哇:
将P1和P2转换为元组,如下所示:
代码:
将两个p-集合放在一起
将展平的
下面是我用来向BigQuery写入数据的代码
WriteResult result = formattedData.get(successRows).setCoder(TableRowJsonCoder.of())
.apply("BQ SteamingInserts",BigQueryIO.writeTableRows()
.withMethod(BigQueryIO.Write.Method.STREAMING_INSERTS)
我已经在slf4j上配置了logback。但是json格式的日志消息在DataFlowRunner中不起作用。DirectRunner中也起作用。您好,您能在此扩展一下您的用例吗?当GCP已经通过云日志和Stackdriver API提供此类服务时,您似乎正在尝试使用自己的第三方日志框架logback。示例日志和一些配置将非常有用。
上一页 1 2 3 4 5 6 ...
下一页 最后一页 共 30 页