Hudi: Понимание файлов JAR Apache Hudi в AWS EMR и AWS Glue
Использование Apache Hudi на AWS: первоначальная настройка, интеграция с Glue, отличия EMR, работа с ошибками и проблемы совместимости с версиями Spark.
Введение
Прошло почти три года с тех пор, как я начал использовать Apache Hudi в среде AWS. Изначально я использовал Apache Hudi на Amazon Glue. Чтобы использовать Apache Hudi на Amazon Glue, нужно было создать пакет Hudi из AWS Marketplace как плагин и прикрепить его к Amazon Glue. Я не уверен, что это по-прежнему так, поскольку с тех пор я перешел на использование Amazon EMR на EKS.
Что происходит, когда плагин Apache Hudi подключается к Amazon Glue?
Когда Amazon Glue настроен на использование Apache Hudi, пакеты Hudi (JAR-файлы, скомпилированные Amazon EMR) загружаются из Amazon S3 в среду выполнения задания Glue во время инициализации. Этот процесс можно наблюдать во всех журналах Amazon Glue.
Взаимосвязь между Amazon Glue и Amazon EMR
Если я все правильно понимаю, Amazon Glue использует инфраструктуру Amazon EMR. Поэтому, когда я говорю о Amazon EMR, я подразумеваю и Amazon Glue.
Работа с ошибками в Apache Hudi на Amazon EMR
Хотя Apache Hudi и предлагает отличную функциональность, все же в каждом выпуске могут появляться все новые и новые ошибки и одновременно исправляться существующие. Сложно разрабатывать программное обеспечение без ошибок, и Apache Hudi не является исключением.
Если в версии Apache Hudi, предоставляемой Amazon EMR, присутствует какая-либо ошибка, Вы можете использовать пакеты Hudi из OSS (Maven), которые содержат исправления. Вы можете найти их здесь:
Являются ли пакеты Hudi в Amazon EMR такими же, как в Maven?
Несколько лет назад я задался вопросом, являются ли пакеты Apache Hudi в Amazon EMR такими же, как в Maven? Чтобы получить четкий ответ, я отправил соответствующий запрос в службу поддержки AWS. В то время мне сообщили, что Amazon EMR не изменяет исходный код Hudi.
Недавно (13.06.2024) исследуя проблему, связанную с Hudi 0.14.1, я снова задал тот же вопрос. На этот раз мне сообщили, что Amazon EMR применяет некоторые внутренние исправления к релизам Hudi, но эти исправления не распространяются публично.
Это означает, что комплекты Apache Hudi в Amazon EMR могут отличаться от тех, что доступны в Maven.
Почему я задал этот вопрос Amazon EMR
Недавно я экспериментировал с Hudi 0.14.1 на Amazon EMR 7.1.0. В этой среде версия Spark - 3.5.0, которая не поддерживается Hudi 0.14.1. Для поддержки Spark 3.5.0 в Apache Hudi требуется патч (GitHub PR #9717), который включен в Hudi 0.15.0.
Поэтому, по логике вещей, использование Hudi 0.14.1 в Amazon EMR 7.1.0 имеет смысл только в том случае, если Amazon EMR применяет дополнительные исправления к релизу Apache Hudi.
Сегодня Amazon EMR подтвердила, что они не используют релизы Apache Hudi напрямую, а применяют только некоторые внутренние исправления.
Пакеты Apache Hudi в Amazon EMR в сравнении с Maven
При использовании пакетов Apache Hudi на Amazon EMR достаточно загрузить JAR, предоставляемый Amazon EMR (например, hudi-spark3-bundle_2.12-0.14.0-amzn-0.jar).
Если же Вы используете пакеты Hudi из Maven, то Вам также необходимо загрузить hudi-aws-bundle-<hudi-version>.jar. Это связано с тем, что несколько релизов назад AWS отделила код в Hudi, связанный с сервисами AWS (например, Amazon Glue Data Catalog).







