Вопрос или проблема
Я использую 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;
Ответ или решение
Проблема интеграции Flink и Hudi с использованием каталога DFS и JDBC-коннектора
Введение
При работе с 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
Анализ возможных причин
-
Конфигурация каталога:
- Ваша конфигурация каталога выглядит корректной с точки зрения синтаксиса, однако стоит проверить правильность пути к каталогу Hudi и его доступность для Flink. Важно удостовериться, что указанный путь
/tmp/hudi_catalog
действительно существует и у Flink есть права на запись в него.
- Ваша конфигурация каталога выглядит корректной с точки зрения синтаксиса, однако стоит проверить правильность пути к каталогу Hudi и его доступность для Flink. Важно удостовериться, что указанный путь
-
Разные контексты исполнения:
- Без каталога данные считываются напрямую, тогда как при вызове с использованием каталога Flink может обращаться к разным контекстам исполнения или ресурсам. Это может привести к ситуации, когда данные не доступны в контексте, определяемом каталогом Hudi.
-
Настройки подключения:
- Проверьте настройки JDBC, особенно параметры
url
,username
,password
иtable-name
. Убедитесь, что они совместимы с конфигурацией вашего MySQL. Возможно, что при переключении на каталог, Flink пытается выполнить подключения с использованием другой конфигурации или пользователя.
- Проверьте настройки JDBC, особенно параметры
-
Version Mismatch:
- Убедитесь, что используемые версии Flink, Hudi и MySQL совместимы друг с другом. Также проверьте, что зависимости на все используемые библиотеки корректны и актуальны.
-
Кэширование данных:
- Если вы использовали Hudi с поддержкой выполнения запланированных операций по чтению/записи данных, возможно, что результат выполнения запроса к таблице кэшируется. Проверьте настройки кэширования.
Рекомендации по решениям
-
Проверка доступности каталога:
Убедитесь, что/tmp/hudi_catalog
доступен и имеет правильные права доступа для процесса Flink. -
Изменение конфигурации каталога:
Попробуйте использовать другой путь для конфигурации каталога или временно отключите кэширование Hudi, чтобы проверить, получаете ли вы данные. -
Логи и диагностика:
Активируйте более детализированный уровень логирования для Flink и Hudi, чтобы получить дополнительную информацию о процессе работы с каталогом. -
Обновление версий:
Убедитесь, что все компоненты вашей системы обновлены до последних стабильных версий. -
Отладка с помощью уникальных идентификаторов:
Попробуйте создать новый тестовый идентификатор и добавить записи в таблицу Hudi. Это позволит вам проверить, видит ли Flink новые данные в контексте каталога.
Заключение
Без учета точной настройки конфигурации и использования правильных путей и привилегий, взаимодействие между Flink, Hudi и MySQL может приводить к ошибкам при обращении к данным. Следуя приведенным рекомендациям и тщательно проверьте настройки, вы сможете решить проблему с отсутствием данных при использовании каталога.