Как записать в разные файлы на основе контента для пакетной обработки во Flink? - PullRequest
0 голосов
/ 19 марта 2019

Я пытаюсь обработать некоторые файлы в HDFS и записать результаты обратно в HDFS. Файлы уже подготовлены до начала работы. Дело в том, что я хочу записывать разные пути и файлы в зависимости от содержимого файла. Мне известно, что BucketingSink ( документ здесь ) предоставляется для достижения этой цели в потоковой передаче Flink. Однако, похоже, что Dataset не имеет аналогичного API. Я обнаружил некоторые вопросы и ответы по stackoverflow. ( 1 , 2 , 3 ). Теперь я думаю, что у меня есть два варианта:

  1. Использовать Hadoop API: MultipleTextOutputFormat или MultipleOutputs;
  2. Чтение файлов в виде потока и использование BucketingSink.

У меня вопрос, как сделать выбор между ними, или есть другое решение? Любая помощь приветствуется.

РЕДАКТИРОВАТЬ: Этот вопрос может быть дубликатом это .

1 Ответ

1 голос
/ 19 марта 2019

Мы столкнулись с той же проблемой.Мы также удивлены тем, что DataSet не поддерживает addSink().

Я рекомендую не переключаться в потоковый режим.Вы можете отказаться от некоторых оптимизаций (т. Е. Пулов памяти), доступных в пакетном режиме.

Возможно, вам придется реализовать свой собственный OutputFormat , чтобы выполнить группирование.

Вместо этого вы можете расширить OutputFormat[YOUR_RECORD] (или RichOutputFormat[]), где вы все еще можете использовать BucketAssigner[YOUR_RECORD, String] для открытия / записи / закрытия выходных потоков.

Это то, что мы сделали ион отлично работает.

Я надеюсь, что Flink скоро поддержит это в пакетном режиме.

...