提交flink任务失败记录

博客作者通过分析log日志发现,clickhouse的jdbc依赖的guava-19.0.jar与集群中的guava-27.0.jar版本冲突,导致运行错误。解决方法是下载guava-27.0.jar替换低版本,从而消除冲突。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

报错信息如下:

发现并不能看出任何问题(一顿百度,都是奇奇怪怪的回答,都没解决)

还是要仔细观察log日志才能发现问题,不要乱百度

yarn上查看logs日志的报错信息

发现clickhouse的jdbc依赖的这个guava-19.0.jar 是小版本

任务打包提交到集群和集群的guava-27.0.jar,这两个版本冲突,导致一直报错

可以去网上下载这个27的jar替换一下就没问题

### Flink 任务告警方法及其实现 #### 方法一:基于日志文件的监控 通过配置 Log4j 或其他日志框架,可以设置特定的日志级别来捕获错误信息并触发告警。当检测到 ERROR 或 WARN 级别的日志条目时,可以通过邮件或其他即时通讯工具发送通知给管理员。 ```java logger.error("Task failed due to an exception", e); ``` 这种方法依赖于良好的日志记录习惯以及有效的日志解析能力[^1]。 #### 方法二:利用 Metrics API 实现性能指标监测 Apache Flink 提供了一套内置的 metrics system 来收集作业执行期间的各种统计信息。开发者可以根据这些数据设定阈值,在超过预设范围时发出警告信号。 ```java env.getConfig().disableSysoutLogging(); env.configureMetricsScopeInfo(scope, "myJob"); MetricGroup metricGroup = env.getMetricGroup(); metricGroup.gauge("customGaugeName", new Gauge<Integer>() { @Override public Integer getValue() { return someValue; } }); ``` 这种方式能够及时发现潜在问题所在,并采取相应措施加以解决[^2]。 #### 方法三:集成外部报警服务(如 Prometheus + Alertmanager) Prometheus 是一款开源的时间序列数据库,常用于微服务架构下的监控场景;而Alertmanager 则负责管理由前者产生的各类预警事件。两者结合起来可用于构建高度定制化的Flink 应用程序健康状况监视体系。 安装部署完成后只需简单几步即可完成对接: - 启动参数中加入 `metrics.reporter.prom.class=org.apache.flink.metrics.prometheus.PrometheusReporter`; - 配置好对应的 endpoint 地址以便 prometheus 可以拉取到 flink 的 metrics 数据; - 编写 alert rules 文件定义何时何地应该触发什么样的提醒动作。 上述操作均已在官方文档中有详细介绍[^3]。 #### 方法四:自定义 SourceFunction 中断逻辑 如果应用程序本身具备较强的业务特性,则可以在 source function 层面添加额外判断条件,一旦满足即刻终止整个流处理过程并向外界传达异常情况的发生。 ```scala class MySource extends RichParallelSourceFunction[String]{ override def run(ctx: SourceContext[_]): Unit ={ while (!isCanceled){ try{ val record = fetchRecord() ctx.collect(record) }catch { case ex: Exception => println(s"Error occurred during fetching records:${ex.getMessage}") cancel() } } } override def cancel():Unit={ super.cancel() } ``` 这种做法虽然直接有效但也容易造成资源浪费,因此需谨慎考虑适用场合。 #### 方法五:借助 Checkpointing 和 Savepoints 功能恢复失败节点 Checkpoint 定期保存正在运行的任务状态快照至持久化存储介质上;savepoint 类似但允许手动控制存档时机。二者均可帮助快速定位故障源头并通过重启的方式恢复正常运作模式而不丢失任何已处理过的输入项。 启用 checkpoint 设置如下所示: ```yaml execution.checkpointing.interval : 60s state.backend.type : rocksdb restart-strategy.failure-rate.max-failures-per-interval : 3 ``` 以上配置片段摘录自实际生产环境中的最佳实践案例集锦。 #### 方法六:采用 Side Output 处理旁支数据流 Side output 允许我们将不符合预期标准的数据单独分流出来做进一步分析或特殊对待。比如遇到脏数据时可以选择将其暂存在 side stream 而不是立即抛出异常中断主线程工作进度。 创建侧输出标签对象实例代码如下: ```java OutputTag<String> dirtyDataTag = new OutputTag<>("dirty-data"){}; DataStream<Tuple2<Long, String>> mainStream = ... mainStream.process(new ProcessFunction<...>(...) { private transient ListState<String> listState; @Override public void open(Configuration parameters) throws Exception { ValueStateDescriptor<String> descriptor = new ValueStateDescriptor<>(...) listState = getRuntimeContext().getListState(descriptor ); } @Override public void processElement(ProcessFunction<..., ...>.Context ctx, Collector<Tuple2<Long, String>> out) throws Exception { if (isValid(input)){ out.collect(Tuple2.of(timestamp , input)); }else{ ctx.output(dirtyDataTag,"Invalid data:" +input); } } }).getSideOutput(dirtyDataTag).print(); // 打印sideoutput的结果 ``` 这段脚本展示了如何优雅地分离正常与非正常的两条不同走向的信息传递路线图谱。 #### 方法七:运用 Watermark 控制时间窗口边界 Watermarks 表达的是事件发生的先后顺序关系而非绝对时刻点位。合理规划 watermark generator 参数有助于提高系统的容错性和灵活性,防止因乱序到达而导致误判进而影响最终决策准确性。 下面是一个简单的周期性生成固定延迟水印的例子: ```java stream.assignTimestampsAndWatermarks( new BoundedOutOfOrdernessTimestampExtractor<Event>(Time.seconds(5)) { @Override public long extractTimestamp(Event element) { return element.timestamp; }}); ``` 此处假设所有上游组件都能保证不超过指定时限内提交最新版本号,否则可能引起连锁反应致使整体结构失衡紊乱不堪收拾的局面出现。 #### 方法八:结合 Tracing 工具进行全链路跟踪诊断 Distributed tracing 技术使得跨多个独立进程之间的调用链条变得清晰可见易于理解掌握全局视角下各个部分之间相互作用规律特征。Jaeger、Zipkin 等知名项目都支持同 Apache Flink 平台无缝衔接从而达成这一目标。 为了开启 Zipkin 收集器功能,需要先引入相应的 Maven 依赖库包: ```xml <dependency> <groupId>io.zipkin.brave</groupId> <artifactId>brave-instrumentation-http</artifactId> <version>${zipkin.version}</version> </dependency> <dependency> <groupId>io.zipkin.reporter2</groupId> <artifactId>zipkin-sender-okhttp3</artifactId> <version>${zipkin.sender.okhttp3.version}</version> </dependency> ``` 之后按照官方指引逐步调整应用内部接口设计使之兼容远程上报协议格式要求即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值