Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.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 Google Dataflow—能够在当前运行的步骤中并行化工作_Java_Google Cloud Platform_Google Cloud Dataflow - Fatal编程技术网

Java Google Dataflow—能够在当前运行的步骤中并行化工作

Java Google Dataflow—能够在当前运行的步骤中并行化工作,java,google-cloud-platform,google-cloud-dataflow,Java,Google Cloud Platform,Google Cloud Dataflow,我正在尝试为模拟进程运行google数据流。我尝试通过启用自动缩放(基于吞吐量)的最大工作节点5启动数据流 问题是数据流并没有利用所有的工作节点(5)ad来传递消息 自动缩放:根据在当前运行的步骤中并行化工作的能力,将工作人员的数量减少到1 请提出可能的问题 日志附在下面 2017-05-10T06:01:36.555Z:细节:(5de468ab73bd7581):自动缩放是 已启用作业2017-05-09_23_01_36-676564762580782060。人数 工人人数将在1至1000人

我正在尝试为模拟进程运行google数据流。我尝试通过启用自动缩放(基于吞吐量)的最大工作节点5启动数据流

问题是数据流并没有利用所有的工作节点(5)ad来传递消息

自动缩放:根据在当前运行的步骤中并行化工作的能力,将工作人员的数量减少到1

请提出可能的问题

日志附在下面

2017-05-10T06:01:36.555Z:细节:(5de468ab73bd7581):自动缩放是 已启用作业2017-05-09_23_01_36-676564762580782060。人数 工人人数将在1至1000人之间。2017-05-10T06:01:37.811Z:详图: (feb335244b957ccc):检查所需的云API是否已启用。 2017-05-10T06:02:05.328Z:细节:(feb335244b9573fd):扩展 将按键操作分组为可优化的部分。 2017-05-10T06:02:05.332Z:详图:(feb335244b957017):吊装 值将映射Fn组合到MergeBucketSmappingFn中 2017-05-10T06:02:05.714Z:详图:(feb335244b957a72):熔断相邻 ParDo、读、写和展平操作2017-05-10T06:02:05.716Z: 细节:(feb335244b95768c):将消费者匿名密码融合到 读取/DataflowPipelineRunner.BatchBigQueryOnAtiveRead 2017-05-10T06:02:05.718Z:细节:(feb335244b9572a6):熔断消费者 WriteToBigQuery/DataflowPipelineRunner.BatchBigQueryIOWrite/DataflowPipelineRunner.BatchBigQueryIONativeWrite 进入AnonymousParDo 2017-05-10T06:02:05.728Z:详情: (feb335244b95730e):将步骤资源设置和拆卸添加到工作流 图表2017-05-10T06:02:05.767Z:基本:(75edc98e2ecf8a50):正在执行 活动 读取/DataflowPipelineRunner.BatchBigQueryInAtiveRead+AnonymousParDo+WriteToBigQuery/DataflowPipelineRunner.BatchBigQueryIOWrite/DataflowPipelineRunner.BatchBigQueryInAtiveWrite 2017-05-10T06:02:05.973Z:基础:(c9b9bc749d188107):开始5 工人。。。2017-05-10T06:02:07.735Z:基础:(4903a2f536f5c1ae): 作为作业发出的BigQuery查询:“数据流_作业_4354444743530735184”。你 可以使用bq工具检查其状态:“bq显示-j --项目id=com dl零件开发数据流作业“4354444743530735184”。2017-05-10T06:03:03.727Z:详图:(376dc1d89cc4c16e):工人们 启动成功。2017-05-10T06:04:09.561Z:基本: (4903a2f536f5c868):BigQuery查询已完成,作业: “数据流作业”2017-05-10T06:04:09.987Z:基本: (4903a2f536f5cfbf):BigQuery导出作业 “数据流作业”已启动。您可以检查它的状态 使用bq工具:“bq show-j--project_id=com-dl-parts-dev 数据流_作业_526122796371635305”。2017-05-10T06:05:10.798Z:详图: (d0c3fbda1e314661):BigQuery导出作业进度: “dataflow_job_526122796371635305”总共观察到1个导出文件 到目前为止。2017-05-10T06:05:10.801Z:基本:(d0c3fbda1e31498f): BigQuery导出作业已完成:“数据流_作业_526122796371635305” 2017-05-10T06:06:12.303Z:基本:(d51372b306784d58):自动缩放: 已将工作池大小从5调整为1。2017-05-10T06:06:12.306Z:细节: (d51372b306784f56):自动缩放:将工人数量减少到1 基于当前正在运行的步骤的进度。 2017-05-10T06:07:38.000Z:基本:(4e3c32839262218d):自动缩放: 正在尝试将工作池升级为2。2017-05-10T06:08:11.074Z: 基本:(4e3c328392622142):自动缩放:将工作池大小从1调整为 2.2017-05-10T06:08:11.077Z:详细信息:(4e3c32839262213c):自动缩放:根据并行化能力将工作人员数量增加到2人 当前正在运行的步骤中的工作。2017-05-10T06:13:41.023Z: 基本:(ae82479176c127a3):自动缩放:将工作池大小从2调整为 1.2017-05-10T06:13:41.027Z:详细信息:(ae82479176c129d5):自动缩放:基于并行化能力,将工作人员数量减少到1人 当前正在运行的步骤中的工作。2017-05-10T06:20:31.844Z: 基本:(a41dfc71af8c36fd):执行BigQuery导入作业 “数据流_作业_43544447435307352182”。您可以使用 bq工具:“bq show-j——项目id=com dl部件开发 数据流_作业_43544447435307352182”

