Саммит Beam объединяет экспертов и сообщество, чтобы поделиться захватывающими способами использования, изменения и развития Apache Beam, а также мира обработки данных и потоковой обработки. В этом году саммит проходил с 19 по 20 июня в Берлине и был организован всего во второй раз. ML6 был среди спонсоров и посетил мероприятие вместе с более чем 150 другими разработчиками и участниками Beam.

В этом посте я дам обзор самых интересных тем, которые обсуждались на саммите. Будьте рады услышать о новейших функциях, вариантах использования и многом другом!

Портативность

При написании конвейера Beam вы должны выбрать SDK: язык, на котором вы пишете конвейер (Java, Python или Go), и бегун: где запускать ваш код (Dataflow, Flink, Spark и т. Д.). Каждый из этих бегунов и SDK в настоящее время поддерживает другой набор функций, поскольку каждая комбинация SDK-runner требует нетривиальных реализаций в платформе с обеих сторон. Первоначально раннеры были написаны на Java, что означает, что нужно проделать много дополнительной работы для поддержки других SDK. Когда новая функция представлена ​​в Java, это также требует новой реализации в Python и Go для поддержки той же функции.

Структура переносимости направлена ​​на исправление этой ситуации и обеспечение полной совместимости в экосистеме Beam, что означает обеспечение взаимодействия между SDK и бегунами. Платформа переносимости представляет четко определенные, не зависящие от языка структуры данных и протоколы между SDK и runner. Этот уровень взаимодействия, называемый API переносимости, гарантирует, что SDK и исполнители могут работать друг с другом единообразно, снижая нагрузку на совместимость до постоянных усилий. Это, в частности, гарантирует, что новые SDK автоматически работают с существующими исполнителями и наоборот.

Эта переносимость находится в стадии разработки. Например, бегун Flink в настоящее время поставляется в двух вариантах: устаревший бегун, который поддерживает только Java, и портативный бегун, который поддерживает Java, Python и Go. В долгосрочной перспективе цель состоит в том, чтобы заменить устаревший раннер портативным. Во время основного доклада также был показан пример переносимости SDK: межъязыковые конвейеры. Здесь можно использовать соединитель ввода-вывода Java непосредственно из конвейера Python. В демонстрации показано использование Kafka IO, который в настоящее время не поддерживается в Python.

Я думаю, что портативность - одна из самых крутых вещей, которых стоит ожидать в экосистеме Beam. Как разработчик Python, я упускаю множество функций, которые поддерживаются только в Java. Межъязыковые конвейеры внесут в это большое изменение.

Расширенный Tensorflow

TensorFlow Extended (TFX) - это сквозная платформа с открытым исходным кодом для развертывания производственных конвейеров машинного обучения. Конвейерная обработка - основное требование любой производственной платформы машинного обучения.

Многие компоненты TFX используют Beam для выполнения задач: прием данных, проверка данных, преобразование данных и анализ модели. Beam обеспечивает высокую степень масштабируемости в вычислительных кластерах. TFX использует Beam Python API и обеспечивает поддержку бегунов, которые поддерживаются Python API. Beam предоставляет уровень абстракции, который позволяет TFX работать на любом поддерживаемом средстве выполнения без модификации кода.

В ML6 мы уже используем TFX, потому что TensorFlow Serving предоставляет мощную платформу для развертывания наших моделей машинного обучения и предварительной обработки данных. Ознакомьтесь с нашими сообщениями в блоге ниже:





Временная последовательность

Apache Beam предоставляет различные синтаксические конструкции для обработки потоковых данных. Он поддерживает обработку окон, неупорядоченных данных и запаздывающих данных. Однако один сценарий, который не поддерживался, - это обработка отсутствующих данных. Например. если вы обрабатываете временные ряды и хотите указать, что в данных есть пробел. У вас не будет события в этом конкретном окне, но вы все равно хотите выводить данные.

Есть два способа справиться с этим. Первый - Таймеры зацикливания, которые сейчас доступны в прямом раннере. С помощью этого решения мы создаем таймер, который будет создавать нулевое событие каждые x секунд, и это для каждого ключа в вашем PCollection. Это решение использует глобальное оконное управление и состояние в вашем конвейере.

