Google Dataflow создает только один рабочий для большого файла.bz2

Я пытаюсь обработать дамп JSON из Викиданных, используя Cloud Dataflow.

Я скачал файл с https://dumps.wikimedia.org/wikidatawiki/entities/latest-all.json.bz2 и поместил его в корзину GS. Это большой (50G) файл.bz2, содержащий список кодов json (по одному на строку) .

Я понимаю, что apache_beam.io.ReadFromText может обрабатывать.bz2 (я проверял это на наборах игрушечных данных) и что.bz2 разделяемый. Поэтому я надеялся, что будет создано несколько рабочих, которые будут работать параллельно над разными блоками этого уникального файла (я не совсем уверен, будут ли / как блоки сохраняться.

В конечном счете, я хочу провести аналитику по каждой строке (каждый json dict), но в качестве теста на прием пищи я просто использую проект 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 через пару минут (jobid: 2018-10-11_00_45_54-9419516948329946918)

Если я отключу автоматическое масштабирование и явно укажу количество работников, то все, кроме одного, будут простаивать.

Можно ли достичь параллелизма на такого рода вводе? Большое спасибо за любую помощь.

0 ответов

Помимо Hadoop, Apache Beam еще не реализовал разделение bzip2: https://issues.apache.org/jira/browse/BEAM-683

Другие вопросы по тегам