• org.apache.iceberg.exceptions.NotFoundException: Failed to open input stream for file:hdfs://ns1/user/hive/warehouse/iceberg_ods.db/xxxxxx/metadata/xxx.metadata.json


    做机器迁移,导致flink程序写iceberg失败,原因是hive的元数据存储库mysql停了一段时间。
    然后flink出现以下异常,

    org.apache.iceberg.exceptions.NotFoundException: Failed to open input stream for file: hdfs://ns1/user/hive/warehouse/iceberg_ods.db/ods_xxx/metadata/17120-4d647bb0-6caa-4ea1-a8e4-8ed8fc0f3922.metadata.json
    

    网上找了半天,终于发现了一个解决方法,可以读出表中的数据来,但是那个metadata关联的文件数据会有部分丢失。

    解决方法:
    (1) 先查询到该表对应的元数据的目录中其他的元数据信息。

    hdfs dfs -ls /user/hive/warehouse/iceberg_ods.db/ods_xxx/metadata/17120-*.metadata.json
    

    (2)下载相近的一条元数据文件

    hdfs dfs -get /user/hive/warehouse/iceberg_ods.db/ods_xxx/metadata/17543-e503a667-eaef-4bfd-91ec-7c8079206ec7.metadata.json
    

    (3)将该文件重命名为刚才报错的文件名

    mv 17543-e503a667-eaef-4bfd-91ec-7c8079206ec7.metadata.json 17120-4d647bb0-6caa-4ea1-a8e4-8ed8fc0f3922.metadata.json
    

    (4)然后将该文件上传到刚才的meta目录。

    hdfs dfs -put 17120-4d647bb0-6caa-4ea1-a8e4-8ed8fc0f3922.metadata.json /user/hive/warehouse/iceberg_ods.db/ods_xxx/metadata/
    

    然后再查询表信息就不会出错了,其实简单来说就是找个文件替换。
    至于缺失的按个meta文件对应的数据文件,只能自己去想其他办法后补了。

  • 相关阅读:
    Linux系统命令与权限
    有关Linux目录相关内容
    Linux的命令以及基本使用
    操作系统的基本知识与Linux系统简介
    IT知识架构与操作系统简介
    windows下nginx支持php的配置
    提权操作函数
    c++内存中字节对齐问题详解 [ 转载 ]
    STL 容器效率的对比
    C++ 四种类型转换的介绍
  • 原文地址:https://www.cnblogs.com/30go/p/16696193.html
Copyright © 2020-2023  润新知