自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小昌昌的博客

架构、设计和源码

  • 博客(32)
  • 资源 (3)
  • 收藏
  • 关注

原创 从Presto堆栈讲解含有lambda表达式堆栈分析方法

文章目录关于labmda表达式lambda 表达式带来编码上的便利lambda和非lambda表达式在堆栈信息上的差异lambda表达式的debug方式总结关于labmda表达式关于lambda表达式,labmda expressions in java 8 这里有比较简单的解释:在java 里面,如果一个接口只有一个方法,那么这个接口就叫做function interface; 当然,我们...

2019-07-21 18:15:03 1148

原创 Spark对HiveMetastore客户端的多版本管理、兼容性探究以及栅栏实现

文章目录前言详述对Hive的基本调研对Hive In Spark的兼容性探究的起因升级以后的Spark能否正常工作?通过Shims来增量支持高版本的Hive 的接口变化Spark对Hive版本支持的灵活配置以loadDynamicPartitioins方法来了解ShimsSpark用户的正确使用姿势:通过自定义ClassLoader实现多版本的hive client共存结论前言我们在对Hive...

2019-07-14 16:51:52 5643 2

原创 HDFS使用Backup Node、Checkpoint Node以及Standby Namenode进行checkpoint的机制详解

前言checkpoint,就是将某一个时间点的内存镜像,完整地存放到磁盘的过程,比如,我们在StandBy NameNode上可以看到这样的image文件:fsimage_0000000000992806947fsimage_0000000000992806947.md5fsimage_0000000000992806947说明这个文件存放了txId为992806947和以前的全...

2017-09-24 17:04:54 4847

原创 HDFS使用QJM(Quorum Journal Manager)实现的高可用性以及备份机制

目录前言1.NameNode的启动和对edits和QJM相关配置文件的解析2.使用FSImage和FSEditLog类对image和edit log文件进行读写和管理3.EditsDoubleBuffer 双缓存,让flush和write同时进行,互不干扰4.AsyncLoggerSetl类代理对QJM集群的读写6.QuorumCall封装了对基于paxos算法的QJM集群的异...

2017-09-03 11:14:07 5669

原创 用Reactor模式构建的Kafka Server网络层和API层---架构和设计

1.前言从Yarn RPC Server到Kafka Server,凡是有高并发需求的服务端,无一例外采用了基于了Reactor设计模式。在我的博客《Hadoop RPC Server基于Reactor模式和Java NIO 的架构和原理》中,分析了Yarn的基于Reactor设计模式和Java NIO实现的RPC Server的架构和设计,而Kafka的Server端网络层也同样使用了R...

2017-08-19 22:01:19 2498

原创 Hadoop RPC Server基于Reactor模式和Java NIO 的架构和原理

Hadoop RPC Server基于java NIO实现了一个高并发、高稳定性的网络层。本文分析了Hadoop RPC Server在NIO层面的处理逻辑,包括Listener、Reader、Handler、Responder等各个Reactor角色以及请求和响应在它们之间的传递。我们详细分析了一个基于Protobuf RPC的头信息的解析过程,解释了Server端收到请求到将请求交付给业务进行处理的逻辑。

2017-08-14 20:38:39 2499 2

原创 Kafka跨集群迁移方案MirrorMaker原理、使用以及性能调优实践

目录序言1. Kafka MirrorMaker基本特性2. 新旧Consumer API的使用问题3. 负载不均衡原因诊断以及问题解决4. 本身网络带宽限制问题5. 适当配置单次poll的消息总量和单次poll()的消息大小6. 恶劣网络环境下增加超时时间配置序言Kakfa MirrorMaker是Kafka 官方提供的跨数据中心的流数据同步方案。其实现原...

2017-08-09 22:22:39 11046

原创 基于Java NIO的Kafka底层网络层源码和架构