更新:-这是防止融合的正确方法吗

我正在使用Bigquery IO读取Bigquery表。此输入参数为我提供每个记录中的产品编号

在我做ParDo手术之后。在process element功能中,我为从输入中获得的每个产品执行一些数据预测操作

PCollection<TableRow> quotes3 = quotes2.apply(ParDo.of(new  DoFn<TableRow, TableRow>() {
private static final long serialVersionUID = 1L;
    @Override
    public void processElement(ProcessContext c) throws Exception{

        TableRow rowData = c.element();
        rowData = c.element();
        TableRow tableRowData = ForcastOperation(rowData);
        c.output(tableRowDRP);
    }
}));
更新:-17/05/2017 13:38

我试图用下面列出的方法来打破融合。它将GroupByKey应用操作放大到308个节点。但我不确定它是否正在将secound pardo的ForcastOperation方法扩展到308个节点

 PCollection<String> quotes1 = quotes.apply(ParDo.of(new  DoFn<TableRow, KV<String, String>>() {
    private static final long serialVersionUID = 1L;
    private Random random = new Random();

        @Override
        public void processElement(ProcessContext c) throws Exception{
            TableRow rowData = c.element();
            rowData = c.element();
            c.output(KV.of(rowData.get("APRODUCT").toString(), rowData.get("APRODUCT").toString()));
        }
        })).apply(GroupByKey.<String, String>create())
           .apply(Values.<Iterable<String>>create())
           .apply(Flatten.<String>iterables());



PCollection<TableRow> quotes3 = quotes1.apply(ParDo.of(new  DoFn<String, TableRow>() {
private static final long serialVersionUID = 1L;
    @Override
    public void processElement(ProcessContext c) throws Exception{

        TableRow rowData = c.element();
        rowData = c.element();
        TableRow tableRowData = ForcastOperation(rowData);
        c.output(tableRowDRP);
    }
}));

我查看了这个作业的日志,发现它从BigQuery中读取的数据量非常小,大约为1kb。这是预期的吗

如果是的,并且如果您仍然希望并行处理1kb 1000种方式,那么我假设您的ForecastOperation函数对每个元素的计算非常密集


在这种情况下,您需要打破从BigQuery读取和应用ForecastOperation之间的融合。请参见

请提供有关管道结构的见解。张贴我们可以帮助您确定步骤中的问题(如果有),以便您的工作可以大规模并行化!问题到底是什么?启用自动缩放后,您将告诉Dataflow根据需要处理的数据量选择其认为合适的最佳作品数量。这是工人进出池时收到的正常消息。在您的案例中,Dataflow决定只使用1个工作进程运行。我猜是因为数据大小/容量没有那么大。嗨,Graham,我的要求是为我从quotes2数据流管道的第一个查询中获取的每个产品并行运行1000个节点。我是阿苏
 PCollection<String> quotes1 = quotes.apply(ParDo.of(new  DoFn<TableRow, KV<String, String>>() {
    private static final long serialVersionUID = 1L;
    private Random random = new Random();

        @Override
        public void processElement(ProcessContext c) throws Exception{
            TableRow rowData = c.element();
            rowData = c.element();
            c.output(KV.of(rowData.get("APRODUCT").toString(), rowData.get("APRODUCT").toString()));
        }
        })).apply(GroupByKey.<String, String>create())
           .apply(Values.<Iterable<String>>create())
           .apply(Flatten.<String>iterables());



PCollection<TableRow> quotes3 = quotes1.apply(ParDo.of(new  DoFn<String, TableRow>() {
private static final long serialVersionUID = 1L;
    @Override
    public void processElement(ProcessContext c) throws Exception{

        TableRow rowData = c.element();
        rowData = c.element();
        TableRow tableRowData = ForcastOperation(rowData);
        c.output(tableRowDRP);
    }
}));
    quotes3.apply(BigQueryIO.Write
        .named("WriteToBigQuery")
        .to("com-dl-parts:ds_parts.output_data")
        .withSchema(schema)
        .withWriteDisposition(BigQueryIO.Write.WriteDisposition.WRITE_APPEND)
        .withCreateDisposition(BigQueryIO.Write.CreateDisposition.CREATE_IF_NEEDED));

pipelineTransform.run();