Google Cloud Dataflow如何减少http_request

时间:2018-04-30 03:14:33

标签: python google-cloud-dataflow apache-beam

我有一个Dataflow作业,由于在尝试创建作业时发送了过大的http_request主体,似乎失败了。这是请求标题:

{'content-length': '107245818', 'content-type': 'application/json', 'accept-encoding': 'gzip, deflate', 'accept': 'application/json', 'user-agent': 'x_xxxxxxxx'}

发送请求给我:

413. That's an error.

Your client issued a request that was too large.

什么进入请求体,使它如此之大?我可以做些什么来缩小其规模或让Google的服务器接受请求?

我正在使用Apache Beam Python SDK版本2.4.0。

1 个答案:

答案 0 :(得分:0)

我通过pickletools.dis运行序列化函数定义,看看占用了多少空间。这似乎完全取决于CombineFn的{​​{1}}定义。

来自:

extract_output

def extract_output(self, accumulator):
    output = zip(self.id_list, accumulator[1], *accumulator[0])
    return output

def extract_output(self, accumulator): return accumulator 的{​​{1}}带到content-length的费用减少了100倍。

'74538844'包含两个维度为'858884'accumulator的numpy arrray。 len(id_list) x len(id_list)为数组的每一行提供整数标签(在本例中大约为3000),并且在构造管道时是已知的。

我不知道为什么会发生这种情况,但是在CombineFn生成合理大小的请求并产生大致相同的输出后,在DoFn中使用ID进行键控。