Flink CDC里flink on yarn模式下,从MySQL同步到Doris报错是为什么啊?

Flink CDC里flink on yarn模式下,从MySQL同步到Doris报错是为什么啊?同任务在standalone模式下就能顺利运行,不知道是哪里的编码问题?c9a1bc4a7aab2e16488bb33785135f35.png6a4e374adbea4bd6510d40b0c2d85339.pngflink run-application -t yarn-application \
-Dyarn.application.name="Sync_Mysql_to_Doris" \
-Dfile.encoding=UTF-8 \
-Dsun.jnu.encoding=UTF-8 \
-Dyarn.provided.lib.dirs="hdfs://wxcluster/flink-dist" \
-Dexecution.checkpointing.interval=30s \
-Dparallelism.default=3 \
-c org.apache.doris.flink.tools.cdc.CdcTools \
hdfs://wxcluster/flink-jars/flink-doris-connector-1.18-1.5.2.jar \
mysql-sync-database \
--database ods \
--job-name sync_mysql_todoris \
--table-prefix ods
\
--mysql-conf hostname=hadoop15 \
--mysql-conf username=root \
--mysql-conf password=admin \
--mysql-conf database-name=rhine3_user \
--including-tables "company" \
--sink-conf fenodes=hadoop43:8030,hadoop44:8030,hadoop45:8030 \
--sink-conf username=root \
--sink-conf password=admin \
--sink-conf jdbc-url=jdbc:mysql://hadoop43:9030 \
--sink-conf sink.label-prefix=doris_sink \
--table-conf replication_num=1

展开
收起
小小鹿鹿鹿 2024-02-06 19:50:43 125 分享 版权
阿里云 AI 助理回答

问题分析

根据您提供的信息,Flink CDC任务在 standalone 模式 下可以正常运行,但在 Flink on Yarn 模式 下报错。这表明问题可能与以下因素相关:

  1. 编码问题:您提到可能存在编码问题,并在命令中设置了 -Dfile.encoding=UTF-8-Dsun.jnu.encoding=UTF-8 参数。
  2. Yarn 环境配置:Flink on Yarn 模式依赖于 Hadoop 集群的环境配置,可能存在资源分配、依赖库加载或权限问题。
  3. 依赖库问题:Flink CDC 连接器和 Doris Sink 的依赖库是否正确加载到 Yarn 集群中。
  4. 任务并行度和资源配置:Yarn 模式下任务的并行度和资源分配可能导致性能瓶颈或异常。

以下是针对可能原因的详细分析和解决方案。


可能原因及解决方案

1. 编码问题

Flink on Yarn 模式下,任务运行在 Yarn 容器中,容器的默认编码可能与 standalone 模式不同。如果数据源(MySQL)或目标端(Doris)涉及非 ASCII 字符(如中文),可能会导致编码不一致问题。

解决方案: - 确保所有节点(包括 Flink Client、Yarn NodeManager 和 TaskManager)的编码设置为 UTF-8。 - 在提交任务时,明确指定编码参数:

-Dfile.encoding=UTF-8 \
-Dsun.jnu.encoding=UTF-8 \

您已经在命令中添加了这些参数,但需要确认 Yarn 容器内的 JVM 是否正确应用了这些设置。可以通过在任务日志中打印 System.getProperty("file.encoding") 来验证。


2. 依赖库加载问题

Flink on Yarn 模式下,任务依赖的 JAR 包需要通过 --classpathyarn.provided.lib.dirs 提供给 Yarn 容器。如果依赖库未正确加载,可能导致类找不到或版本冲突问题。

解决方案: - 确保 flink-doris-connector-1.18-1.5.2.jar 和其他必要的依赖库已上传到 HDFS 路径 hdfs://wxcluster/flink-jars/。 - 验证 yarn.provided.lib.dirs 参数是否正确指向依赖库路径:

-Dyarn.provided.lib.dirs="hdfs://wxcluster/flink-dist"
  • 如果仍然报错,可以尝试将依赖库直接打包到用户 JAR 中,避免依赖外部路径。

3. Yarn 资源配置问题

Flink on Yarn 模式下,任务的资源分配由 Yarn 管理。如果资源不足或配置不当,可能导致任务失败。

解决方案: - 检查 Yarn 集群的资源使用情况,确保有足够的内存和 CPU 资源。 - 增加 TaskManager 的资源分配,例如:

-Dtaskmanager.memory.process.size=4096m \
-Dtaskmanager.numberOfTaskSlots=3 \
  • 如果任务并行度较高(如 parallelism.default=3),确保每个 TaskManager 的 Slot 数量足够。

4. MySQL CDC Source 配置问题

MySQL CDC Source 的配置可能在 Yarn 模式下出现问题,例如 server-id 冲突或 Binlog 读取失败。

解决方案: - 确保每个 MySQL CDC 数据源配置了唯一的 server-id。可以通过动态 Hints 配置 server-id

'server-id' = '5400-6400'
  • 检查 MySQL 的 Binlog 配置,确保 Binlog 格式为 ROW,并且 Binlog 保留时间足够长。

5. Doris Sink 配置问题

Doris Sink 的配置可能在 Yarn 模式下出现问题,例如连接超时或写入失败。

解决方案: - 检查 Doris 的 FE 节点地址和端口是否正确:

--sink-conf fenodes=hadoop43:8030,hadoop44:8030,hadoop45:8030
  • 确保 Doris 的 JDBC URL 和用户名密码正确:
    --sink-conf jdbc-url=jdbc:mysql://hadoop43:9030 \
    --sink-conf username=root \
    --sink-conf password=admin
    
  • 如果 Doris 写入性能较低,可以调整 Doris 的副本数(replication_num)和批量写入大小。

6. 日志排查

如果上述方法无法解决问题,建议通过日志进一步排查: - 查看 Flink JobManager 和 TaskManager 的日志,定位具体的错误信息。 - 检查 Yarn 容器的日志,确认是否有资源不足或依赖加载失败的问题。


总结

根据您的描述,问题可能与 编码设置依赖库加载Yarn 资源配置 有关。建议按照以下步骤逐一排查: 1. 确认 Yarn 容器内的编码设置为 UTF-8。 2. 确保所有依赖库已正确加载到 HDFS 路径。 3. 检查 Yarn 集群的资源分配,增加 TaskManager 的内存和 CPU。 4. 验证 MySQL CDC Source 和 Doris Sink 的配置是否正确。

如果问题仍未解决,请提供具体的错误日志,以便进一步分析。您可以复制页面截图提供更多信息,我可以进一步帮您分析问题原因。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

还有其他疑问?
咨询AI助理