Второй - это «Окна валидности», который в настоящее время все еще носит теоретический характер. Срок действия Windows разделяет время на окна, в которых действует определенное значение. Примером этого является преобразование евро в иены. Один поток обрабатывает преобразование евро в иены, а другой поток обновляет коэффициент конверсии. Каждый коэффициент конверсии действителен во временном окне до прибытия следующего. Поскольку значения могут поступать не по порядку, окна необходимо разделять по мере поступления коэффициентов конверсии. Поскольку Beam не поддерживает сжатие окон, это еще не реализовано.

Циклические таймеры - это то, что возможно с Beam сегодня, а Validity Windows - это то, что Beam хочет сделать возможным в будущем.

PCollections с поддержкой схемы

Apache Beam ничего не знает о фактической структуре записей в коллекции PCollection и плохо разбирается в PTransforms. На практике большинство PCollections схематизировано: записи Avro, строки BigQuery и даже POJO и классы case. Над структурными записями выполняется множество операций: фильтрация по полю, группировка по определенному полю и так далее.

PCollections с поддержкой схемы позволяют вам определять схему для вашей PCollection, имея PCollection объекта, который расширяет класс Schema. Это позволяет вам автоматически записывать, например, BigQuery без преобразования вашей коллекции PCollection в TableRow. Наличие PCollections с поддержкой схемы также позволяет легко выполнять объединения и группировку.

Луч SQL

Beam SQL позволяет пользователю Beam (в настоящее время доступно только в Beam Java) запрашивать ограниченные и неограниченные PCollections с помощью операторов SQL. Затем при запуске конвейера ваш SQL-запрос преобразуется в PTransform. Можно запрашивать значения внутри коллекции PCollection, используя PCollections с поддержкой схемы. Apache Calcite предоставляет базовый диалект, лежащий в основе Beam SQL. Calcite - это широко распространенный диалект SQL, используемый при обработке больших данных с некоторыми улучшениями потоковой передачи.

Во время этого выступления Beam SQL был продемонстрирован на потоковом конвейере. Используя tumble_start, вы можете сделать базовый GroupByWindow на PCollection, чтобы запросить значения из этого PCollection. При использовании count(*) это переводится в Count PTransform.

Beam SQL позволяет легко визуализировать ваши данные и получать результат простых преобразований ваших данных. Он позволяет пользователям использовать знакомый им синтаксис SQL прямо в конвейере Beam. Примеры использования Beam SQL см. На странице https://beam.apache.org/documentation/dsls/sql/walkthrough/.

Поддержка Python 3

И последнее, но не менее важное: один из моих коллег, Робб Снейдерс, сообщил обновленную информацию о статусе переноса Apache Beam на Python 3. В ML6 мы используем Apache Beam на Python и помогли перенести его на Python 3, поскольку Python 2 больше не является поддерживается после 1 января 2020 года. В настоящее время Beam поддерживает Python 3 начиная с версии 2.11. Python 3.5 - 3.7 в основном портирован, за исключением VCF IO и набора текста. В настоящее время мы также работаем над добавлением поддержки синтаксиса, специфичного для Python 3, например аргументов, содержащих только ключевые слова.

Самым большим отличием между Python 2 и 3 является другой способ обработки байтов и строк. В Python 2 строки могут быть байтами или закодированными данными. Это приводит к множеству проблем, особенно при работе с неанглийскими текстовыми данными. В Python 3 строки по умолчанию являются Unicode.

Нам понравился саммит Beam, и мы с удовольствием узнали о грядущих событиях в сообществе Apache Beam. Увидимся в следующем году!

О ML6

Мы - команда экспертов по ИИ и самая быстрорастущая компания в области ИИ в Бельгии. Имея офисы в Генте, Амстердаме, Берлине и Лондоне, мы создаем и внедряем системы самообучения в различных секторах, чтобы помочь нашим клиентам работать более эффективно. Мы делаем это, оставаясь на вершине исследований, инноваций и применяя наш опыт на практике. Чтобы узнать больше, посетите www.ml6.eu.