前言

Iceberg是我们去年年底(2020)开始调研,目前上线了130多张表。主要用于流量日志清洗,数据报表,推荐特征基础数据。至今为也算是积累了一些使用及定位问题经验。 这篇文章会介绍两个线上Iceberg表查不到数据/快照文件的问题,希望对大家有帮助。

一.Rewrite操作有可能会误删数据文件

现象:

​ 如图: 线上一张Iceberg表的合并任务运行一段时间后开始报错找不到数据文件。

当时找到运维查看删文件的用户和机器,定位出来是合并文件程序所在的机器。最后在合并任务日志中发现了这个异常 如图 (当时忘记保存,相同异常的截图冒充的,所以没有图截方法栈)。在BaseRewriteDataFilesAction.java中发现了问题。

原因:

先解释下 CommitStateUnknownException: 在iceberg向hive Metastore提交报错时,Iceberg会重新去Hive Metastore查询一遍刚才有没有提交成功(有可能代理原因hive是提交成功的)。这时如果Iceberg尝试几次向hive查询查ceberg表都报错,这个时候因为没有办法确定提交的的状态是成功还是失败。就会抛 CommitStateUnknownException。

在Rewrite操作提交的异常处理时,因为没有考虑这种 "提交状态不明确的异常",直接将合并过的文件直接删除做"回滚"操作。但是在hive metastore中已经提交成功, 导致下次在查询时 因为新提交的快照引向被删除的元数据文件导致的。

解决办法:

如图,当抛 CommitStateUnknownException异常时不要删这些文件,如果这次提交是提交失败,这些文件会被RemoveOrphanFile操作删掉。

0.12.x之后,spark使用新版本的rewrite api这个问题已经解决了。如果使用iceberg 0.12以前版本的(spark/flink) rewrite action 或者0.12.x的flink rewrite action (目前使用旧的rewrite api)。出现数据文件丢失可以考虑下这种情况。

二.iceberg表快照过期时间过短导致一些查询时间长的查询语句

现象

业务方反映查询iceberg表报快照及manifest文件丢失问题。运维童鞋帮查询是是合并程序删除的(合并程序包含rewrite和expireSnapshot)

排查

发现这个快照的生成时间是上午8点多, 9点多这个快照便被合并程序过期。这个查询程序在开始查询的时候,这个快照是最新的快照。由于查询时间比较长,两个小时后这个查询程序的第n个阶段开始正式读这张表时候发现这个快照文件已经被删了

结论

这个问题的原因:这张表的快照过期时间设置得实在太短了。导致稍微耗时的查询就会出现这种问题。调长snapshot过期时间问题就解决了

