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文件对应的数据文件,只能自己去想其他办法后补了。

posted @ 2022-09-15 13:10  硅谷工具人  阅读(430)  评论(0)    收藏  举报
成功之道,在于每个人生阶段都要有不同的目标,并且通过努力实现自己的目标,毕竟人生不过百年! 所有奋斗的意义在于为个人目标实现和提升家庭幸福,同时能推进社会进步和国家目标! 正如古人讲的正心诚意格物致知,修身齐家治国平天下。