Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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 com.google.cloud.span.span异常:超过了截止日期_Google Cloud Dataflow_Apache Beam_Google Cloud Spanner - Fatal编程技术网

Google cloud dataflow com.google.cloud.span.span异常:超过了截止日期

Google cloud dataflow com.google.cloud.span.span异常:超过了截止日期,google-cloud-dataflow,apache-beam,google-cloud-spanner,Google Cloud Dataflow,Apache Beam,Google Cloud Spanner,我已经被这个问题困扰了一天多,我想这里可能有人知道答案。基本上,作为一个简单的测试,我试图从一个表中读取数据,并将结果简单地输出到一个日志文件中。该表相当大(约1.67亿行)。我一直得到以下错误 java.lang.RuntimeException:org.apache.beam.sdk.util.UserCodeException:com.google.cloud.Spaner.SpanerException:DEADLINE_Exception:io.grpc.Status RuntimeE

我已经被这个问题困扰了一天多,我想这里可能有人知道答案。基本上,作为一个简单的测试,我试图从一个表中读取数据,并将结果简单地输出到一个日志文件中。该表相当大(约1.67亿行)。我一直得到以下错误

java.lang.RuntimeException:org.apache.beam.sdk.util.UserCodeException:com.google.cloud.Spaner.SpanerException:DEADLINE_Exception:io.grpc.Status RuntimeException:DEADLINE_Exception:DEADLINE_Excepended:119997536405ns之后超过了截止日期

其次是:

工作流失败。原因:S15:SpanRio.ReadAll/Read from Cloud Paner/Shuffle partitions/Reshuffle/GroupByKey/Read+SpanRio.ReadAll/Read from Cloud Paner/Shuffle partitions/Reshuffle/GroupByKey/GroupByWindow+SpanRio.ReadAll/Read from Cloud Paner/Shuffle partitions/Reshuffle/ExpandIterable+SpanRio.ReadAll/Read from Cloud Paner/Shuffle/Shuffle分区/Values/Values/Map+span.ReadAll/Read from Cloud span/Read from partitions+ParDo(FinishProcess)失败。作业失败,因为一个工作项失败了4次。查看以前的日志条目,了解4个故障中每一个故障的原因。有关详细信息,请参阅。已尝试在以下工作人员上执行工作项: ricardocascadejob-m0771463-12021322-cpj6-harness-4nvn 根本原因:工作项失败。, ricardocascadejob-m0771463-12021322-cpj6-harness-c485 根本原因:工作项失败。, ricardocascadejob-m0771463-12021322-cpj6-harness-kcgb 根本原因:工作项失败。, ricardocascadejob-m0771463-12021322-cpj6-harness-kcgb 根本原因:工作项失败

下面是在数据流上运行的主代码

PipelineOptionsFactory.register(RicardoPriceLoadOptions.class);
    RicardoPriceLoadOptions opts = PipelineOptionsFactory.fromArgs(args)
        .withValidation().as(RicardoPriceLoadOptions.class);
    Pipeline pipeline = Pipeline.create(opts);

    SpannerConfig spannerConfig =
        SpannerConfig.create()
            .withProjectId(opts.getGcpProjectId())
            .withInstanceId(opts.getSpannerInstanceId())
            .withDatabaseId(opts.getSpannerDatabaseId());

    PCollectionView<Transaction> tx =
        pipeline.apply(SpannerIO.createTransaction().withSpannerConfig(spannerConfig));

    //Fetch All Price Events
    PCollection<Struct> pepLIst = pipeline.apply(Create.of(ReadOperation.create()
        .withColumns("DisabledFlag", "PriceEventPriceableId", "PriceableItemId",
            "OutgoingType", "PriceOriginal", "PriceIntermediate", "PriceRetail", "SaleValue", "SaleValueIntermediate",
            "SchedulableFlag", "SendToSiteFlag", "StartTime", "EndTime", "DisplayCode")
        .withTable("ABC")))
        .apply(SpannerIO.readAll().withTransaction(tx).withSpannerConfig(spannerConfig));

    pepLIst.apply(ParDo.of(new FinishProcessFn()));

超过截止日期\u表示操作未在给定时间内完成

对于更改系统状态的操作,即使操作已成功完成,也可能会返回此错误(例如,来自服务器的成功响应可能已延迟足够长的时间,导致截止日期过期)


我看不出中的云扳手有任何问题,但是,最好联系GCP支持部门,这样他们就可以检查你的项目并深入研究这个问题。

因此,正如我所做的更新一样,解决这个问题的方法是使用与gpc数据流中可用的模板完全相同的beam和google扳手驱动程序版本,我的代码开始神奇地工作。我没有对代码进行任何更改。

您是否知道是否正在向一行写入特别大的数据?或者,您可能正在以触发热点的方式向扳手写入大量数据?即,如果您将大量数据写入同一扳手或同一范围内的扳手。这可能会导致扳手后端中的一台机器过载。您介意发布您的扳手方案的详细信息吗?比如你用什么作为主键?嗨,亚历克斯,我没有把任何数据写到扳手上。简单地做一个readAll并记录我读到的内容。我将代码缩减到最低限度以隔离问题。你在上面看到的就是我目前所拥有的一切。我将在我的原始帖子中添加模式,您使用的是哪个版本的beam?您是否尝试过此管道,它是否使用较小的数据库?您的用例是否需要使用.withTransaction()?如果不需要从严格一致的快照读取数据,则可以忽略它。我想知道span.readAll().withTransaction()的行为是否是试图一次读取整个数据库,而不是逐行迭代。您是否介意删除withTransaction并查看问题是否消失?谢谢回复。我使用的是2.16.0版的beam,我们还有一个表(约800万行),它可以正常工作。我最初没有.withTransaction(),但在这里查看了google数据流模板的示例后添加了它。不管怎样,它仍然抛出相同的错误。你能分享一下你使用的扳手驱动和横梁的版本吗?
public class FinishProcessFn extends DoFn<Struct, Void> {

@ProcessElement
public void process(@Element Struct elem) {
    log.debug(elem.toString());
}
    CREATE TABLE ABC (
    PriceEventPriceableId INT64 NOT NULL,
    Created TIMESTAMP NOT NULL,
    CreatedBy STRING(MAX) NOT NULL,
    DisabledFlag STRING(MAX) NOT NULL,
    DisplayCode STRING(MAX),
    EndTime TIMESTAMP,
    ErrorCode INT64,
    EstablishmentOverrideFlag STRING(MAX),
    LastUpdated TIMESTAMP NOT NULL,
    LastUpdatedBy STRING(MAX) NOT NULL,
    NotApplicableFlag STRING(MAX),
    OnSaleRatioOverrideFlag STRING(MAX),
    OutgoingType INT64,
    OwnedValue STRING(MAX),
    ParentPriceableItemId INT64,
    PriceableItemId INT64 NOT NULL,
    PriceEventId INT64 NOT NULL,
    PriceIntermediate STRING(MAX),
    PriceOriginal STRING(MAX),
    PriceRetail STRING(MAX),
    ReasonUnschedulable STRING(MAX),
    SaleValue STRING(MAX),
    SaleValueIntermediate STRING(MAX),
    SavingsMaxOverrideFlag STRING(MAX),
    SchedulableFlag STRING(MAX),
    SendToSiteFlag STRING(MAX),
    SentToSiteDate DATE,
    StartTime TIMESTAMP,
    StoredValue STRING(MAX),
    TenPercentOverrideFlag STRING(MAX),
    Timestamp TIMESTAMP NOT NULL OPTIONS (allow_commit_timestamp=true),
) PRIMARY KEY (PriceEventPriceableId)