Iceberg学习日记(1) 定位两个线上Iceberg查不到文件的问题的更多相关文章

  1. 用“逐步排除”的方法定位Java服务线上“系统性”故障(转)

    一.摘要 由于硬件问题.系统资源紧缺或者程序本身的BUG,Java服务在线上不可避免地会出现一些“系统性”故障,比如:服务性能明显下降.部分(或所 有)接口超时或卡死等.其中部分故障隐藏颇深,对运维和 ...

  2. 最近两周我们接触到的两种线上抓娃娃机的技术实现方案(一种RTSP/一种RTMP)

    线上抓娃娃机需求 最近线上抓娃娃机的项目火爆了,陆陆续续几十款线上抓娃娃机上架,还有一大波正在开发上线中,各大视频云提供商都在蹭热度发布自己的线上抓娃娃机方案,综合了一下,目前线上抓娃娃机的视频需求无 ...

  3. 转:一篇讲线上优化查 CPU的脚本

    原文链接:https://my.oschina.net/leejun2005/blog/1524687   摘要: 本文主要针对 Java 服务而言 0.背景 经常做后端服务开发的同学,或多或少都遇到 ...

  4. matplotlib学习日记(六)-箱线图

    (一)箱线图---由一个箱体和一对箱须组成,箱体是由第一个四分位数,中位数和第三四分位数组成,箱须末端之外的数值是离散群,主要应用在一系列测量和观测数据的比较场景 import matplotlib ...

  5. [推荐]两款Flash上传插件(1)–CFUpdate文件批量上传组件

    搞开发的同学都知道,网上可搜到的可用的Flash图片上传的组件少之又少,可定制界面,不需要安装组件,且可免费用于任何商业系统的,更是凤毛麟角,如果你和我一样,迫切需要一款这样的一款组件的话,不妨试试C ...

  6. Arthas - Java 线上问题定位处理的终极利器

    前言 在使用 Arthas 之前,当遇到 Java 线上问题时,如 CPU 飙升.负载突高.内存溢出等问题,你需要查命令,查网络,然后 jps.jstack.jmap.jhat.jstat.hprof ...

  7. 一次性搞清楚线上CPU100%,频繁FullGC排查套路

    “ 处理过线上问题的同学基本上都会遇到系统突然运行缓慢,CPU 100%,以及 Full GC 次数过多的问题. 当然,这些问题最终导致的直观现象就是系统运行缓慢,并且有大量的报警. 本文主要针对系统 ...

  8. 排查Java线上服务故障的方法和实例分析

    前言 作为在线系统负责人或者是一个技术专家,你可能刚刚接手一个项目就需要处理紧急故障,或者被要求帮忙处理一些紧急的故障,这个时候的情景是: (1)你可能对这个业务仅仅是听说过,而不怎么真正了解: (2 ...

  9. 线上环境HBASE-1.2.0出现oldWALs无法自动回收情况;

    正常情况下,hmaster会定期清理oldWALs文件夹,一般该文件大小也就几百兆,但是我们线上 环境出现了该文件没有自动回收情况,如图: 该目录占用hdfs空间多达7.6T,浪费空间: 后来经过多番 ...

随机推荐

  1. 【LeetCode】316. Remove Duplicate Letters 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...

  2. 【LeetCode】760. Find Anagram Mappings 解题报告

    [LeetCode]760. Find Anagram Mappings 解题报告 标签(空格分隔): LeetCode 题目地址:https://leetcode.com/problems/find ...

  3. isEmpty 和 isBlank 的区别

    一般使用Apache commons-lang3 工具包: commons-lang3 是专业的工具包,功能非常齐全.强大. 1.isEmpty 判断字符串是否为空字符串,只要有一个任意字符(包括空白 ...

  4. 强强联袂!腾讯云TDSQL与国双战略签约,锚定国产数据库巨大市场

    日前,腾讯云计算(北京)有限责任公司与北京国双科技有限公司签署了<国产数据库产品战略合作协议>,双方将在数据库技术方面展开深度合作,通过分布式交易型数据库的联合研发.产品服务体系建设.品牌 ...

  5. CS229 机器学习课程复习材料-线性代数

    本文是斯坦福大学CS 229机器学习课程的基础材料,原始文件下载 原文作者:Zico Kolter,修改:Chuong Do, Tengyu Ma 翻译:黄海广 备注:请关注github的更新,线性代 ...

  6. Java面向对象笔记 • 【第9章 JDBC编程】

    全部章节   >>>> 本章目录 9.1 JDBC基础 9.1.1 JDBC简介 9.1.2 JDBC常用API简介 JDBC 常用API功能说明 9.1.3 JDBC编程步骤 ...

  7. [学习笔记] RabbitMQ的简单使用

    安装依赖 # composer.json { "require": { "php-amqplib/php-amqplib": ">=2.9.0& ...

  8. pymysql防止SQL注入的方法

    import pymysql class Db(object): def __init__(self): self.conn = pymysql.connect(host="192.168. ...

  9. ModelForm has no model class specified

    未指定模型类,错误发生在把model拼写错误 来自为知笔记(Wiz)

  10. centos7 alias别名永久生效

    进入/etc/profile.d/目录 cd /etc/profile.d/ 在profile.d目录随意创建一个sh文件,例如alias_test.sh vi alias_test.sh##里面的内 ...