自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

三石

knowledge is power

  • 博客(127)
  • 收藏
  • 关注

原创 Could not complete the pending checkpoint xx. Failure reason: Failure to finalize checkpoint

CheckpointException: Could not complete the pending checkpoint xx. Failure reason: Failure to finalize checkpoint

2022-09-15 12:30:22 736 1

原创 记一次大数据读写的性能优化 iceberg

背景我司开发了一个非常牛的基础设施,产品的定位可以参考 Apache Hudi,也有一点 Apache Iceberg 的影子。我这边负责的实现主要是 Flink 的写入和 Spark 的读取,开发后就是最有意义的性能调优了~优化除去最基本的通过打印日志排查到底是哪个步骤执行时间较长不谈,着重讲一讲如何通过内存和CPU情况来定位性能问题。内存优化在数据写入阶段,观察 Flink 的 TM 进程,发现其有频繁的 FGC,使用 MAT 工具 dump 后发现并不存在大对象问题。操作步骤如下:// 查

2021-06-30 11:32:15 522

原创 Apache Iceberg 问题记录

问题一、Apache Iceberg 0.11 版本的源码编译后对 Spark Test 进行运行的时候报错:Error:scalac: Output path /Users/wulei/IdeaProjects/iceberg/spark2/out/test/classes is shared between: Module 'iceberg.iceberg-spark2.jmh' tests, Module 'iceberg.iceberg-spark2.test' tests Please conf

2021-04-28 16:02:43 981

原创 Apache Iceberg planTasks 流程分析

最近阅读了 Iceberg 项目中 FlinkSource 和 FlinkSink 的实现,上一篇文章[1]其实都有带过一笔,今天就总结下 Iceberg 如何做 plan 的,无论是数据读取或者小文件合并,都需要对底层文件进行 Scan 和 Plan,生成最后可供计算(如Flink、Spark)引擎或者查询(AP,如SparkSQL、Presto)引擎执行的 SubTasks,或者叫做 Splits,以此进行分布式并发计算。Iceberg 对比 Hudi 经常拿来说道的就是其 API 抽象更优雅,这里就介

2021-03-12 20:31:43 543

原创 数据湖 IncrementalPuller 实现分析

本文说讨论的IncrementalPuller是指 Hadoop 数据的增量查询,有两种场景,batch 模式下查询是指一次性返回所有或者有变化的数据,steaming 模式下查询是指连续返回所有数据并接着只返回有变化的数据,或者只返回有变化的数据,这取决于用户如何指定 increment scan 的 snapshot。IncrementalPuller 配合数据的 Row Level Delete(即数据的update、delete)即可以实现Incremental processing on...

2021-03-04 10:20:52 1541 4

原创 Apache Iceberg 关于 Merge-on-Read(Row-Level Delete) 总结

引言本次分享的出发点是为了理清楚 iceberg 是如何实现 MOR 的,以此作为解决 arctic MOR 相关问题的参考,问题:delta 增量数据文件的格式是否与 base 保持一致 delta 增量数据文件是否需要拆分为 insert 和 delete 两部分 delete 文件的格式规范如何设计,兼顾数据摄取的吞吐量和查询效率 实现 MOR 后,minor compaction 和 major compaction 是如何设计的在Iceberg 中 MOR 相关的功能是在 Ic..

2021-02-24 19:44:54 5755 4

原创 Presto 杂记

~/apache-hive-2.1.1-bin$ bin/hive --service hiveserver2SLF4J: Class path contains multiple SLF4J bindings.SLF4J: Found binding in [jar:file:/home/sloth/apache-hive-2.1.1-bin/lib/log4j-slf4j-impl-2.4.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]SLF4J:

2021-01-28 09:12:07 158

原创 Azkaban 调研

待验证的问题Azkaban 能否避免一个作业的并发调度,即当前一个作业还在运行中,该作业再次到达调度时间时能否被控制不调度 ?一个作业是否能适配多条调度规则,如每小时调度一次,同时在每天12:30调度一次 ?多条调度规则之间是否可以控制,当调度冲突时的处理策略是什么 ?问题1不可以。确实设置调度规则为串行调度后会按照串行调度,在上一个作业没有运行完毕后,不会再调度相同的作业,哪怕到达了调度时间。 但是需要注意的是,这里的作业执行完毕是指对 Azkaban 而言,如果我们用异步 shell 脚

2021-01-19 13:47:57 248

原创 Flink 作业启动耗时统计

本次统计分为两行,第一行表示每个 TaskManager 含有 1 个 Slot,第二行表示每个 TaskManager 含有 5 个 Slot,分别统计在拉起不同 TM 数量的所需耗时,单位是秒。统计方法为当 flink 作业被提交到 Yarn 上为开始时间(startTime),当作业初始化完毕相应的 TaskManager 个数为结束时间(在 flink web ui 上可见为准,endTime),耗时 duration = endTime - startTime。通过表格可以发现,在 Flin

