Nano Hash - криптовалюты, майнинг, программирование

Повторное использование объекта Flink: изменить объекты ввода?

У меня есть потоковое приложение Flink, которое тратит примерно 20% своего процессорного времени на Kyro.copy. Я могу избежать этого, включив режим повторного использования объектов, но у меня есть небольшая проблема: я хотел бы изменить объекты ввода для своих операторов.

Общий контракт для режима повторного использования объектов, кажется, гласит: Не изменяйте входные объекты и не запоминайте входные объекты после возврата из функции карты. Вы можете изменять объекты после output и повторно испускать их. (например: слайд 6)

Теперь мой вопрос: если я немедленно удалю все ссылки на объекты после output-добавления их из моих операторов, безопасно ли изменять входные объекты? Или есть какая-то другая комбинация правил, которая может сделать безопасным изменение входных объектов?


Ответы:


1

Да, было бы безопасно. Но обратите внимание, что немедленное удаление также означает, что вы не можете использовать их в качестве ключа в картах, и это также означает бэкэнд состояния кучи (вы можете использовать его для поиска, но вам нужно будет создать копию при модификации). Таким образом, для простых цепочек карт это должно работать хорошо, но перед использованием объединений, окон и группировки я бы дважды проверил их или создал свои собственные защитные копии в соответствующих местах.

Кстати, если вы хотите повысить производительность, почти всегда рекомендуется отказаться от сериализации Kryo. Kryo замедлит любой сетевой трафик, если он у вас есть. Если это так, попробуйте использовать POJO, некоторые хорошо поддерживаемые форматы, такие как Avro, или напишите свой собственный сериализатор. Это, безусловно, улучшит производительность больше, чем повторное использование объектов. Этот абзац не применяется, если у вас нет сетевых каналов.

04.03.2020
  • К сожалению, эти сообщения (динамические?) JSON, и я думаю, что мало что могу сделать, чтобы превратить их в нечто большее, чем Map<String, Object>. Так нет выбора, кроме Крио? Кроме того, мне любопытно: даже если у меня нет сетевых каналов, я все равно получу Kryo.copy с несколькими операторами. Итак (исключая сборщик мусора), стоимость снизится примерно вдвое, но не будет 0? 11.03.2020
  • Если тип значения фиксированный (всегда строковый), вы можете использовать сериализатор карт Flinks или даже карту Avro. В противном случае вы застряли там, где находитесь. Я всегда рекомендую не использовать динамический JSON (например, без схемы) и потратить время на создание схем, чтобы сэкономить хранилище, процессор и сделать разработку лучше, но если у вас нет контроля над источником, вы обречены. 11.03.2020
  • Kryo.copy обычно используется между связанными операторами, если повторное использование объекта отключено. Но также при трансляциях и объединениях вам необходимо реплицировать элементы, если включено повторное использование объектов (почти везде, где одна повторно используемая запись не используется сразу). 11.03.2020
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..