flink + hudi с каталогом dfs, jdbc-connector не работает

Вопрос или проблема

Я использую Hudi с Flink. У меня есть таблица MySQL с именем stu4.

Без каталога всё работает. Но с каталогом DFS я не могу считать данные из исходной таблицы.

таблица в Hudi:

create table stu4(
  id bigint not null,
  name string,
  school string,
  PRIMARY KEY (id) NOT ENFORCED
) with (
  'connector' = 'jdbc',
  'url' = 'jdbc:mysql://hadoop2:3306/test',
  'username' = 'root',
  'password' = '*******',
  'table-name' = 'stu4'
);

без каталога:

select * from stu4;

2024-10-22 17:26:12,202 WARN  org.apache.flink.yarn.configuration.YarnLogConfigUtil        [] - Каталог конфигурации ('/bigdata/flink/conf') уже содержит файл конфигурации LOG4J. Если вы хотите использовать logback, пожалуйста, удалите или переименуйте файл конфигурации журнала.
2024-10-22 17:26:12,223 INFO  org.apache.hadoop.yarn.client.DefaultNoHARMFailoverProxyProvider [] - Подключение к ResourceManager на hadoop1/10.211.55.20:8032
2024-10-22 17:26:12,223 INFO  org.apache.flink.yarn.YarnClusterDescriptor                  [] - Не указан путь к jar-файлу Flink. Использую расположение класса org.apache.flink.yarn.YarnClusterDescriptor для поиска jar
2024-10-22 17:26:12,231 INFO  org.apache.flink.yarn.YarnClusterDescriptor                  [] - Найден веб-интерфейс hadoop1:43613 приложения 'application_1729525785030_0003'.

+----+----------------------+--------------------------------+
| op |                   id |                           name |
+----+----------------------+--------------------------------+
| +I |                    3 |                              1 |
| +I |                    4 |                              2 |
| +I |                    5 |                              3 |
+----+----------------------+--------------------------------+
Получено всего 3 строки

с каталогом:

select * from stu4;

2024-10-22 17:30:25,787 WARN  org.apache.flink.yarn.configuration.YarnLogConfigUtil        [] - Каталог конфигурации ('/bigdata/flink/conf') уже содержит файл конфигурации LOG4J. Если вы хотите использовать logback, пожалуйста, удалите или переименуйте файл конфигурации журнала.
2024-10-22 17:30:25,803 INFO  org.apache.hadoop.yarn.client.DefaultNoHARMFailoverProxyProvider [] - Подключение к ResourceManager на hadoop1/10.211.55.20:8032
2024-10-22 17:30:25,804 INFO  org.apache.flink.yarn.YarnClusterDescriptor                  [] - Не указан путь к jar-файлу Flink. Использую расположение класса org.apache.flink.yarn.YarnClusterDescriptor для поиска jar
2024-10-22 17:30:25,807 INFO  org.apache.flink.yarn.YarnClusterDescriptor                  [] - Найден веб-интерфейс hadoop1:43613 приложения 'application_1729525785030_0003'.

+----+----------------------+--------------------------------+
| op |                   id |                           name |
+----+----------------------+--------------------------------+
Получено всего 0 строк

конфигурация каталога:

CREATE CATALOG hoodie_catalog
  WITH (
    'type'='hudi',
    'catalog.path' = '/tmp/hudi_catalog',
    'mode'='dfs'
  );

USE CATALOG hoodie_catalog;

Ответ или решение

Введение

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

Описание проблемы

Пользователь создал таблицу в Hudi, подключившись к MySQL через JDBC. Когда он выполняет запросы без каталога, данные успешно считываются. Однако, после того, как он настроил использование каталога Hudi, запрос возвращает 0 строк. Вот пример запросов:

Без каталога:

SELECT * FROM stu4;

Результат:

+----+----------------------+--------------------------------+
| op |                   id |                           name |
+----+----------------------+--------------------------------+
| +I |                    3 |                              1 |
| +I |                    4 |                              2 |
| +I |                    5 |                              3 |
+----+----------------------+--------------------------------+
Received a total of 3 rows

С каталогом:

SELECT * FROM stu4;

Результат:

+----+----------------------+--------------------------------+
| op |                   id |                           name |
+----+----------------------+--------------------------------+
Received a total of 0 rows

Анализ возможных причин

  1. Конфигурация каталога:

    • Ваша конфигурация каталога выглядит корректной с точки зрения синтаксиса, однако стоит проверить правильность пути к каталогу Hudi и его доступность для Flink. Важно удостовериться, что указанный путь /tmp/hudi_catalog действительно существует и у Flink есть права на запись в него.
  2. Разные контексты исполнения:

    • Без каталога данные считываются напрямую, тогда как при вызове с использованием каталога Flink может обращаться к разным контекстам исполнения или ресурсам. Это может привести к ситуации, когда данные не доступны в контексте, определяемом каталогом Hudi.
  3. Настройки подключения:

    • Проверьте настройки JDBC, особенно параметры url, username, password и table-name. Убедитесь, что они совместимы с конфигурацией вашего MySQL. Возможно, что при переключении на каталог, Flink пытается выполнить подключения с использованием другой конфигурации или пользователя.
  4. Version Mismatch:

    • Убедитесь, что используемые версии Flink, Hudi и MySQL совместимы друг с другом. Также проверьте, что зависимости на все используемые библиотеки корректны и актуальны.
  5. Кэширование данных:

    • Если вы использовали Hudi с поддержкой выполнения запланированных операций по чтению/записи данных, возможно, что результат выполнения запроса к таблице кэшируется. Проверьте настройки кэширования.

Рекомендации по решениям

  1. Проверка доступности каталога:
    Убедитесь, что /tmp/hudi_catalog доступен и имеет правильные права доступа для процесса Flink.

  2. Изменение конфигурации каталога:
    Попробуйте использовать другой путь для конфигурации каталога или временно отключите кэширование Hudi, чтобы проверить, получаете ли вы данные.

  3. Логи и диагностика:
    Активируйте более детализированный уровень логирования для Flink и Hudi, чтобы получить дополнительную информацию о процессе работы с каталогом.

  4. Обновление версий:
    Убедитесь, что все компоненты вашей системы обновлены до последних стабильных версий.

  5. Отладка с помощью уникальных идентификаторов:
    Попробуйте создать новый тестовый идентификатор и добавить записи в таблицу Hudi. Это позволит вам проверить, видит ли Flink новые данные в контексте каталога.

Заключение

Без учета точной настройки конфигурации и использования правильных путей и привилегий, взаимодействие между Flink, Hudi и MySQL может приводить к ошибкам при обращении к данным. Следуя приведенным рекомендациям и тщательно проверьте настройки, вы сможете решить проблему с отсутствием данных при использовании каталога.

Оцените материал
Добавить комментарий

Капча загружается...