2021-01-18 14:12:17 947 1

原创 实时数据湖-Merge On Read

Hudi按照我的理解,我们一般所说的 MOR 与 Hudi 中的 MOR 不同,我们强调的是 query,而 Hudi 中指的是 table type。Hudi 中真正对应的我们的是视图(query type) 中的近实时视图(Snapshot Queries):在此视图上的查询将查看某个增量提交操作中数据集的最新快照。该视图通过动态合并最新的基本文件(例如parquet)和增量文件(例如avro)来提供近实时数据集(几分钟的延迟)。当前支持 Hudi 近实时视图的查询引擎如下图Hudi 实时

2021-01-08 10:17:32 2892 3

原创 Flink1.11 Application Mode Submit Job 通过 Java API 的方式提交作业到 Yarn (实时计算平台)

实时计算平台

2020-12-04 15:29:34 3427 6

原创 Flink-跟着问题读源码:CheckPoint超时问题总结

最近一段时间处理的业务数据量的增长和处理流程的复杂性,导致flink实时作业不仅仅局限于结果正确,更多的精力放在了性能优化上,接下来对近期CheckPoint时长优化进行总结。我们都知道checkpoint的重要性,整体过程如下:JobManager 向 Source 算子发送 Barrier ,初始化Checkpoint,即JM向Source发起Trigger操作;各个Source 算子一旦收到 Barrier 之后,开始Init自身的State,并同时向下游发送 Barrier;下游算子收到

2020-09-10 16:43:27 2331 6

原创 Flink-跟着问题读源码:近24小时或者近XX小时这种SlidingEventTimeWindows相关的问题

问题描述这周接到一个新需求,近24小时的用户行为标签偏好跑分,实现的算法逻辑非常复杂,需要对用户的各类行为分别统计并求出比例,再配合各种时间衰减因子、反作弊数据等等。下面针对这次的开发总结下自己的心得,主要是flink window和state方面。join维表之前预先聚合,否则CP失败近24小时的window可以拆分为5分钟维度onTimerwatermark的多次申明timestamp必须是毫秒否则数据无法输出,也不报错,并且过滤脏数据,Java中对数的使用,防止负数...

2020-08-21 15:28:27 918

原创 Flink-跟着问题读源码:提交作业时未返回yarn applicationId

问题描述在公司做flink实时计算平台时,需要将flink jar提交到yarn上后获取applicationId,以此来处理后续的状态控制。但是在升级flink1.9.0到flink1.10.1后,突然无法从日志中解析得到applicationId了。方案很有意思,最后验证表明,服务端日志和客户端日志可以采用两套日志体系,首先client代码我们公司都是使用logback的,于是,当1、Server端为logback时,即/lib下的包为logback-classic-1.2.3.jar、logb

2020-08-17 17:16:27 1058

原创 Flink-跟着问题读源码:ChangelogSocketExample源码示例无效

flink-examples-table模块的ChangelogSocketExample.java是一个很好的example * <p>In particular, the example shows how to * <ul> * <li>create factories that parse and validate options, * <li>implement table connectors, * <li&

2020-08-16 10:30:47 184

原创 FlinkKafkaProducer采用EXACTLY_ONCE异常

使用Flink提供的 FlinkKafkaProducer 写入kafka数据的时候,相同的代码相同的环境下,Semantic.AT_LEAST_ONCE 策略一切正常,但是当切换到 Semantic.EXACTLY_ONCE 时,flink作业异常如下:org.apache.kafka.common.KafkaException: Unexpected error in InitProducerIdResponse; The transaction timeout is larger than the

2020-08-12 11:06:52 3080 3

原创 flink问题记录

在flink上跑一个算法的离线指标,报错如下。Map (Map at com.wwdz.recsys.home.ItemFilterDay$.main(ItemFilterDay.scala:186)) -> Combine (GroupReduce at org.apache.flink.api.scala.GroupedDataSet.first(GroupedDataSet.scala:480)) (5/8) (96228117fa07e01079d3cba5f0dc742b) switche

2020-07-30 09:46:43 11211 7

原创 Flink-历史(批/离线)数据冷启动总结

在做用户画像标签时,很多实时指标都需要追溯历史数据,如用户截止此刻的订单数,需要将用户有史以来的所有订单数进行统计,而实时数据一般只能回溯7天。这种情况下就需要先将离线数据预先加载到sink端,或者将数据保存到FlinkState中去。如果离线数据的计算结果在mysql中,那么可以使用类似维表的方式直接进行Stream操作加载离线写入State,实时作业以此restore理论上是可以的,但是按照我上面的写法,代价比较大,因为我的作业中有subtask会处于Finished状态,导致不会触发ch.

