- 博客(58)
- 收藏
- 关注
原创 Kafka磁盘写满日志清理操作
最近项目组的kafka集群,老是由于应用端写入kafka topic的消息太多,导致所在的broker节点占满,导致其他的组件接连宕机。这里和应用端沟通可以删除1天之前的消息来清理磁盘,并且可以调整topic的消息存活时间。
2023-10-24 10:32:24
3506
原创 Yarn的NodeLabel配置
YARN Node Labels特性支持将YARN NodeManager节点进行分区管理。因为一个节点只能设置属于某一个Node Label,所以可以使用 Node Label将整个YARN集群划分为不相交的节点集合。默认节点属于DEFAULT分区(,空字符串)。exclusive分区:只允许请求和该分区匹配的容器调度到该分区的节点上。non-exclusive分区:除了分配该分区容器请求外,还允许在有空闲资源时将请求为DEFAULT分区的容器调度上来(或请求未特殊制定分区)。
2023-09-13 11:24:45
636
原创 通过HbaseClient来写Phoenix表实现
由于数据存储在Hbase上,并且上层使用了Phoenix来读写数据。并且由于数据的列字段不固定,并且可能由于Hbase表列和Phoenix的表列字段不一致,使用Phoenix写入的数据会导致写出报错的问题出现。所以这里直接使用HbaseClient写入到Hbase表中,再使用Phoenix查询就能查询到数据。,并且不加的话,会导致Phoenix写入的和HbaseClient写入的,字段的编码不一致,导致Phoenix读取的时候读取不到数据。是表示禁用Phoenix表的列映射。
2023-09-07 14:49:50
732
转载 Springboot启动扩展点接口超详细总结
一般情况下,Spring通过反射机制利用bean的class属性指定支线类去实例化bean,在某些情况下,实例化Bean过程比较复杂,如果按照传统的方式,则需要在bean中提供大量的配置信息。使用场景:用户可以扩展这个类,来为要实例化的bean作一个代理,比如为该对象的所有的方法作一个拦截,在调用前后输出一行log,模仿。可以看到,该类用于执行各种驱动接口,在bean实例化之后,属性填充之后,通过执行以上红框标出的扩展接口,来获取对应容器的变量。其作用是在bean的初始化阶段,如果对一个方法标注了。
2023-09-06 09:51:44
163
原创 Oracle Merge Into ORA-00001: unique constaint violated问题
最近使用Datax同步进行定时数据同步,并在同步完之后进行回调sql进行统计操作。回调SQL执行过程中,触发了的错误,其中USING部分的数据没有重复的,并且表中也没有和USING表中重复的,但是这里面的NAME和CLASSNO字段是有部分字段为NULL,ID部分有重复的值,然后这就导致了MERGE INTO的USING 关联的ON条件的时候判断为没关联上。但是在插入的时候,唯一索引判断重复了,所以对应的USING的数据集的ON部分的字段不能有为NULL的,否则会报唯一索引冲突的问题。
2023-09-01 16:12:27
1362
转载 Hudi 核心原理
本文阐述了 Hudi 相关的基本概念,如 Timeline、COW/MOR 表的定义,以及文件分布等内容,并针对核心功能如 Upsert、增量读取进行了原理解释,可以看到 Hudi 是以一个具有丰富功能的 Format 的形式存在,使用 merge-on-read 思想来实现 Upsert 的传输语义。
2023-04-21 23:19:05
369
1
原创 Flink相关的记录
SSTable 文件可以从操作系统的文件缓存中获取,在最坏的情况下,可以从本地磁盘获取,该缓存保存未压缩的表文件,如果包含这些文件。关于 Calcite 的架构,可以参考下图(图片来自前面那篇论文),它与传统数据库管理系统有一些相似之处,相比而言,它将数据存储、数据处理算法和元数据存储这些部分忽略掉了,这样设计带来的好处是:对于涉及多种数据源和多种计算引擎的应用而言,Calcite 因为可以兼容多种存储和计算引擎,使得 Calcite 可以提供统一查询服务,Calcite 将会是这些应用的最佳选择。
2023-02-14 18:13:14
863
原创 Quartz调度任务漏执行任务分析
tnft.getTime() > misfireTime 的条件,当这里判断当Trigger任务的触发时间点, 小于 不调度执行的Trigger的截止时间点的话,当前的Trigger任务本次不会被执行。之前线上的调度出现过,调度任务漏执行的情况,最后发现漏执行,百度了下基本确定是由于Quartz的线程池默认10线程,同一时间触发的任务太多导致任务被延迟,然后导致漏执行了。这里的代码执行,这里会判断当前的获取的Trigger是否触发执行。不会被执行的点在acquireNextTriggers中调用。
2023-01-18 18:47:11
3200
原创 Trino源码相关
命令,同时需要在管理员执行的Cygwin中执行编译命令,主要是涉及到一些目录的权限问题,同时在pom文件中找到。源码,根据README上的提示,安装Java 11.0.11+, 64-bit、maven3.6.3集以上。在windows上编译的时候建议安装Cygwin,并在里面执行编译命令,因为编译过程中会执行。-- 设置不执行该插件 -->然后在源码目录下执行。
2022-12-16 11:03:18
568
原创 Apereo Cas在项目中接入
Apereo CAS的一个功能就是单点登录,统一的登录登出接口与页面,让系统中的模块只需要关注在业务点,而把安全认证的功能交给统一认证来做。所以客户端的集成主要是单点登录的集成,客户端指定需要做安全认证的页面,然后Apereo CAS的安全包检测校验用户登录情况,并自动与CAS登录页面进行跳转交互。1、用户访问CAS Client请求资源2、客户端程序做了重定向,重定向到CAS Server。
2022-12-16 10:55:07
1493
原创 Kudu知识点
表类别:内部表内部表由 Impala 管理,当您从 Impala 中删除它时,数据和表会真正被删除。当您使用 Impala 创建新表时,它通常是一个内部表。外部表外部表(由 创建)不由 Impala 管理,删除此类表不会从其源位置(此处为 Kudu)删除该表。相反,它只删除了 Impala 和 Kudu 之间的映射。这是 Kudu 提供的用于将现有表映射到 Impala 的语法中使用的模式。表的复制因子TBLPROPERTIES ('kudu.num_tablet_replicas' = 'n')指定值,其
2022-12-07 09:28:02
957
原创 Flink MySQL CDC
Flink sqlclient使用方式下载flink-sql-connector-mysql-cdc-2.3-SNAPSHOT.jar放到.注意: flink-sql-connector-mysql-cdc-XXX-SNAPSHOT 版本为开发分支对应的代码。用户需要下载源代码并编译相应的jar。用户应该使用发布版本,例如flink-sql-connector-mysql-cdc-XXX.jar,发布版本将在 Maven 中央仓库中可用。为每个reader设置设置不同的每一个读取 binlog 的 MySQ
2022-12-07 09:26:36
3926
2
原创 Java POI操作Excel记录
复制单元格的值,以及复制之后的单元格上公式往下递增的操作。在excel中新增行和单元格。新增完行之后,或者拷贝了旧行上的公式之后,打开excel公式未计算。
2022-10-14 10:34:02
652
原创 Java并发编程核心概念
Java线程之间的通信由Java内存模型(本文简称为JMM)控制,JMM决定一个线程对共享 变量的写入何时对另一个线程可见。。本地内存是JMM的 一个抽象概念,并不真实存在。它涵盖了缓存、写缓冲区、寄存器以及其他的硬件和编译器优化。
2022-09-08 11:07:24
250
转载 规则引擎和 Flink CEP
结合了时序的上下文:如风控场景识别了作弊的行为序列后,给「先做 xx,后做 xx,再做 xx」的用户进行封禁;结合了否定的语义:如电商营销场景给「浏览商品后 10 分钟未下单的用户」发送优惠券;结合了自定义统计的语义:如实时监控场景为每个微服务设定监控规则,「第一次报警发生后,30s 内发生第二次报警」的情况进行报警升级;CEP 本身并没有脱离实时计算的范畴,所以绝大部分用户还是选择基于 Flink,或者已有的计算服务上去搭建相关的框架,CEP 对应的功能更多是以 library 的形式存在。
2022-09-06 15:58:12
1447
原创 我的Flink学习笔记
一、Flink的概念JobManager:它扮演的是集群管理者的角色,负责调度任务、协调 checkpoints、协调故障恢复、收集 Job 的状态信息,并管理 Flink 集群中的从节点 TaskManager。并且他由以下三个主要的组件组成:ResourceManager:ResourceManager负责Flink 集群中的资源释放/分配——它管理taskslots,这是 Flink 集群中资源调度的单位(参见TaskManagers)。 Flink 为不同的环境和资源提供者(例如 YARN、Kube
2022-08-23 22:33:25
564
原创 数仓SQL面试题(持续更新中...)
此种场景,一般先按照用户维度开窗,然后拿事件减去当前行的序号,就能将连续的数据得到相同的值,然后进行count:datediff(event_time, row_number over(partition by user_id order by event_time))。或者: row_number over(partition by 1 order by event_time) - row_number over(partition by user order by event_time)等。
2022-08-23 22:20:58
483
原创 Flink Cdc EOFException 的问题
今日公司有一个Flink Cdc的任务将mysql的binlog数据同步到kudu中,但是有一天凌晨开始间歇性的报异常,任务间歇性的重启。如下:翻遍了github issue:Debezium Connectors Throwing EOF / Connection reset while reading bin-logs · Issue #15 · osheroff/mysql-binlog-connector-java · GitHub最后在Debezuim的FAQ上找到了对此的解决方法:http
2022-07-05 15:30:32
4816
12
转载 Flink 本地运行日志配置
在 src/main/resources 中添加 log4j.properties 文件:方法二: 使用 logback.xml在 src/main/resources 中添加 logback.xml 文件:修改 pom.xml 配置在引入flink相关依赖之前引入logback相关依赖,如下:
2022-06-02 16:20:38
1793
原创 flink实现类似spark.yarn.jars的操作
通常flink打包的时候会依赖很多flink相关的依赖,最后打出来的jar包非常大。在spark里面on yarn模式下,我们可以在spark下,通过将spark jars上传到hdfs的目录下,然后在提交任务的时候指定spark.yarn.jars配置就可以实现,thin jar的方式提交,这样会节省很多的网络带宽资源。在flink1.11之后也可以实现这样的操作,如下:1.先将flink的依赖jar包等上传到hdfs的目录下:hdfs://myhdfs/remote-flink-dist-dir
2022-03-15 16:54:03
3015
原创 IDEA中生成火焰图
背景IntelliJ IDEA 与以下分析工具集成:Async Profiler:适用于 Linux 和 macOS 的 CPU 和内存分析工具。 Java Flight Recorder:Oracle 提供的 CPU 工具,可在 Linux、macOS 和 Windows 上使用。使用简介public class Demo { public static void main(String[] args) { for (int i = 0; i < 10
2022-01-11 17:41:50
4262
转载 mysql的加锁规则
在前一篇文章我讲了下 MySQL 的全局锁、表记锁和行级别锁,其中行级锁只提了概念,并没有具体说。因为行级锁加锁规则比较复杂,不同的场景,加锁的形式还不同,所以这次就来好好介绍下行级锁。对记录加锁时,加锁的基本单位是 next-key lock,它是由记录锁和间隙锁组合而成的,next-key lock 是前开后闭区间,而间隙锁是前开后开区间。但是,next-key lock 在一些场景下会退化成记录锁或间隙锁。那到底是什么场景呢?今天,我们就以下面这个表来进行实验说明。其中,id
2021-09-28 19:46:36
508
转载 mysql的update更新where不带索引字段导致死锁
昨晚在群划水的时候,看到有位读者说了这么一件事。大概就是,在线上执行一条 update 语句修改数据库数据的时候,where 条件没有带上索引,导致业务直接崩了,被老板教训了一波这次我们就来看看: 为什么会发生这种的事故? 又该如何避免这种事故的发生? 说个前提,接下来说的案例都是基于 InnoDB 存储引擎,且事务的隔离级别是可重复读。1为什么会发生这种的事故?InnoDB 存储引擎的默认事务隔离级别是「可重复读」,但是在这个隔离级别下,在多个事务并发的时候,.
2021-09-28 19:29:58
5158
1
转载 转载-MySQL中的重做日志(redo log),回滚日志(undo log),以及二进制日志(binlog)的简单总结
MySQL中有六种日志文件,分别是:重做日志(redo log)、回滚日志(undo log)、二进制日志(binlog)、错误日志(errorlog)、慢查询日志(slow query log)、一般查询日志(general log),中继日志(relay log)。其中重做日志和回滚日志与事务操作息息相关,二进制日志也与事务操作有一定的关系,这三种日志,对理解MySQL中的事务操作有着重要的意义。这里简单总结一下这三者具有一定相关性的日志。重做日志(redo log)作用: 确保事务的.
2021-08-19 11:09:44
290
原创 阿里云maven的仓库配置-20210419
1、阿里云官网的maven仓库引导页https://maven.aliyun.com/mvn/guide2、根据阿里云官网页介绍,配置镜像地址<mirror> <id>nexus-aliyun</id> <mirrorOf>public</mirrorOf> <name>Nexus aliyun</name> <url>https://maven.aliyun.com/repository/
2021-04-19 14:37:35
722
原创 Spark定时更新广播变量
1、Spark Streaming更新广播变量的方式在Driver端通过累加器数据来一条就判断是否需要更新广播变量,通过这种方式就可以实现定时更新广播变量的方式。lines.foreachRDD(rdd=>{ // 这里单例模式实例化广播变量 val dimTable = DimTable.getInstance(rdd.sparkContext) // 这里使用累加器保存上一次更新广播变量的时间 val currentAccumulatorI
2021-04-07 17:07:17
861
原创 Structured Streaming下Multiple Streaming Aggregations的支持
在Structured Streaming下面我们如果对一个Dataset,重复的去执行聚合操作,可能会报以下错误:Multiple streaming aggregations are not supported with streaming DataFrames/DatasetsMultiple mapGroupsWithStates are not supported on a streaming DataFrames/DatasetsMixing mapGroupsWithStat
2021-03-18 19:28:29
743
转载 一个值只有0和1的字段,到底要不要建索引?
关于数据库索引的所有文章,都会告诉你不要对这种字段建索引。但这些文章不会告诉你的一个事实是:如果表里面这个字段的值分布极度不均匀的情况下,而且你需要查询分布较少的记录的话,索引就非常有用了举个例子,假设表中有一千万条记录,某个状态为0的记录总数大概会有100条,那么你想查询状态为0的记录时,有没有索引影响非常大,而查询状态为1的记录,则索引基本无用。如果两种状态的记录数相差无几的话,索引也基本无用。所有的关于索引的文章,建议你不要为这种字段建索引的依据,都是以值分布是均匀为前提的。但如果值分
2021-03-05 19:50:46
1319
原创 clickhouse MergeTree序列表引擎
1、MergeTree1.1数据TTL1.1.1列级别TTL-- 创建一张包含列级别TTL的表create table test.ttl_table_v1 ( \id String, \ -- 主键字段不能被声明TTL表达式create_time DateTime, \ -- 需要依托对某个DateTime或Date类型字段的INTERVAL操作,来表达TTL的过期时间code String TTL create_time + INTERVAL 10 SECOND, \ -- 当系统
2021-03-05 11:58:59
434
原创 clickhouse集群安装记录
1、集群机器规划机器 分片号 副本号 192.168.1.172 1 1 192.168.1.173 1 2 192.168.1.174 2 1 192.168.1.175 2 2 安装的所有机器操作系统版本为Centos7,以下的安装操作分为本地安装和集群安装两部分2、单机安装2.1 检查是否支持 SSE 4.2 指令集 grep -q sse4_2 /proc/cpuinfo && e
2021-03-04 17:32:19
781
1
原创 hive的调优操作
1、 hive.fetch.task.conversion=more 该属性修改为 more 以后,在全局查找、字段查找、limit 查找等都不走mapreduce2、 当输入数据量很小的时候, 查询触发执行任务时消耗可能会比实际 job 的执行时间要多的多, Hive可以通过本地模式在单台机器上处理所有的任务。对于小数据集,执行时间可以明显被缩短//开启本地 mrhive.exec.mode.local.auto=true// 设置 local mr 的最大输入数据量,当输入数据量小于.
2021-03-01 10:15:56
327
原创 clickHouse MergeTree核心原理
ClickHouse在Centos、Redhat下的安装ClickHouse可以在任何具有x86_64,AArch64或PowerPC64LE CPU架构的Linux,FreeBSD或Mac OS X上运行。虽然预构建的二进制文件通常是为x86 _64编译并利用SSE 4.2指令集,但除非另有说明,否则使用支持它的CPU将成为额外的系统要求。这是检查当前CPU是否支持SSE 4.2的命令:grep -q sse4_2 /proc/cpuinfo && echo "SSE 4..
2020-11-07 22:07:02
782
原创 Java动态代理个人理解
静态代理模式如上就是一个简单的静态代理的实现类图。使用代理模式可以控制程序对 RealSubject 对象的访问,如果发现异常的访问,可以直接限流或是返回,也可以在执行业务处理的前后进行相关的预处理和后置处理,帮助上层调用方屏蔽底层的细节。例如,在 RPC 框架中,代理可以完成序列化、网络 I/O 操作、负载均衡、故障恢复以及服务发现等一系列操作,而上层调用方只感知到了一次本地调用。代理模式还可以用于实现延迟加载的功能。我们知道查询数据库是一个耗时的操作,而有些时候查询到的数据也并没有真正被
2020-11-01 16:10:11
96
原创 Docker的知识点
1、镜像操作命令 拉取镜像,使用 docker pull 命令拉取远程仓库的镜像到本地 ; 重命名镜像,使用 docker tag 命令“重命名”镜像 ; 查看镜像,使用 docker image ls 或 docker images 命令查看本地已经存在的镜像; 删除镜像,使用 docker rmi 命令删除无用镜像 ; 构建镜像,构建镜像有两种方式。第一种方式是使用 docker build 命令基于 Dockerfile 构建镜像,也是我比较推荐的镜像构建
2020-11-01 15:24:03
398
原创 Zookeeper核心知识点
ZooKeeper 核心概念ZooKeeper中的节点类型Apache ZooKeeper 是一个针对分布式系统的、可靠的、可扩展的协调服务,它通常作为统一命名服务、统一配置管理、注册中心(分布式集群管理)、分布式锁服务、Leader 选举服务等角色出现。很多分布式系统都依赖与 ZooKeeper 集群实现分布式系统间的协调调度,例如:Dubbo、HDFS 2.x、HBase、Kafka 等。ZooKeeper 已经成为现代分布式系统的标配。ZooKeeper 本身也是一个分布式应用程序,下图展
2020-11-01 10:50:46
229
原创 Linux下的性能监控
CPU监控首先介绍计算机中最重要的计算组件中央处理器 CPU,围绕 CPU 一般我们可以:通过 top 命令,来观测 CPU 的性能;通过负载,评估 CPU 任务执行的排队情况;通过 vmstat,看 CPU 的繁忙程度。1.top 命令 —— CPU 性能如下图,当进入 top 命令后,按 1 键即可看到每核 CPU 的运行指标和详细性能。CPU 的使用有多个维度的指标,下面分别说明:us 用户态所占用的 CPU 百分比,即引用程序所耗费的 CPU; sy 内核态所占
2020-10-26 22:35:16
214
原创 Spark任务提交执行(二)
Spark任务提交全流程的源码的类调用时序图本篇博客主要是Spark任务提交到执行的全流程中的第二部分:从在本地执行代码碰到Action算子进行runJob到最后Task提交到Executor上执行。1、RDD类中,Action算子触发任务提交1、这里RDD调用算子生成新的RDD的候,会把前一个RDD传入到下一个RDD的构造函数作为成员变量。2、当为Action算子的时候会调用SparkContext.runJob()去提交任务。并且在runJob()方法中调用了DAGSchedule.
2020-10-18 17:35:05
505
转载 yarn虚拟cpu和虚拟内存
虚拟cpu虚拟的cpu代码并发数,如果一个container拥有2个vcpu,那么该container就可以真正的在同一时间运行两个线程,而不是靠切时间片而达到的逻辑并发。所以一般虚拟的cpu需要和物理cpu的个数保持一致yarn的计算单元称为YCUs,其实就是把1个cpu分为n份,通常情况控制在1:1000左右,也就是说一个一核cpu可以被yarn分为1000个左右的YCUs,并在使用yarn的时候,可以配置使用多少YCUs。例如500个YCUs,那么其实得到的大概是1/2个核的cpu。.
2020-10-15 21:32:53
946
原创 三、虚拟机类加载机制
虚拟机类加载顺序类加载的时机类的生命周期:类的初始化的6个场景:1、遇到new、getstatic、putstatic(读取或设置一个类型的被fianl修饰的静态字段)或invokestatic(调用一个类的静态方法)这四条字节码指令时,如果没有初始化则需要先初始化。2、使用java.lang.reflect包的方法对类型进行反射调用的时候。3、当初始化类的时候,如果发现其父类还没有进行过初始化。4、当虚拟机启动时,用户需要指定一个要执行的主类(包含main()方法的那个类)
2020-09-22 22:31:55
73
原创 四、虚拟机字节码执行引擎
运行时栈帧结构Java虚拟机以方法作为最基本的执行单元,“栈帧”(Stack Frame)则是用于支持虚拟机进行方法 调用和方法执行背后的数据结构,它也是虚拟机运行时数据区中的虚拟机栈(Virtual Machine Stack)[1]的栈元素。栈帧存储了方法的局部变量表、操作数栈、动态连接和方法返回地址等信息和一些额外的附加信息。局部变量表局部变量表(Local Variables Table)是一组变量值的存储空间,用于存放方法参数和方法内部定义 的局部变量。在Java程序被编译为.
2020-09-22 22:29:32
405
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人