Google Dataflow仅为大型.bz2文件创建一个工作程序

时间:2018-10-11 08:16:26

标签: google-cloud-dataflow apache-beam bzip2 bz2

我正在尝试使用Cloud Dataflow处理Wikidata json转储。

我已经从https://dumps.wikimedia.org/wikidatawiki/entities/latest-all.json.bz2下载了文件,并将其托管到GS存储桶中。这是一个很大的(50G).bz2文件,其中包含json字典列表(每行一个)。

我知道apache_beam.io.ReadFromText可以处理.bz2(我在玩具数据集上进行了测试),并且.bz2是可拆分的。因此,我希望可以创建多个可在该唯一文件的不同块上并行工作的工作程序(我不清楚是否/如何重新运行这些块。

最终,我想在每行(每个json字典)上进行一些分析,但是作为摄取测试,我只是使用项目的wordcount.py:

python -m apache_beam.examples.wordcount \
--input gs://MYBUCKET/wikidata/latest-all.json.bz2 \
--output gs://MYBUCKET/wikidata/output/entities-all.json \
--runner DataflowRunner \
--project MYPROJECT \
--temp_location gs://MYBUCKET/tmp/ 

在启动时,自动缩放会迅速增加工人数量1-> 6,但只有一名工人会做任何工作,然后在几分钟后自动缩放6-> 1(工作号:2018-10-11_00_45_54-9419516948329946918)

如果我禁用自动缩放并显式设置工作者数,则除一个之外的所有成员都将保持空闲状态。

可以通过这种输入实现并行性吗?非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

除Hadoop之外,Apache Beam尚未实现bzip2拆分:https://issues.apache.org/jira/browse/BEAM-683