2020-07-28 16:03:07 2828 1

原创 flink 源码阅读-准备

fork flink源码到本地git clone [email protected]:apache/flink.git报错如下:Cloning into 'flink'...The authenticity of host 'github.com (13.229.188.59)' can't be established.RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.Are you sure you

2020-07-23 11:23:53 357

原创 Flink-跟着问题读源码:从Savapoint重启报错The new state serializer cannot be incompatible

flink相比于其他流计算引擎的一个非常大的优势在于它灵活可靠的状态管理机制,定时的快照可以保证实时计算的连续性与准确性,但是当后续的计算逻辑发生一定程序的变化时,并不能完全保证从原状态完整的恢复。文章主要分为三部分:问题复现及源码分析flink state ttl的设置和创建flink checkpoint在taskmanager中对state的快照1、问题概要商品热度值的flink实时计算作业的chekcpoint state size越来越大,于是计划对一个月内无任何分享、出价、收.

2020-07-17 14:11:04 2278 1

原创 Flink ROW_NUMBER()-排行榜和去重

flink官网链接:https://ci.apache.org/projects/flink/flink-docs-release-1.10/dev/table/sql/queries.html该flink sql的函数主要有两个功能,TOP-N和Deduplication,测试如下测试代码,并nc -lk 9999package com.wwdz.bigdata.flink.streaming.source;import org.apache.flink.api.common.functions

2020-07-03 11:57:06 4291 5

原创 flink监控prometheus/influxdb + grafana企业实战

本文档为实时计算相关的监控系统的整体说明,记录监控系统相关的部分细节。监控大盘如图:功能点对Flink集群(服务器)进行监控对源头数据源与目的数据源进行监控对指标作业进行监控告警方案对比当前市场上最为火热的时序数据库为influxdb与prometheus,可视化展示都为grafana。个人理解influxdb与prometheus的区别主要为:在大多数资料中提及对fli...

2020-04-17 09:16:04 1459

原创 Redis 定期删除ZSet中无效的Member

如果使用redis zset结构,key不能直接设置过期时间,又想对member设置过期删除时,可以使用这个脚本根据score进行过期删除。大家可以参考下,score的格式需要自定义调整下。删除脚本redis-del-keys.sh (main)#!/bin/bash##redis主机IPhost=$1##redis端口port=$2##redis端口password=$3##r...

2020-04-17 08:42:57 3947

原创 Redis规范

Redis Key 命名规范建议英文字母全部大写key的长度需要权衡,键名长占资源,性能差;短可读性差。建议Key的前缀在2~4个单词单词与单词之间以英文冒号:分开每个DB具有特定的业务块,故Key上无需说明所属模块,如DB1表示直播间,内部Key无需带上‘LiveRoom’Key前缀的最后一个单词说明主键含义,多个字段组成的主键之间用下划线分隔,如X:X:USERID:123,X:...

2020-04-17 08:37:14 129

原创 Flink问题整理_wl

1、本地启动flink报错“Caused by: java.lang.NoClassDefFoundError:org/apache/flink/streaming/api/functions/source/SourceFunction”将flink-java和flink-streaming-java_${scala.binary.version}这两个依赖由provided改为compile...

2020-04-16 21:36:27 749

原创 Flink 消费Kafka的有趣现象:固定时间、固定数量的堆积

  今天和同事遇到一个非常有趣的问题,在Kafka监控页面上可以看到该topic的消息会堆积到10万条左右,然后再很快的消费完毕归为0,然后又开始堆积到10万条左右,时间间隔都是3分钟。第一反应,反压? 但是反压的也太整齐了吧。看了一眼代码,哈哈,CheckPoint的时间间隔是3分钟,而且是Exactly_Once的。  所以这3分钟的延迟是必须付出的代价了,算不上问题...

2020-03-31 19:08:00 1850 3

原创 定期整理-todo

Failed to rollback to checkpoint/savepoint hdfs. Cannot map checkpoint/savepoint state for operator to the new program, because the operator is not available in the new program. If you want to a...

2020-03-24 18:01:00 572

原创 flink源码笔记-待整理

入口类CliFrontendLinkedHashMap accessOrder default=false=insertion-orderSystem.setOut 重定向输出流getManiFest get main class-d detach模式, false 可以运行任务后无需再控制台保持连接JobID implement Comparable 内部实现compareT...

2020-03-13 11:25:00 165

原创 未知死亡-观后感

