我们尝试使用dataflow的处理时间独立性来启动新的流媒体作业,并通过发布/订阅将所有数据重播到其中,但遇到以下问题:
管道的第一阶段是事务id上的groupby,会话窗口为10秒,丢弃已触发的窗格,不允许延迟。因此,如果我们没有指定replay pub/sub主题的时间戳标签,那么当我们将所有事件时间戳重播到pub/sub中时,所有事件时间戳都是相同的,groupby会一直尝试将所有存档数据分组到事务id中。不好
如果我们将timestampLabel设置为存档数据中的实际事件时间戳,并在发
我在CloudShell中设置了一个GoogleCloud项目,并尝试运行此教程脚本
遇到以下错误:
***@***:~/git/cloudml-samples/flowers$ ./sample.sh
Your active configuration is: [cloudshell-4691]
Using job id: flowers_***_20170113_162148
python trainer/preprocess.py \
--input_dict "$DICT_
我有一个ParDo转换,在其中我正在进行一个阻塞web服务调用来获取一些数据。回电话需要一段时间(大约1分钟)。我观察到,即使在相当大的PCollection上调用,此ParDo变换也不会进行太大的缩放(我使用的是自动缩放模式)。也许这是因为只有在CPU/内存使用率很高的情况下才会进行扩展,在我的例子中,CPU/内存消耗可能很低,因为大部分时间都花在等待网络调用返回上。最终的结果是,由于不会发生伸缩,因此只会并行发出少量http请求,并且作业需要更长的时间才能完成。关于如何改善这种情况,有什么想
我正在尝试使用这个过程:
导出我的bigtable进行备份。我尝试了bigtable梁导入版本1.1.2和1.3.0,但没有成功。该程序似乎能正确地启动数据流,但无论我使用什么设置,工人似乎永远不会被分配到工作中。日志总是说:
Autoscaling:根据当前正在运行的步骤的进度,将工作人员数提高到0。
然后它就挂了,工人永远也得不到分配。如果让它运行,日志会显示:
2018-03-26(18:15:03)工作流失败。原因:数据流似乎被卡住。工作流失败。原因:数据流似乎被卡住。您可以在以下位
试图通过运行《谷歌云数据科学》一书中的一个示例来测试谷歌数据流。代码可在此处找到:
以下是提交结果:
(venv) ➜ simulate git:(master) ✗ python df06.py -p gcp-datascience-book -b ds-book-admix -d airports
Correcting timestamps and writing to BigQuery dataset airports
/Users/Yoda/Documents/google_datas
我有一个数据流工作没有进展,或者进展非常缓慢,我不知道为什么。我如何开始调查作业为何缓慢/停滞?您应该检查的第一个资源是数据流文档。检查以下各项应该很有用:
如果这些资源没有帮助,我将试着总结一下您的工作可能被卡住的一些原因,以及如何调试它。我将根据系统的哪个部分导致故障来区分这些问题。你的工作可能是:
作业在启动时卡住
作业可能会在数据流服务接收时卡住,或者启动新的数据流工作程序。这方面的一些风险因素包括:
您是否添加了自定义setup.py文件
您是否有任何依赖项需要在worke
背景:我正在流模式下使用gcpdataflow()来处理信息。数据流通过发布/订阅从GAE端点接收数据。我正在使用apache beam包装器函数进行订阅-
beam.io.ReadFromPubSub(…)。数据流始终在运行,发布/订阅正在等待新数据
问题:我注意到,几天后(没有固定的天数模式),它会停止接收任何消息。GAE中的发布部分工作正常,因为我可以看到返回给我的消息Id
疑难解答:当我重新启动数据流(通过克隆)时,它再次工作
嫌疑犯:因为我依赖beam的api,所以我不确定下面发生了什
我是否总是保证每个GCE实例正好有一个dataflow worker JVM,或者我是否会在调度器在单个GCE实例上启动多个JVM的情况下结束—例如,如果可能有许多转换准备运行,但运行它们的GCE实例相对较少?数据流服务无法保证每个GCE实例的工作JVM数量
在当前实现中,每个VM有1个工作进程。工作进程实际上在Docker容器中运行,该容器提供了与主机上其他进程的某种隔离
为了更好地利用多核虚拟机,每个虚拟机的工作人员数量很可能在未来发生变化
类似地,现在我们在JVM中使用一个线程来处理工作
我们正在实现一个相当复杂的管道,它由几个GroupBy和Combine链接在一起组成。除此之外,管道还应用了KeyedPCollectionTuple
此管道成功执行,但该图未显示在Google开发者控制台中。只显示日志。
这些步骤也不见了
有什么方法可以让它们显示吗?这是因为如果任何转换的指定名称为空,则无法显示图形
Github问题就是为了解决这个问题而创建的
同时,查看您的代码,确保对.apply(name,transform)的任何调用都不会有空的名称字符串,或以/字符开头的名称。还要确
假设我有一系列问题更新和用户更新。流包括每种类型实体的“创建”消息。问题通过提问者id与用户相关
典型的问题更新看起来像{qid:3类型:“创建”,提问者id:5},{qid:3类型:“注释”}
典型的用户更新看起来像{uid:5类型:“更新”状态:“CA”},{uid:5类型:“更新”状态:“TX”}
我想要一个最后的问题事实数据集,看起来像{ts:xqid:3注释:1用户状态:“TX”},在问题“Create”事件发生后,每个问题更新和用户更新都有一个条目
实现这一点的方法是使用两个pcol
我想使用GoogleCloudDataflow创建会话窗口,如中所述。我想将未绑定的数据发送到Pub/Sub,然后以流式方式在云数据流中读取它。我想使用大超时的会话窗口(30分钟到120分钟)
我的问题是:
1) 如果数据流进程失败会发生什么
2) 我是否丢失了windows中存储的所有尚未超时的数据
3) 数据流提供了什么恢复机制
例如:
假设我有一个30分钟超时的会话窗口,它会触发每分钟的累积处理时间。假设这个值是一个整数,我只是对窗口中的所有值求和。假设这些键值对来自Pub/Sub:
7
我在流模式下通过pubsub接收到数据流消息(这是我所需要的)。
每条信息应存储在GCS中自己的文件中。
由于TextIO.Write中不支持无界集合,我尝试将PCollection划分为每个包含一个元素的窗口。
并将每个窗口写入谷歌云存储
这是我的密码:
public static void main(String[] args) {
DataflowPipelineOptions options = PipelineOptionsFactory.create()
将数据流依赖项添加到项目中。该项目已构建,但在启动(使用jetty)时,我得到一个运行时异常
<dependency>
<groupId>com.google.cloud.dataflow</groupId>
<artifactId>google-cloud-dataflow-java-sdk-all</artifactId>
<version>1.9.0</versi
可以通过以下方式使用数据流读取云存储上未列出的JSON文件:
p.apply("read logfiles", TextIO.Read.from("gs://bucket/*").withCoder(TableRowJsonCoder.of()));
如果我只想在BigQuery中使用最少的过滤来编写这些日志,我可以使用如下的DoFn:
private static class Formatter extends DoFn<TableRow,TableRow> {
我们的数据流作业从GS文件夹中读取两个文本文件,对其进行转换,并在将其写入BigQuery数据集之前将其合并,但在合并步骤之前失败,原因是:
无法将输出文件从gs://xxx重命名为gs://xxxx
似乎在合并开始之前已删除临时文件?发现问题!
两个FlatMap函数中的一个因数据格式错误而失败。提示其他任何遇到类似问题的人:首先使用DirectRunner调试所有map/pardo/etc函数 您可以共享您的管道代码吗?您使用的是哪个版本的Dataflow SDK?你写的GCS桶上有任何TT
我正在寻找一种方法来扫描巨大的Google BigTable,并根据事件动态组合过滤器,对大量行进行批量更新/删除
目前,我正在尝试将BigTable与基于java的数据流结合起来,以增强无服务器计算能力。我已经到了可以使用基于事件的动态过滤器组合扫描对象的地步,但仍然找不到将结果从CloudBigtableIO.read流式传输到后续数据流管道的方法
感谢您的建议。请从开始延长您的DoFn。这将允许您访问getConnection方法。您将执行以下操作:
try(Connection c =
我正在尝试将类序列化到ApacheBeam中的Avro(在数据流上)
我有一个类要写到Avro,它使用Joda DateTime属性作为逻辑类型timestamp millis
在Beam之外,我将通过注释属性来映射它
class Event {
@AvroSchema("{\"type\": \"long\", \"logicalType\": \"timestamp-millis\"}")
DateTime dt;
// ...
}
然后打电话
// MyTimestampC
我使用Scio编写了一个ApacheBeam作业,目的是为传入的数据记录生成会话ID,然后以某种方式对它们进行充实,然后再将它们输出到BigQuery。代码如下:
val measurements=sc.customInput(“ReadFromPubsub”,
PubsubIO
.ReadMessagesWithatAttributes()
.withTimestampAttribute(“ts”)
.fromSubscription(订阅)
)
测量
.map(提取测量).flatMap{
检测到数据流作业作为僵尸成功后,气流作业失败
我使用python DataflowTemplateOperator运行由外部气流实例触发的每小时数据流作业。每周有几次,数据流对状态ping完全没有响应。当我实时捕获错误并尝试在GCP UI中查看数据流作业的状态时,尽管我有网络连接并且能够查看GCP站点上的其他页面,但该页面不会加载。几分钟后,一切恢复正常工作秩序。这似乎发生在作业运行结束时或工人关闭时。数据流作业不会失败,也不会报告任何错误。Airflow认为它们失败了,因为当数据流变得无响应时
动态工作再平衡将以最佳方式将工作分配给工人,其中融合将折叠执行图,使图更小,意味着涉及的工人更少。动态工作再平衡如何帮助融合,即使存在融合,工作分配也能以最佳方式进行?例如,如果fused worker因为映射步骤中发生的扇出而挣扎。从逻辑上讲,应该有更多的工人参与,但图表是融合的。在这种情况下,动态工作再平衡还能起作用吗 当扇出步骤融合时,建议在扇出后断开融合。通过向管道中添加一个操作,强制云数据流服务实现中间PCollection,可以防止这种融合。例如,您可以在第一个ParDo之后插入Gr
我想加载流数据,然后添加一个键,然后按键计数
问题:
Apache Beam Dataflow pipline在尝试使用流方法(无界数据)按键加载和分组大数据时出现内存错误
. 因为数据似乎是在group by中累积的,并且它不会在触发每个窗口之前触发数据
如果我减少元素的大小(元素数量不会改变),它会工作!因为实际上,按步骤分组等待所有数据分组,然后触发所有新的窗口数据
我用这两种方法进行了测试:
beam版本2.11.0和scio版本0.7.4
beam版本2.6.0和scio版本0.6.1
我试过了,但出现了以下错误。
例如:
错误:
线程“main”java.lang.RuntimeException中的异常:无法将调用行_NUMBER()转换为(在无界的前一行和当前行之间按$t1顺序划分$t0行)
BeamSQL不支持ROW_NUMBER()函数(至少在2.15之前是这样)。您对此有什么解决方案吗?嗨,芮,现在Beam SQL中有ROW_NUMBER()函数吗?目前还没有。到今年6月可能会有一个支持(有人可能会开始工作)Hi-Rui,现在Beam SQL中添加了行数()了吗?H
我使用60秒的固定窗口,触发时间为10秒。我面临着一些意想不到的结果。你能帮我理解它到底是如何工作的吗?我在下面提供了所有的细节
我对pubsub主题的输入是:
*name* *score* publish timestamp(every 5 seconds I am publishing one element)
Laia 30 2021-04-10 09:38:29.708000+0000
Victor 20 2021-04-10 09:38:34.695000+00
我试图分配一个自定义的时间戳,并检查允许的迟到是如何工作的。当我在interactive()runner()中运行下面的代码时,它工作正常,但当我切换到dataflowrunner()时,它开始抛出错误
Map(lambda x: window.TimestampedValue(x, x["timestamp"]))
两种情况下的输入数据相同,即{'name':'rou','score':50,'timestamp':1618295060}。在DataflowUI中,我没
我有一个定制的接收器,通过调用数据流中的PCollection.apply(write.to(MySink))来扩展FileBasedSink(非常简单)。然而,默认情况下,简单地调用Write.to总是会产生3个输出碎片?是否有任何方法可以仅在自定义接收器类定义中定义输出碎片的数量(如TextTO.Write.withNumShards)?或者我必须定义另一个定制的p变压器,比如TextIO.Write 不幸的是,现在FileBasedSink不支持指定碎片的数量
实际上,您获得的碎片数量将取
我有一个启用自动缩放的数据流作业,它在执行期间将工作池的大小调整为14。作业完成时,作业日志报告了6个OutOfMemoryErrors,但整个管道以及每个执行步骤的状态均为成功。我可以信任作业状态,还是由于工作人员故障而导致数据丢失?您可以信任作业状态和结果,因为数据流旨在以一种能够适应此类故障的方式处理数据。有关更多信息,请参见的说明。具体而言:
数据流服务是容错的,可能会重试您的代码
在工人问题的情况下多次。数据流服务可以
创建代码的备份副本,并且手动备份可能会出现问题
副作用(例如,如果
我有一个聚合,它查看客户购买的滑动30天窗口(1天周期),由客户id键入,值为购买金额。我按键汇总这些值,从而得到每个客户在过去30天内的总购买金额。我将此号码存储在外部数据库中的客户记录中
我的问题是:如果客户在过去30天内没有购买任何东西,我如何自动将客户记录重置为默认值,在这种情况下为零?我更愿意将所有逻辑都保留在数据流中,避免做太多的工作,因为这需要进行相当大的扩展。我基本上是在寻找一种方法来自动获取每个键的键值,这些键不在当前窗口中,但在最后一个窗口中,并且该值可能是可配置的默认值。试
嗨,我正在尝试运行一个管道,在这个管道中,我正在计算以30秒心跳*发布到pubsub的消息之间的差异(10K流,每30秒心跳一次)。我不关心100%的数据完整性,但我想了解什么是PubsubIO的水印启发(如果我可以调整它),以确定是否可以以足够低的损失忽略延迟数据
*注意,pubsub主题提供了[可能值得几天]的持久性,以防我们必须关闭管道,因此启发式方法在积压订阅中工作良好是很重要的
有人能解释一下水印是如何计算的(假设使用了timestamplabel()),以及如何调整水印的吗?下面是我
基于Javadocs和上的博客文章,我尝试使用一个简单的重复数据消除示例,使用2.0.0-beta-2SDK从GCS读取一个文件(包含一个JSON列表,每个JSON都有一个用户id字段),然后通过管道运行,如下所述
输入数据包含约146K个事件,其中只有50个事件是唯一的。整个输入大约为50MB,与2分钟的固定窗口相比,可以在相当短的时间内处理。我只是在那里放置了一个窗口,以确保在不使用GlobalWindow的情况下保持每键每窗口语义。我通过3个并行阶段运行窗口化数据,以比较结果,下面将对每个
我只是想知道我们是否可以跳过Json消息中的空字段,以减少序列化开销,并通过减少查询大小使大查询插入更快?您有更多的上下文吗?密码?用一个简单的例子来测试应该很容易。如果我们现在不这样做,这听起来是一个很好的改进。
我已经拉取了DataFlow SDK,并成功地将其作为eclipse项目打开。
我总共看到66个错误,基本问题是
说明资源路径位置类型
构造函数SpecificDatumReader(类)指的是缺少类型的用户AvroIOTest.java/google cloud dataflow java sdk all/src/test/java/com/google/cloud/dataflow/sdk/io line 125 java问题
我不知道该类位于何处。您得到的编译错误是由Eclipse环境中的
我正在尝试谷歌提供的Wordcount示例。当我从本地计算机运行它时,它正在成功运行
但当我通过谷歌云运行它时,它失败了,只有以下例外
java.io.IOException: INTERNAL: Finalize rejected (writer id not found) when talking to tcp://localhost:12345
例外情况也不清楚
我发现当任何一个作业正在部分运行,而之后的作业没有运行时,就会发生这种情况
因此,当我删除Sum.Perkey转换时,它正在
我正在运行一个数据流管道,它从PubSub读取数据并写入BigQuery。当我尝试验证所有消息是否都已写入BigQuery时,我意识到有些消息丢失
如何验证发送到PubSub的所有消息是否已正确发送?如果您在PubSub发布服务器(cloud.google.com/PubSub/publisher)上获得了正常响应,则应表示这些消息已正确发送。您可以尝试在发布服务器上记录所有已发布的消息ID,并在管道中记录所有已接收的消息ID(例如,将它们放入BigQuery列)。如果您在PubSub发布服务器
在谷歌云数据流上运行机器学习算法的最佳方式是什么?我可以想象,如果Mahout是基于Java的,那么使用它将是一种选择
答案可能是否定的,但有没有办法调用基于R或Python(它们对算法有很强的支持)的脚本来减轻ML执行的负担
-Girish也有(没有亲自使用)和Weka。我记得文档中提到,可以从作业中启动新流程,但也不建议这样做。您已经可以在数据流转换方面实现许多算法
一类可能不那么容易实现的算法是迭代算法,其中管道的执行图取决于数据本身。简化迭代算法的实现是我们感兴趣的事情,您可以期待这方面
目前,我们有一个数据流流程,其中我们有一个GroupByKey,但是groupby之后的DoPar每个键获得了太多的值,我们想知道是否有一个好的解决方案。据我所知,没有办法设置每个窗口的最大值
目前,我们正在探索3种选择:
较小的窗口-我们认为我们可能仍然有问题,因为事件可能会在时间上聚集在一起
在每个键中添加一个随机值来划分键-这也是不理想的,因为当我们传入的事件较少时,每个键的值就会太少。此外,当事件数呈指数增长时,我们也不能调整分区数
一些花式触发或使用组合器-可能是最好的解决方案,但不知
假设我们有一些数据是通过Google PubSub主题传入的,它的流量模式本质上是尖峰的,在数据以很快的速度传入数分钟之前,可能会有很长的安静时间
为了处理这些数据,如果我们要使用以订阅为基础的PubSubIO作为数据源的流模式数据流,那么数据流是否始终处于运行状态,工作人员数量是否最少,或者数据流是否会在数据突发时重新启动,但一旦进入安静期就会停止?如果启用,数据流将根据负载动态增加或减少工作进程的数量,而无需重新启动管道。你可以阅读更多关于它的信息
我想创建一个可以被所有线程访问(读写方式)的对象(比如共享内存)。虽然对于这个问题并不重要,但对象是一个hashmap,我可以从所有线程读取/写入数据。它就像一个读写共享变量
在数据流中有这样做的方法吗
在我的例子中,我可以“打破”一个关键需求,并使这个共享var成为它运行的节点的“本地”。因此,如果有一种方法可以创建(每个实例节点)一个静态变量,给定节点中的所有线程都可以访问该变量,那么这对我来说是可行的
我想也许我可以在startBundle方法中创建一个静态var(使用工厂方法),但我在某
我正在编写一个数据流(Beam SDK 2.0.0),它从发布/订阅中读取数据,对窗口中的元素进行计数,然后将计数作为时间序列存储在BigTable中。车窗的持续时间固定为1分钟
我的意图是使用触发器每秒更新当前窗口的值,以便实时更新当前时间窗口
但这似乎不起作用。该值每秒正确更新一次,但一旦数据流在下一分钟开始工作,第一个值将更新为零。所以基本上只有我的最后一个值是正确的,其余的都是零
Pipeline pipeline = Pipeline.create(options);
PCollec
我试图使用DynamicDestinations写入BigQuery中的分区表,其中分区名为mytable$yyyyMMdd。如果我绕过DynamicDestination并在.to()中提供一个硬编码的表名,它就可以工作;但是,对于dynamicdestinations,我得到以下例外情况:
java.lang.IllegalArgumentException: unable to serialize org.apache.beam.sdk.io.gcp.bigquery.PrepareWri
在BlockingDataflowPipelineRunner上完成作业后,我尝试获取当前数据流作业的详细信息,如id、名称、类型、开始时间、结束时间等。与我们在dataflow仪表板中看到的细节类似
我已使用以下代码获取状态
Pipeline p;
...
...
PipelineResult result = p.run();
switch (result.getState()) {
case CANCELLED:
我使用云函数已经有一段时间了,但最近在使用内联编辑器通过UI创建云函数时出现了一个错误。我得到的错误是:
Error
The request contains invalid arguments "event_trigger": "projects/my-project-id/buckets/my-bucket-id expected to match template projects/_/buckets/{bucket}"
Tracking Number: **************(s
我在数据流日志中发现以下错误:
(11B5595300EC4CE):工作流失败。原因:(11B5595300EC459):故障
数据流似乎被卡住了。请联系以下地址的数据流团队:
作业ID为:2017-11-13_20_58_16-5812097262489045871
我尝试了完全相同的代码,它正在其他项目上工作
感谢您的帮助
Yosua由于默认网络的区域(在我的例子中为asia-Southast1)和区域参数(默认值:us-central1-f)之间不匹配,数据流无法生成工作线程
因此,为了
我一直在尝试让wordcount快速入门教程按照此处的说明工作(使用Java SDK 2.2.0):
当我在本地运行示例管道时,我得到了预期的结果。太好了
然而,当我在云数据流服务上运行示例管道时,该服务启动,但一小时后会发出以下消息:
(b87e004bcb71c8e1): Workflow failed. Causes: (b87e004bcb71c708): The Dataflow appears to be stuck. Please reach out to the Dataflo
您知道有什么方法可以从Python编码的数据流管道中的HTTP端点接收数据吗
我当前的解决方案是安排对此端点的调用,该端点检索JSON格式的数据,将文件保存在磁盘上,并让管道接收它
我现在想做的是定期读取此HTTP端点的数据流。正如Andrew建议的那样,您可以尝试在转换(par do)中读取数据。然后数据可以在下游进行处理。我想您可以使用该模块在转换的实现中进行同步API调用。好的。不过我有一个问题,帕尔多的定义似乎是平行的。我应该(如果可能的话)指定不并行化api调用吗?如果您有少量数据,不
嗨,我想在数据流管道中动态创建表
首先,我捕获BigQueryIO WriterResult,然后使用它创建表
WriteResult writeResult =
incomingRecords.apply(
"WriteToBigQuery",
BigQueryIO.<TableRowWithSchema>write()
我们的管道缓冲事件,并每500个事件进行一次外部提取(用于充实)。当触发计时器时,这些事件将在计时器触发时处理。当然,当您有503个事件时,将有3个事件未被充实
从实验中我们了解到,@FinishBundle总是在计时器之前被调用。它甚至似乎是在计时器执行(检查点?)之前提交的中的bundle的结果。如果我们可以从@FinishBundle访问状态并对这些最后的事件执行扩展,那么它们将是提交的bundle的一部分
我相信这会解决我们的问题一次:目前计时器也需要获取,并将在重新执行时再次执行。当我
我有一个BigQuery TableRow元素的PCollection,这些元素根据TableRow的一列是否被成功解析而被标记
final TupleTag<TableRow> OK = new TupleTag<TableRow>(){};
final TupleTag<TableRow> NOTOK = new TupleTag<TableRow>(){};
我找不到办法。我看到有一个名为myPCollection.getAll()的方法,
数据流允许通过--serviceCount选项进行。
除此之外,我想在提交工作之前与GCP资源进行互动。一个示例用例是使用Beam SDK的文件系统API检查某些GCS对象元数据
如何指示和storage.StorageOptions使用ImpersonatedCredentials
一些示例代码将在GCP Dataflow Worker之外运行:
import com.google.cloud.storage.StorageOptions;
import org.apache.beam.sdk
我希望能够在单个PCollection元素中维护一组实体,但要并行地从谷歌云存储(GCS)中获取这些实体。i、 e.PCollection-->PCollection,其中开始的PCollection是一个文件路径的Iterable,而产生的PCollection是一个文件内容的Iterable。或者,PCollection-->PCollection也可以工作,甚至可能更可取,其中开始的PCollection是一个全局模式,而产生的PCollection是一个与全局匹配的文件内容的iterab
使用scio版本0.4.7,我有一个监听pubsub主题的流媒体作业,我在这里使用事件处理,RFC3339中的消息属性上有“timestamp”属性
val-rtEvents:scolection[RTEvent]=sc.pubsubsubtopic(args(“topic”),timestampAttribute=“timestamp”).map(jsonToObject)
val windowedEvents=rtEvents.带固定窗口(持续时间.标准分钟(1L)),
选项=窗口选项(触发
1 2 3 4 5 6 ...
下一页 最后一页 共 30 页