2017-02-10 7 views
0

У меня есть поток данных, где ввод является большим чтением из базы данных. Я хотел бы разбить этот запрос и выполнить его с нескольких хостов при запуске задания. Насколько я могу судить, BoundedSource не имеет прямого управления входным расщеплением. Самое близкое к нему - splitIntoBundles, что в основном означает, что мне нужно начинать очень дорогое чтение и надеяться, что Dataflow отменяет его и вместо этого использует мой выделенный пакет. Это кажется довольно сумасшедшим, поэтому я надеюсь, что есть лучший способ предопределить входной раскол, который можно запустить для любых удаленных сотрудников.Как управлять ограниченным разделом источника?

+0

В какой базе вы читаете? Вы запрашиваете Большой запрос? Или вы написали собственный источник? – Pablo

+0

Я читаю из Монго. Я внедрил собственный источник. – Max

+0

Глядя на код луча, кажется, что есть источник MongoDB, который реализует 'splitIntoBundles'. Возможно, вы можете попробовать изучить эту реализацию? https://github.com/apache/beam/blob/master/sdks/java/io/mongodb/src/main/java/org/apache/beam/sdk/io/mongodb/MongoDbIO.java#L226 – Pablo

ответ

1

После долгих исследований нет возможности контролировать расщепленный параллелизм одного считывателя. Мое решение состояло в том, чтобы создать несколько считывателей, каждый читатель читает в свой собственный PCollection, а затем сглаживает несколько PCollections в один PCollection.