1、感动,贫穷的女孩好不容易用全部家当买了一辆小车,当听到男孩母亲生病需要钱时就把车子卖了。以后我也要如此2、尊重印度,这个电影完全不一样,音乐剧情,每个国家都有好的一面,任何地方都有好人与坏人3、善良、美丽、爱情、执着、爱 这些才是活着的体现...

2020-03-10 14:10:00 233

原创 flink metric checkpoints 平台化

flink平台化中,需要根据flink自身提供的restful api来获取作业checkpoints列表展示,以及根据checkpoint进行启动前的存在性校验。restful api参考官网https://ci.apache.org/projects/flink/flink-docs-release-1.9/monitoring/metrics.html需要特别注意的是:1、...

2020-02-26 17:42:00 279

原创 hadoop启动后jps命令后未找到NameNode服务

如题,按照官方文档启动部署hadoop,https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/SingleCluster.html或https://www.cnblogs.com/hello-/articles/9600269.html但是在执行‘$ sbin/start-dfs.sh...

2020-02-25 18:14:00 2667 1

原创 flink杂记

flink运行命令:./bin/flink run -c myflink.SocketWindowWordCount tmp/my-flink-project-0.1.jar保存savepoint./bin/flink savepoint 3be198ab34a38c524a7ee805cd082038 /opt/third/flink/flink-1.7.2/tmp/根据s...

2020-02-23 22:02:00 70

原创 启动springboot项目的时候,后台报错 The main resource set specified [/tmp/tomcat-docbase.xx.xx] is not valid...

启动springboot项目的时候,后台报错The main resource set specified [/tmp/tomcat-docbase.xx.xx] is not valid。磁盘满了,把/tmp下的文件删除一部分即可

2020-01-13 16:26:00 1267

原创 多线程之join的理解

join() ,与sleep()(不释放锁)、wait()(释放锁)方法都属于多线程运行控制常用方法。 join()的作用类似与排队,比如ThreadA调用了ThreadB的join()方法,则ThreadA会进入阻塞状态,ThreadB会一直运行,知道ThreadB结束后ThreadA才会继续执行。 场景比如,主线程需要等待子线程的运行结果进行汇总,如果主线程先于子线程运行完...

2019-11-16 10:22:00 136

原创 大型集团内部数据采集方案设计

当大型集团内部、如总公司和子公司之间需要进行数据交换、采集时,其中总公司是Hive数据源,两个NameNode,30个DataNode的高可用集群,子公司一般是Mysql数据源,总公司与各个子公司之间都是网络隔离的。                  现在我们首先考虑的业务场景是总公司对各个子公司进行数据采集,也就是子公司将mysql上的数据同步到总公司的hive数...

2019-09-19 09:44:00 536

原创 NameNode服务异常:Timed out waiting 20000ms for a quorum of nodes to respond

FATAL org.apache.hadoop.hdfs.server.namenode.FSEditLog: Error: flush failed for required journal (JournalAndStream(mgr=QJM to [10.0.22.103:8485, 10.0.22.104:8485, 10.0.22.105:8485, 10.0.22.100:84...

2019-08-13 20:44:00 1579 1

原创 docker安装GreenPlum

https://my.oschina.net/xiaozhublog/blog/2249525 https://blog.csdn.net/TN947/article/details/78794297 想重新启动gp报错 删除container sudo docker rm f91cf8a96...

2019-08-03 15:47:00 1603

原创 抑制apache.parquet.hadop包大量打印无效日志(Datax-HDFS)

 使用datax在同步mysql->hive时发现parquet一直在打印日志,严重影响了正常日志的查看 解决方案如下 step 1 : 修改datax的logback.xml发现无效, 在这里改来改去测试了半天, 后来得出结论, logback.xml根本控制不住这个包下的日志 step 2 : 直接更改hive源码jar包https://www.jians...

2019-08-03 15:26:00 531

原创 个人工作杂记

一、某日SAAS环境磁盘水位过高,一共500G,已经被占用了450G以上,故查看hdfs各目录分别占用多少空间,1、hadoop fs -help (若熟悉命令,可忽略)2、hadoop fs -du -h /发现是/hive下数据量突出3、hadoop fs -du -h /hive继续找到是哪个schema和table的数据量最大,一般是hive/user/warehous...

2019-04-16 17:10:00 123

原创 实时同步

近期开始接触真正的实时同步,之前接触的SparkStreaming偏重于实时计算,kafka和flume只能算简单的数据同步,如今正式开始做产品化的数据同步项目。特此记录一些知识点。 客户收到磁盘阈值超限报警,进入服务器后,执行df -h可以查看服务器整体磁盘占用情况: 然后可以查看具体目录下的占比,比如cd /,然后执行du -sh * ...

2019-03-26 19:23:00 111

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除