有没有遇到到flink cdc 拉数据进入hudi时,flink sql 可以查到?

在使用Flink CDC将数据拉取到Hudi时,我发现通过Flink SQL可以查看数据。在Hive中,可以看到表,但是在查询时却报错:“Error: Error while compiling statement: FAILED: SemanticException Line 0:-1 Invalid column reference 'TOK_ALLCOLREF' (state=42000,code=40000)”,另外Flink 1.17.2,CDC 3.0.0,Hive 3.1.3。在建立Hudi表时,我指定了'hive_sync.enable'='true','hive_sync.mode'='hms','hive_sync.metastore.uris'='thrift://192.168.3.245:9083','hive_sync.db'='test','hive_sync.table'='hudi_users',帮忙看一下怎么回事呢?

展开
收起
真的很搞笑 2023-12-31 21:18:32 198 分享 版权
阿里云 AI 助理回答

根据您提供的问题描述和知识库资料,以下是针对问题的详细分析和解决方案:


问题分析

  1. 错误信息解析
    错误信息 Error: Error while compiling statement: FAILED: SemanticException Line 0:-1 Invalid column reference 'TOK_ALLCOLREF' 表明在Hive中查询Hudi表时,SQL语句无法正确解析列引用。这通常与以下原因相关:

    • Hudi表的元数据未正确同步到Hive Metastore。
    • Hive版本与Hudi或Flink CDC的兼容性问题。
    • 查询语法或表结构定义存在问题。
  2. 环境配置分析
    您的环境配置如下:

    • Flink版本:1.17.2
    • Flink CDC版本:3.0.0
    • Hive版本:3.1.3
    • Hudi表同步参数:
      'hive_sync.enable'='true',
      'hive_sync.mode'='hms',
      'hive_sync.metastore.uris'='thrift://192.168.3.245:9083',
      'hive_sync.db'='test',
      'hive_sync.table'='hudi_users'
      

    根据知识库资料,Hudi表支持通过Spark或Flink建表和写入数据,但Hive仅支持查询。因此,问题可能出在Hudi表的元数据同步或Hive查询兼容性上。


解决方案

1. 检查Hudi表的元数据同步

确保Hudi表的元数据已正确同步到Hive Metastore。可以通过以下步骤验证:

  • 检查Hive Metastore中的表结构
    使用Hive CLI或Beeline连接到Hive,执行以下命令查看表结构:

    DESCRIBE FORMATTED test.hudi_users;
    

    确保表的元数据(如列名、数据类型等)与Hudi表一致。如果表结构不完整或缺失,说明同步失败。

  • 重新同步Hudi表到Hive
    如果发现元数据未正确同步,可以尝试重新同步。在Flink SQL中创建Hudi表时,确保以下参数正确配置:

    'hive_sync.enable'='true',
    'hive_sync.mode'='hms',
    'hive_sync.metastore.uris'='thrift://192.168.3.245:9083',
    'hive_sync.db'='test',
    'hive_sync.table'='hudi_users'
    

    然后重新运行Flink作业,确保Hudi表的元数据被正确写入Hive Metastore。

2. 检查Hive与Hudi的兼容性

根据知识库资料,Hudi表在Hive中仅支持查询,且需要确保Hive版本与Hudi版本兼容。以下是具体建议:

  • 确认Hudi版本
    您未明确提到Hudi版本,但Flink 1.17.2通常与Hudi 0.12.x或更高版本兼容。请确保使用的Hudi版本支持Hive 3.1.3。

  • 检查Hive查询语法
    在Hive中查询Hudi表时,避免使用通配符 *,而是显式指定列名。例如:

    SELECT id, name, age FROM test.hudi_users;
    

    这是因为Hudi表的列映射可能与Hive的默认解析方式不完全一致。

3. 验证Flink CDC与Hudi的集成

根据知识库资料,Flink CDC写入Hudi时需要正确配置Catalog和表结构。以下是关键点:

  • 检查Flink Catalog配置
    确保Flink中正确配置了Hive Catalog和Hudi Catalog。例如:

    CREATE CATALOG hive_catalog WITH (
      'type' = 'hive',
      'default-database' = 'test',
      'hive-version' = '3.1.3',
      'hive-conf-dir' = '/path/to/hive-conf/'
    );
    
  • 验证Flink SQL写入逻辑
    确保Flink SQL中写入Hudi表的逻辑正确。例如:

    CREATE TABLE hudi_users (
      id INT,
      name STRING,
      age INT
    ) WITH (
      'connector' = 'hudi',
      'path' = 'oss://bucket/path/to/hudi_users',
      'hive_sync.enable' = 'true',
      'hive_sync.mode' = 'hms',
      'hive_sync.metastore.uris' = 'thrift://192.168.3.245:9083',
      'hive_sync.db' = 'test',
      'hive_sync.table' = 'hudi_users'
    );
    

4. 调试与日志分析

如果上述步骤仍无法解决问题,建议启用调试日志以进一步分析:

  • 启用Flink调试日志
    在Flink配置文件中增加以下参数:

    log.level=DEBUG
    
  • 检查Hive日志
    查看Hive Metastore和HiveServer2的日志,定位具体的错误原因。


总结与建议

  1. 核心问题
    当前问题的核心可能是Hudi表的元数据未正确同步到Hive Metastore,或者Hive查询语法与Hudi表结构不兼容。

  2. 解决步骤

    • 检查并重新同步Hudi表的元数据到Hive Metastore。
    • 确保Hive版本与Hudi版本兼容,并避免使用通配符查询。
    • 验证Flink CDC与Hudi的集成配置是否正确。
  3. 重要提醒
    请确保Hudi表的元数据同步参数配置正确,并在Hive中显式指定列名进行查询

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

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

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

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