Kafka是数据和网络IO密集型组件,尤其是服务器端,基本要求就是数据传输和网络IO的高吞吐量和低系统开销。Kafka使用java NIO 封装了一套自己的底层网络层。从这些代码中,既可以看到基本的Java NIO的运行原理和使用方式,也能看到Kafka为了满足自身业务需求而进行的封装和扩展。本文从代码层面,详细解析Kafka底层网络层的具体实现。

2017-08-02 23:46:28 3939

原创 Fetcher: KafkaConsumer消息消费的管理者

KafkaConsumer委托Fetcher进行消费请求的发送、消费响应的处理以及消费数据的解析组装,Fetcher使用ConsumerNetworkClient进行底层网络通信。Fetcher基于事件的异步回调的良好设计,是Kafka可以以极高吞吐量消费消息以及在有消息的时候我们几乎感觉不到任何阻塞的重要原因。本文从源码入手,分析Fetcher的设计和架构,感受高性能、稳定、高可扩展的消息中间件的客户端代码。

2017-07-29 17:31:45 7581

原创 Kafka为Consumer分派分区:RangeAssignor和RoundRobinAssignor

看过Kafka关于消费者的join Group的代码以后,我们可以知道,每一个Consumer的代理对象ConsumerCoordinator代表这个Consumer进行join Group操作,实际上是向GroupCoordinator发起JoinGroup请求。GroupCoordinator只负责告知Consumer其角色信息,即成为Leader还是Follower,并不负责分区分配,即管理...

2017-07-25 20:52:35 4642

原创 Hadoop的心脏:中央异步调度器AsyncDispatcher代码和设计解析

Hadoop中涉及到大量复杂的、交互的事件处理、状态转换,同时,而且对实时性和效率提出了极高的要求。AsyncDispatcher是Hadoop的调度器,无论是RPC事件调度还是一些普通组件的事件调度都共用AsyncDispatcher。基于事件的异步调度方,极大提高了运行效率,抽象了不同场景的事件调度。本文从代码层面讲解AsyncDispatcher的实现,让读者理解AsyncDispatcher的工作原理。

2017-07-21 12:07:23 2433

原创 从Kafka的一次broker假死介绍Kafka架构和DefaultPartitioner

最近公司的kafka集群出现了节点已经失效但是节点进程和端口都还在的情况,目前我们的系统监控只是做到了进程监控,即为整个集群的每台机群建立进程快照,如果进程(如NameNode、kakfa broker)丢失,则报警并立刻自动重启进程。但是这次的kafka事故进程和端口都还在,因此报警系统没有能够及时报警,因此对此次事故发生的过程和解决方式做详细的分析。 首先,我们一个同学使用kafka的过程中发...

2017-07-14 14:10:39 3364

原创 YARN ApplicationMaster与ResourceManager之间基于applicationmaster_protocol.proto协议的allocate()接口源码解析

YARN ApplicationMaster与ResourceManager之间的通信接口使用applicationmaster_protocol.proto协议进行,负责注册应用、为应用分配资源等核心任务,协议中最核心的是allocate()接口,负责资源申请、释放、抢占、心跳等核心任务,本文对该接口从代码层面进行全面和深入解析,相信有助于读者对Yarn的资源分配有更深入的认识

2017-07-14 11:07:36 7746

原创 Yarn FairSheduler使用FairSharePolicy计算Fair Share的规则、原理和代码实现

目录概述1. Steady Fair Share 原理和计算方式2. Instantaneous Fair Share 原理和计算方式总结概述想要对Yarn的FairScheduler队列资源管理、以及抢占规则有正确的理解,必须知道Yarn的Fair Share的含义。我们在yarn的管理页面里面,经常可以看到队列的Instantaneous Fair Share...

2017-06-10 15:04:16 6104

原创 Yarn FairScheduler的抢占机制详解

FairScheduler是yarn最常用的调度器之一,详细了解它的概念、原理,仅仅靠阅读其官方文档,往往让人模棱两可,须知。Yarn的资源调度影响到整个集群系统的正确运行,因此,必须准确理解每个配置项的准确含义,还需要从代码入手,了解FairScheduler的隐藏在代码中的容易被忽略的逻辑。本文从概念、配置和代码层面,详细分析Yarn的资源调度策略FairScheduler。 Schedul...

