自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(111)
  • 收藏
  • 关注

原创 Iceberg的V2格式

这是我的第102篇原创文章【V1与V2简介】Iceberg在V1的格式中定义了,如何使用不可变类型的文件(Parquet、ORC、AVRO)来管理大型分析型的表,包括元数据文件、属性、数据类型、表的模式,分区信息,以及如何写入与读取。而在V2的格式中,在V1的基础上增加了如何通过这些类型的表实现行级别的更新与删除功能。其最主要的改变是引入了delete file记录需要删除的行数据,这样可以在不重...

2023-05-01 11:37:19 1087

原创 kafka的controlled shutdown请求

这是我的第101篇原创文章【背景】kafka基于k8s容器化部署后,对容器设置了存活探针,即检测监听端口是否存在。然而一次kill kafka进程的操作,服务的重启时间(supervisor会自动再拉起kafka进程)超过了存活探针的监测时间,导致pod重启。本文就该问题展开进行分析。【kill背后的逻辑】对于以SIGTERM信号(不带参数的默认发送信号)进行的kill操作,kafka broke...

2023-04-11 23:17:23 520

原创 浅谈iceberg的存储文件

这是我的第100篇原创文章【前言】上一篇文章介绍了如何通过java api对iceberg进行操作。这次我们来聊聊iceberg里的存储文件。iceberg中的持久化存储的文件可以简单的分为数据文件和元数据文件。数据文件就是存储数据记录的文件,而元数据文件又可以分为元数据描述文件、清单列表文件(manifest list),或者根据文件名又可以称为快照文件、以及清单文件(manifest file...

2023-03-17 22:00:35 1085

原创 iceberg的java api使用

【前言】了解一个组件的最好方式是先使用该组件,今天我们就来聊聊如何通过java api对iceberg进行操作。为什么是选择api进行介绍,而不是更通用的flink、spark、hive等。一方面是觉得flink、spark使用iceberg的介绍网上已经有很多,官网的介绍也比较清晰,而java api的介绍则相对少些;另一方面,不管是flink,spark最终都还是调用这些基本的api完成相关的...

2023-03-11 00:00:02 2010 6

原创 kafka事务剖析

【kafka事务简介】在kafka的0.11版本中,引入了kafka事务的特性,确保在一个事务中发送的多条消息,要么都成功,要么都失败。这里说的多条消息可以是发送给不同topic的多个消息。kafka事务机制的使用,更多的是在流式计算中,从消息源获取消息,然后通过一系列计算最后发送到kafka的场景中,保证每条消息恰好被计算一次,从而实现输入输出端到端的Exactly Once的语义。【事务的使用...

2023-03-04 23:11:34 655

原创 avro格式详解

【Avro介绍】Apache Avro是hadoop中的一个子项目,也是一个数据序列化系统,其数据最终以二进制格式,采用行式存储的方式进行存储。Avro提供了:丰富的数据结构可压缩、快速的二进制数据格式一个用来存储持久化数据的容器文件远程过程调用与动态语言的简单集成,代码生成不需要读取或写入数据文件,也不需要使用或实现RPC协议。代码生成是一种可选的优化,只值得在静态类型语言中实现。基于以上这些优...

2023-02-24 22:50:28 4886

原创 kafka的消费者组(下)

上一文对消费者组的一些概念,基本原理进行了简单描述,本文继续来聊聊消费者组中另外一个比较重要的内容:偏移量的存储。【消费者偏移量的提交】1.消息消费的整体流程介绍消费者在成功加入消费者组,并得到分配的分区信息后,对分配的分区依次向服务端发送请求获取上一次提交的偏移信息,并在内存中记录获取到的偏移量信息;随后向服务端发送fetch(消息)请求,在该请求中就包含了内存中记录的偏移量信息,即从指定位置...

2023-02-08 23:31:03 318

原创 kafka的消费者组(上)

最近在排查一个sparkstreaming在操作kafka时,rebalance触发了一个异常引起任务失败,而组内小伙伴对消费者组的一些基本知识不是很了解,所以抽了些时间进行相关原理的整理。本文就来聊聊相关内容。【消费者组的基本原理】在kafka中,多个消费者可以组成一个消费者组(consumer group),但是一个消费者只能属于一个消费者组。消费者组保证其订阅的topic的每个分区只能分配给...

2023-01-13 23:52:14 1679

原创 kafka的消息持久化文件

最近排查kafka的问题,涉及到了kafka的消息存储,本文就相关内容进行总结。我们都知道,topic是有分区(partition)的概念的, 生产者往同一个topic发送的消息最终是发送到了不同的分区里面。也就是说,一个topic里的消息是由该topic下所有分区里的消息组成的。在同一个分区里,消息是有序的,而不同分区中,消息是不能保证有序的。有了这个简单认识后,自然可以知道,每个分区仅会存储该...

2023-01-03 23:22:13 567

原创 issue:yarn-11396

在容量调度方式中,队列的capacity参数是作用于单个用户可以使用的资源上限,这个在文章《YARN——正确理解容量调度的capacity参数》一文中详细讲解过。然而,最近一次发测自验过程中,发现单个用户提交的任务,其资源使用超过了队列的capacity配置参数,甚至是几乎用满了集群的全部资源。本文就该问题进行分析总结。前两天,在版本发测自验时,同事运行了一个flink任务,然后去吃饭了,回来正准...

2022-12-17 06:50:22 155

原创 kafka之ranger插件的一个坑

之前文章写过kafka的鉴权,以及集成ranger插件的配置使用。但真正在用起来后,发现里面有个坑,本文就来聊聊这个坑的情况以及排查过程。【问题现象】kafka在集成了ranger插件实现鉴权功能后,发现过一段时间后,controller无法正确连接上broker,并有如下报错:// server.log中的日志[2022-12-0615:32:48,068] ERROR [Controlle...

2022-12-09 22:58:04 1263

原创 kafka中 DescribeLogDirs请求参数引起的一个问题

某天,测试人员找到我,反馈说CI的kafka用例失败了,麻烦定位一下。"麻烦先找下我们的小马甲——公共服务",这句话还没发出去,对方已经先把环境信息给发了过来。想想应该是个小问题,索性直接先看了。然后习惯性的登录到环境,先看下进程在不在、端口有没有监听、能不能生产消费后,发现一切都正常后,服务本身好像没什么毛病。这才问了下测试的兄弟,是什么用例失败,具体表现是怎样的?测试:“喏,所有请求都正常,唯...

2022-11-19 23:15:03 611

原创 一次flink任务重试失败的问题分析

【背景】在研究flink任务失败重试的过程中,遇到了一个问题,具体表现为:在任务重试时,出现与NN连接失败,触发新的一次重试,然后重复此流程,直到达到重试上限后,任务失败退出。本文就总结下整个问题的分析过程,以及涉及到的相关知识点。【问题分析过程】首先查看了任务的日志,发现有如下关键信息:INFO org.apache.hadoop.io.retry.RetryInvocationHandler ...

2022-11-16 00:14:54 1594

原创 yarn container的进程以及kill动作的逻辑

【背景】在一次问题排查过程中,误杀了yarn任务container的其中一个进程,导致yarn application kill不再生效,并且在rm中任务状态显示为失败,但实际进程还在运行。在分析问题的同时,抽时间对yarn任务的进程、以及kill命令的执行流程进行了整理。本文就来聊聊这些内容。【yarn任务相关的进程】在yarn中,任务提交时(不管是AM还是任务container),会指定任务的...

2022-11-04 23:15:44 1446

原创 InetAddress.getByName背后发生了什么

【背景】在一次问题排查过程中,发现偶现调用"InetAddress.getByName()"无法通过域名解析到IP(实际在容器中都能正确解析到),因此怀疑和容器的DNS解析有问题。但在与容器的开发兄弟沟通过程中,被反问了一句,确定该方法一定触发调用了DNS的域名解析吗?对此问题一时半会无法准确的答复,因此花了些时间对背后的逻辑原理,相关源码(涉及JDK、glibc源码)进行走读分析,并总结分享。【...

2022-10-21 00:09:07 3812

原创 hdfs回收站的配置使用与注意事项

【概述】在hdfs使用过程中,通过"rm"命令可以进行文件的删除,然后有时候,难免会出现误删了某个文件。那么hdfs是否存在回收站的功能,文件删除而不是真的删除,而是先进入垃圾回收站,这样可以对误删的文件有机会进行还原。本文就来聊聊hdfs中的回收站功能原理【配置使用】hdfs的回收站功能默认是不开启的,如需使用,只需在namenode的配置文件`core-site.xml`中增加如下配置项即可:...

2022-10-15 23:42:27 1467

原创 yarn中的事件分发与状态机框架

【概述】在早之前的文章《YARN——任务提交启动流程》中提到了,其处理逻辑是围绕applicaiton、container、attempt实例对象的创建,各自状态机的变化来实现的。具体来说,是将处理逻辑抽象为事件与事件的处理,对事件进行异步分发以及对不同事件的回调处理,同时以有限状态机来表示事件处理后的不同状态。本文就来总结下yarn中的事件异步分发处理框架以及状态机框架的使用与实现原理。【事件异...

2022-10-01 23:29:13 474

原创 hdfs的一个运维小技巧

【前言】对于hdfs而言,磁盘故障的处理或者节点的扩容是比较常见的运维操作。对于这种场景的运维操作是相对比较简单的,但关键在于如何快速的使数据在各个dn之间平衡,或者快速的使block数据达到指定的副本数,本文就来聊聊这个小技巧。【块平衡】在hdfs的实际使用过程中,难免会遇到DN的异常停止服务的时候。在这种情况下,当NN检测到DN处于异常后,为保证数据满足指定的副本数,因此会逐步为该DN上的所有...

2022-09-27 00:21:57 929

原创 2.X版本又一个极端情况下的偶现严重问题

【概述】前段时间,在异常测试的环境里,发现yarn任务无法提交,经过逐步排查,最后发现在一个极端的场景下,存在JN不会重新向kerberos进行认证,导致整体均无法提供服务的情况。本文就来详细聊聊问题出现时的情况以及分析复现过程。【问题分析】某天下午,突然被拉到一个群里,上层业务的开发兄弟@我,说所有的yarn任务都无法提交了,麻烦看下是怎么回事?知晓问题后,先看了下RM的情况,发现两个RM都是s...

2022-09-21 00:01:54 517 1

原创 zk session expire会引起HA模式的rm一直处于standby吗

【概述】最近连续在多个环境中遇到了同一个问题:在HA模式下,两个resourcemanager均为standby,并且持续没有选举出新的leader。经过一番分析,并对照源码梳理问题出现前后的逻辑流程,最后发现是因为zk会话过期(session expire)引起的问题,本文就复盘总结下。【RM的正常选举流程】在很早之前的文章中,介绍过hadoop里namenode的HA机制(戳这里),RM的选举...

2022-09-03 01:06:33 664

原创 yarn节点属性及调度

【节点属性产生的背景】在2.X版本中,已经支持节点设置标签,并且允许容量调度中的队列,设置可访问的节点标签以及默认标签值,并按照节点标签进行调度。但一个节点只能有1个标签,这样在yarn集群中,通过标签将NM节点划分为不同的节点池(1个NM节点只能属于某个固定的节点池)。实际上,光有节点标签还不能满足一些复杂的场景,比如同一个类型标签中的不同NM节点,可能有不同环境信息,例如不同的jdk版本、py...

2022-08-17 23:39:56 806

原创 基于ranger的kafka权限控制

上一篇文章讲到了kafka中的ACL,也提到了是以插件式的形式实现的,本文就来聊聊基于ranger的kafka访问控制。【ranger插件安装】要使用ranger插件,首先需要对ranger的kafka插件包进行解压缩,然后进入解压缩后的目录,修改安装的配置文件`install.properties`,具体修改的配置项包括:# 插件安装位置(通常就是kafka的安装位置)COMPONENT_IN...

2022-08-16 00:02:24 1708

原创 kafka的访问控制

【概述】通常情况下,Kafka部署后都是自己的业务进行生产消费,但也有一些情况,比如通过kafka和第三方对接,甚至是多个三方对接;或者是多用户使用同一套kafka集群,各自使用不同的topic。在这种场景下,一般不希望不同的用户能访问彼此的数据,因此需要进行权限控制,这就会用到Kafka中的ACL。Kafka中的ACL定义为:来自指定主机(Host)的指定用户(User...

2022-08-10 23:40:15 1729

原创 一文讲透hdfs的delegation token

【背景】前一段时间总结了hadoop中的token认证、yarn任务运行中的token,其中也都提到了delegation token。而最近也遇到了一个问题,问题现象是:flink任务运行超过七天后,由于宿主机异常导致任务失败,继而触发任务的重试,但接连重试几次都是失败的,并且任务的日志也没有聚合,导致无法分析问题失败的原因。最后发现是和delegation token...

2022-07-25 07:01:57 1743 5

原创 kafka客户端消息发送逻辑

【引言】最近遇到了一个和kafka相关的问题,具体是在spark任务在一定并行度的情况下, 偶现个别executor因kafka消息发送超时导致失败的情况。正所谓磨刀不误砍柴工,为了能较好的定位问题,因此先对kafka客户端消息发送相关逻辑的代码进行了走读,本文就是对相关原理的一些总结。【相关概念(数据结构)】在客户端里,一些重要的概念或对应的数据结构包括:1. Prod......

2022-07-16 00:37:36 688

原创 源码阅读之我见

【概述】在很多技术交流群里,都看到过同样一个问题:如何阅读源码?很多情况下,我们对一些开源的组件会用、或者通过官方文档、实际部署测试对其原理有一定程度的理解就可以了,不一定需要进行源码的阅读。因为阅读源码确实是一件非常耗精力的事情。然而阅读源码,尤其是优秀的源码,可以从中学到很多,不仅仅是可以深入掌握组件的原理、也可以从源码中学习优秀的设计、以及一些好代码的写法,甚至可以...

2022-07-05 22:54:20 150

原创 容量调度绝对值配置队列使用与避坑

【概述】在yarn中,对于容量调度而言,需要配置不同的队列,并为队列分配不同的资源。然而资源的配置是按照集群总资源的百分比来的,那么,如果集群资源进行扩容,队列的资源也就相应的增加了。在某些场景下, 我们可能希望某些队列的资源是固定的,不随集群资源的扩缩容而变更,这就需要给队列资源配置一个绝对值,在hadoop3.1.0版本中,开始引入了这个功能。本文就来聊聊如何给队列配...

2022-06-25 23:41:58 333

原创 2.X版本的一个通病问题

【概述】对于配置了HA模式的RM或者NN,客户端如果向standby的节点发送请求,会因为不可连接或standby拒绝提供服务导致请求失败,转而向Active的节点发送请求,这个转换是hadoop客户端内部自动完成的,无须上层业务感知(本质上是向其中一个节点发送请求,如果失败则继续向另外一个节点发送请求)。上周排查了一个相关的问题,在集群正常的情况下,向两个节点发送请求都...

2022-06-22 23:02:20 1252

原创 被这个参数三杀了

最近接连排查了几个问题,居然都是同一个参数引起的,本文就通过实际案例讲述下该参数如何引发问题的,以及问题最终又是如何解决的~【First Blood】在我们的环境中,RM是基于HA的方式部署的,并且RM是基于容器的方式运行的,即两个RM运行在各自的容器中;同时,我们还开启了kerberos认证,因此两个RM的hostname配置的是域名。主要的配置信息如下所示:<p...

2022-06-07 23:57:52 1111 1

原创 yarn任务信息的几种获取方式

在问题定位、日常巡检、特定开发任务中,都会涉及查看yarn任务的相关信息,包括applicaiton的ID、类型、名称、起始时间、app所包含的container、以及每个container的日志文件内容等信息。本文就来聊聊查询查看这些信息的几种方式。【通过RM的WEB查看】这个是最简单的方式,直接在浏览器中打开RM的web网页就可以查看所有的App信息以及对应的日志了。...

2022-06-02 07:08:02 6442

原创 YARN任务运行中的Token

上一篇文章中,主要讲解了token的一些通用知识,以及hadoop中,token的实现和通用数据结构及流程。本文主要讲述yarn任务提交运行过程中涉及的几个重要token:AMRMToken,NMToken,ContainerToken。【AMRMToken】用于保证ApplicationMaster(下面均简称AM)与RM之间的安全通信,即AM向RM注册,以及后续向RM...

2022-05-24 06:41:24 1050

原创 hadoop中的token认证

周更快变成月更了,但还是要坚持,本文来聊聊hadoop中的token,涉及到的点如下图所示。【Hadoop为什么需要Token】hadoop最初的实现中并没有认证机制,这意味着存储在hadoop中的数据很容易泄露。后来,基于kerberos认证的安全特性被加入到hadoop中,但是基于kerberos的认证在使用过程中,会存在以下问题:过程比较复杂,认证过程中还需要涉及到...

2022-05-12 00:27:16 1371 4

原创 一文搞懂hadoop中的用户

又有一段时间没有更新了,最近忙着搬砖的同时,也填了一些坑,其中不少坑是有关联的,甚至其中有一个配置项接连引发了两三个问题,后续打算逐个总结输出,这里先进行一些铺垫~【hadoop的用户概述】在hadoop中,客户端不管是向hdfs请求上传下载文件,还是向yarn提交任务、下载查看任务的日志,都会指定一个用户来进行操作。在开启了ACL鉴权机制后,hdfs的namenode,...

2022-04-23 00:13:10 4537 1

原创 问题不难,但藏得有点深

【问题现象】上周,测试环境偶现创建策略失败,查看ranger的日志发现有如下的错误信息:2022-03-21 20:14:29,685 [http-bio-6080-exec-13] ERROR org.apache.ranger.rest.ServiceREST (ServiceREST.java:1709) - createPolicy(RangerPolicy={i...

2022-04-03 23:03:40 715

原创 HDFS的集群信息

【概述】我们都知道整个hdfs由nn+zkfc,dn,jn组成,这些可能运行在不同节点上的组件能组成一个集群,其中包含了共同的集群信息,并且各自将集群信息持久化存储到了本地,这个文件就是VERSION文件。本文就来聊聊VERSION文件的相关内容。【各组件中的VERSION文件】1. nn中的version文件version文件的存储位置及具体内容如下:#/home/h...

2022-03-25 22:32:48 388

原创 HDFS——JN扩容的正确姿势

【前言】有一段时间没有更文了,一方面是之前准备的hudi系列由于一些细节还没研究得很清楚,暂时没有继续更新。另一方面,最近事情相当多,回家后收拾收拾就十一二点了,也就没有再进行总结输出了。...

2022-03-10 00:41:22 628 2

原创 从hudi持久化文件理解其核心概念

【概述】这是hudi系列的第一篇文章,先从核心概念,存储的文件格式加深对概念的理解,后续再逐步对使用(spark/flink入hudi,hudi同步hive等)、原理(压缩机制,索引,聚族...

2022-02-16 00:43:41 1493

原创 如何系统学习hdfs

这一年多的时间里,hdfs源码(原理)分析累计也写了30多篇文章了,来一篇文章进行汇总。这篇文章将按照自己的理解来系统的梳理下,应该如何系统的学习hdfs。先直接上个脑图:入门首先得了解H...

2022-02-07 21:15:03 1144

原创 一文搞懂hadoop的metrics

【概述】一个成熟的项目通常都会自带提供metric,反映运行时内部的各个信息,以方便进行监控运维。hadoop也不例外,通过jmx可以查看内部各个metrics信息,本文就来聊聊hdfs的...

2022-01-29 22:04:22 1951

原创 hdfs——nn的启动优化

【概述】上一篇文章讲解了,在一定DN节点规模,一定block数据量下的并发写文件的优化问题。在这种节点、数据量规模的集群中,当HDFS全部重启(nn+dn全部重启),或者两个NN都重启后,...

2022-01-24 23:19:26 1347

空空如也

空空如也

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

TA关注的人

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