2017-06-10 15:03:28 10398

原创 Hadoop 基于protobuf 的RPC的客户端实现原理

基于protobuf的RPC engine,必须在服务器端和客户端都完成了初始化之后,才能开始通信。那么,客户端是如何基于预先定义的protobuf协议,来与远程的基于相同的protobuf协议的服务端进行通信的呢?

2017-05-15 18:13:43 3962

原创 Hadoop 基于protobuf 的RPC的服务器端实现原理

目录序言protobuf处理引擎的注册具体protobuf协议的注册以ResourceTracker协议讲解服务端启动和注册过程总结序言Hadoop RPC基于即远程过程调用,远程过程调用主要包括两个部分,网络协议和数据格式。Hadoop根据数据格式,有三种不同的RPC实现: public enum RpcKind { RPC_BUILTIN (...

2017-05-06 17:29:07 3430

原创 一次实践:spark查询hive速度缓慢原因分析并以此看到spark基础架构

前一段时间数据挖掘组的同学向我返回说自己的一段pyspark代码执行非常缓慢,而代码本身非常简单,就是查询hive 一个视图中的数据,而且通过limit 10限制了数据量。 不说别的,先贴我的代码吧:from pyspark.sql import HiveContextfrom pyspark.sql.functions import *import jsonhc = HiveContext

2017-02-28 12:01:34 17442

原创 ZooKeeper的FastLeaderElection算法源码解析

Zookeeper服务器在启动的时候会通过一定的选举算法从多个server中选出leader server,剩下的server则作为follower.目前实现的选举算法有FastLeaderElection、AuthFastLeaderElection和 LeaderElection算法,但是AuthFastLeaderElection和LeaderElection都被标注为@Deprecated

2016-02-15 14:53:59 2291

原创 perl脚本中defined,exists和delete关键字的用法和区别

刚学习perl脚本的时候,喜欢频繁使用defined关键字判断一个hash中某个key是否存在,后来程序出了问题才去perl官方文档查看关于defined关键字的准确使用方法。在perl脚本中,undef是一个非常特殊的整数,这个整数用来表示失败、系统错误、文件末尾、未初始化的变量以及其他一系列的异常情况。了解了undef这个变量,那么就可以来看defined变量的作用了。当defined子程

2013-08-31 15:27:58 7371

原创 主流的非关系数据库的比较

MongoDB ,CouchDB,Redis , Cassandra 和HBase是当前主流的数据库。本文是我为所在的实验室使用mongoDB前做的一个简单调研,可以供那些同样徘徊于选择哪种菲关系型数据库的用户作为参考。因为还没有翻译成中文,所以暂且就是英文了。

2013-08-29 10:10:25 1900

原创 HDFS的EC Coding(纠删码)和块管理(WIP)

介绍了HDFS的块管理策略,既有基于复制的块管理,也重点介绍了HDFS的纠删码的具体实现,主要偏向于代码解析,同时还有基于实验对一些问题的解答。

2024-01-22 17:36:30 372 1

原创 HDFS WebHDFS 读写文件分析及HTTP Chunk Transfer Encoding相关问题探究

最近在调研使用WebHDFS进行HDFS文件读写的相关调查,因此需要对WebHDFS的整个读写流程进行探究,其中涉及到的必要的http重定向的整个流程必须搞清楚。同时,由于HDFS涉及到大量的流式写和大文件读,因为我们比较关心WebHDFS对Chunked Transfer Coding的支持,我们对WebHDFS的这个特性进行了测试和代码层面的研究。

2024-01-12 21:43:13 1214 2

原创 HDFS基于动态代理的客户端运行逻辑

本文详细解析整个HDFS客户端基于动态代理的、从上而下的调用和实现逻辑。本文关注的重点是动态代理的层层封装,以及基于动态代理实现的统一的重试逻辑。

2023-12-27 16:55:28 945 1

原创 HDFS客户端UnknownHostException事故解析

生产环境HDFS客户端发生了临时的域名解析失败问题,此时HDFS客户端虽然在重试,但是实际上对域名却并未重新解析,因此重试无效。本文基于我们在生产环境遇到的这个问题,详细记录了分析的过程和最终的根本原因的查找。

2023-12-27 16:45:07 631 2

原创 HDFS 短路读的实现(全网最全面深入讲解)

HDFS短路读是性能优化的一个重要特性,它利用操作系统的内存映射mmap和共享内存,避开传统的基于TCP的数据通信,极大提升了数据读取效率。整个短路读的过程完全放弃传统的基于TCP/IP的通信方式,基于进行通信,基于mmap和内存共享进行数据同步和块的高效率读取,整个读取过程涉及到了操作系统(mmap等)、Java等知识,同时也和HDFS的缓存系统交叉在一起,因此涉及到的东西很多,本文篇幅较长。

2023-10-28 11:23:07 296 2

原创 Presto(Trino)分布式(物理)执行计划的生成和调度

讲解物理执行计划的生成,以及基于物理执行计划的task 和 split 的调度过程。

2023-06-27 23:05:56 1135

原创 Presto(Trino)的逻辑执行计划和Fragment生成过程

从sql提交到逻辑执行计划的生成、fragment的生成过程

2023-06-18 21:53:11 1320 2

原创 Presto Split 详解

文章目录Split加载TableScanNode中获取TableLayoutConnectorSplitManager通用接口使用BackgroundHiveSplitLoader加载SplitsloadSplits()加载splitsloadPartition()加载partition对于bucket table的处理逻辑对于非bucket table的处理逻辑HiveSplitSource 通用接口向Coordinator交付SplitConnectorSplitSource通用接口HiveSplitS

2020-10-22 09:30:02 8932

原创 Yarn ResourceManager进行主从切换时发生脑裂原因分析

Brain Split 事故时间先后顺序:ResourceManager同zookeeper通信,发生异常:2018-10-19 09:17:49,981 INFO org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore: Error storing info for AMRMTokenSecretMana...

2018-10-22 20:02:00 2871

原创 Yarn FairScheduler 的资源预留机制导致的一次宕机事故分析

Yarn为了保证大应用不被小应用饿死,当某台服务器无法满足大应用资源需求,会在服务器上为这个请求预留资源直到满足需求,预留期间资源空闲但不被分配。资源预留使用不当将导致整个Yarn集群资源分配停止,因此必须小心配置。本文描述我所遇到的资源预留导致Yarn全集群停止服务的一次经历,然后从代码和原理上对资源预留机制进行详细的讲解。

2017-12-14 10:03:58 6787 5

原创 Yarn资源请求处理和资源分配原理解析

目录概述FairScheduler的资源调度原理和代码FairScheduler的调度概览两种调度时机-心跳调度和持续调度开始进行资源调度判断这个application是否适合在这个节点上分配资源运行YARN请求资源时的locality和relaxility限定资源分配assignContainerParent节点调用FSParentQueueassignContainer

2017-12-14 09:57:31 17517 12

深入理解java虚拟机+jvm高级特性

详细简介JVM垃圾回收机制及JVM内存模型

2014-09-18

对genbank文件的解析实例

perl的cpan库支持对基因库文件的解析,这个perl的脚本文件实现了对genbank类型的基因库中基因数据的提取和解析。用户使用的时候需要手动修改代码中的genbank文件的路径。

2013-10-14

Mongodb的并发访问性能测试的java客户端

这个客户端实现了对mongoDB数据库的并发访问及访问性能测试。包括查询,修改和插入性能。用户使用该客户端的时候需要修改mongodb的ip地址和端口号,以及数据库名称和collection名称。

2013-10-14

空空如也

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

TA关注的人

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