- 博客(23)
- 资源 (1)
- 收藏
- 关注
原创 2021-12-30 hadoop3 写数据流程(五):BlockService
参考源码hadoop-3.3.0,如有理解问题,敬请指出,不胜感激。1 概述上一篇介绍到,写数据块请求通过流式接口到达Datanode之后, Datanode上监听流式接口请求的DataXceiverServer会接收这个请求, 并构造一个DataXceiver对象, 然后在DataXceiver对象上调用DataXceiver.writeBlock()方法响应这个请求。 当前Datanode的DataXceiver.writeBlock()方法会级联向数据流管道中的下一个Datanode发送写数据
2021-12-30 21:36:39
642
原创 hadoop3 写数据流程(四):写数据1
参考源码hadoop-3.3.0,这部分代码写的质量真的不太行,好些方法几百行。1 概述HDFS使用数据流管道方式(数据管道的建立可以参见写数据系列第三篇)来写数据。 DFSClient通过使用写数据流程(一)创建的数据输出流out调用write方法完成数据的传输,传输中将数据切分成多个packet,而后往dataQueue中存储切分之后的packet,在写入完成后调用notifyAll方法重新激活在wait等待的DataStreamer线程,而后在此线程中的run()方法中调用DataStreaa
2021-12-27 22:00:39
1356
原创 2021-12-23 hadoop3 写数据流程(三):DataStreamer
1 概述见名知意,此类主要用于数据传输,是一个守护线程,在创建DFSOutputStream的过程中被启动,启动之后再run方法之中使用一个while死循环(直到流或者客户端关闭)才停止运行,里面主要的逻辑是通过维护一个dataQueue队列,等待主线程往其中添加packet数据,等到添加了packet数据之后,会触发数据的发送,将数据发送到对应pipeline对应的dn之中,从而完成数据的传输。2 源码分析2.1 DataStreamer的前提调用根据前文,在DFSOutputStream
2021-12-23 22:35:33
1673
原创 kudu tablet的设计
主要内容翻译自github kudu docs/tablet.md(翻译有些也不是很准确),自己做了一些补充1 概述tablet是Kudu表的水平分区,类似于BigTable中的tablet或HBase中的region。每个tablet都包含一个连续的行范围,该行范围不与任何其他tablet的范围重叠。table中的所有tablet共同构成了table的整个键空间。每个tablet又细分为许多行集合,称为行集。每个RowSet包含一组行的数据。 RowSet是不相交的,即不同RowSet的行集不
2021-12-20 18:21:00
405
原创 2021-12-18 hadoop3 写数据流程(一):创建输出流
源码根据hadoop-3.3.0,欢迎指正(主要关注重点流程,过程中很多未注释)。1 概述发送创建文件请求:调用分布式文件系统 DistributedFileSystem.create( )方法; NameNode 创建文件记录:分布式文件系统 DistributedFileSystem 发送 RPC 请求给 NameNode,NameNode 检查权限(读写权限以及是否已经存在)后创建一条记录,返回输出流 FSDataOutputStream,封装了输出流 DFSOutputDtream;
2021-12-18 22:07:12
1344
原创 2021-12-16 hadoop3:目录树
本文基于源码hadoop-3.3.0,个人理解欢迎指正。目录1 概述2 FSDirectory源码2.1 构造函数2.2 变量2.3 关于此类的方法3 INode3.1 构造函数3.2 主要变量3.3 操作权限3.4 INodeDirectory3.5 INodeFile1 概述namenode的一个重要作用就是维护集群中的文件目录树。对于hdfs的namespace的状态,Hadoop中提供了FSDirectory和FSNamesystem两个类进行
2021-12-16 22:19:31
1364
原创 2021-12-13 hadoop3 编辑日志:FsEditLog
基于源码hadoop-3.3.01 概述我们知道,hdfs中的操作和状态等数据都存在与元数据中,而元数据通过fsimage和edit log管理。当我们进行第一次namenode格式化的时候,我们会创建fsimage和editlog文件,而如果不是第一次启动,就会加载对应目录下的fsimage和edit log完成namenode的启动,可参见FSNamesystem。FSImage 是 NameNode 中关于元数据的镜像,一般称为检查点的镜像;会在内存和磁盘中各保存一份,包含了整个HDF
2021-12-13 22:15:09
1793
原创 2021-12-08 datanode存储相关(二):数据块管理
1 概述上文主要了解了dn数据存储的存储管理,这里主要分析一下数据块的管理。从上一篇我们知道,在dn数据存储中,DataStorage管理dn提供的数据目录,一个数据目录对应一台机器上的数据卷。FsDatasetImpl会通过持有一个 FsVolumeList 对象对 Datanode 上定义的所有存储目录下的数据块进行管理与操作,而 FsVolumeList 对象统一管理 Datanode 上定义的多个 FsVolumelmpl 对象。FsDatasetlmpl 还会持有一个DataStora
2021-12-08 22:44:10
1013
原创 2021-12-05 datanode存储相关(一):storage管理
基于源码hadoop-3.3.01 概述众所周知,dn主要是用来存储hadoop集群中的具体的数据的。但实际上,Datanode还是需要保存一部分Datanode自身的元数据的, 这些元数据是通过Datanode磁盘存储上的一些文件和目录来保存的。Datanode可以定义多个存储目录保存数据块,Datanode的多个存储目录存储的数据块并不相同,并且不同的存储目录可以是异构的, 这样的设计可以提高数据块IO的吞吐率[比如多块磁盘]。1.1 实际存储下面看一个实际中的存储:我们
2021-12-05 17:46:09
2420
原创 2021-12-03 DataNode注册与心跳
本文基于hadoop-3.3.0目录1 概述2 注册过程2.1 注册前置过程2.2 注册过程2.3 心跳发送1 概述dn在完成启动(源码阅读)之后,需要向nn进行注册,才能提供后续的数据存储服务,注册完成后定时进行心跳检测,确保dn的存活。而注册的流程是在DataNode的构造函数中的startDataNode方法中调用refreshNamenode方法完成:blockPoolManager.refreshNamenodes(getConf());2 注册过程
2021-12-03 22:53:20
3349
原创 2021-11-14 hadoop3 BlockManager
源码基于hadoop-3.3.01 BlockManager简介BlockManager主要负责管理hadoop集群中的block信息。对于block的块,它始终保持着在任何事件下都能保持存活的副本数等于预期冗余。BlockManager中存储的数据块信息包含两个部分:数据块与存储这个数据块的数据节点存储的对应关系,这部分信息保存在数据块对应的BlockInfo对象的storages[]数组中, Namenode内存中的所有BlockInfo对象则保存在BlockManager.blocks
2021-11-14 21:09:54
1445
原创 2021-11-11 Hadoop3 FSNamesystem
本文主要介绍一下FSNamesystem,依赖代码为hadoop-3.3.0。1 简介FSNamesystem 是瞬态和持久namespace状态的容器,并在 NameNode 上完成所有记录工作。主要作用如下:1. 是 BlockManager、DatanodeManager、DelegationTokens、LeaseManager 等服务的容器。2. 委托处理修改或检查namespace的 RPC 调用3. 任何只涉及块的东西(例如块报告),它都委托给 BlockManager
2021-11-11 22:44:03
1621
原创 2021-11-06 hadoop 安全模式
1 什么是安全模式安全模式是HDFS所处的一种特殊状态,在这种状态下,文件系统只接受读数据请求,而不接受删除、修改等变更请求。在NameNode主节点启动时,HDFS首先进入安全模式,DataNode在启动的时候会向namenode汇报可用的block等状态,当整个系统达到安全标准时,HDFS自动离开安全模式。如果HDFS出于安全模式下,则文件block不能进行任何的副本复制操作,因此达到最小的副本数量要求是基于datanode启动时的状态来判定的,启动时不会再做任何复制(从而达到最小副本数量要求)
2021-11-06 21:14:35
4415
原创 2021-11-03 hadoop NameNode启动
ps: 本文参考hadoop-3.3.01 NameNode简介namenode是hadoop架构中最重要的角色之一,NameNode主要管理管理着名称空间表(文件名与block的映射,存储在磁盘上且十分重要)和inodes表(块与机器的映射,只要namenode出现就会存在),通常情况下一个集群中有且仅有一个活跃的NameNode,从Hadoop2开始,为了保证集群中的高可用,可以配置两个namenode,一个active另一个为standby。但这种情况下,当集群规模达到一定程度时,nameno
2021-11-03 21:58:13
2046
原创 flink编译parcel包并集成至cdh6.3.2
flink-1.12 parcel编译本文主要将flink集成至cdh-6.3.21 编译环境准备1.1 安装JDK1.8略1.2 安装gityum install git -y1.3 安装maven安装maven# 如果网络不通,可以手动下载上传wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gztar xzvf apa
2021-06-03 13:05:17
1229
原创 Flink checkpoint state相关概念
Flink checkpoint state相关概念参考源码flink-1.11Checkpoint完整的元数据CompletedCheckpoint,用来描述所有任务都完成确认后的checkpoint, 封装了一次 Checkpoint 完整的元数据信息.public class CompletedCheckpoint implements Serializable { // job id private final JobID job; // checkpoint id priv
2021-01-27 14:56:08
189
原创 idea远程debug flink任务
idea远程debug flink任务主要记录一下远程debug flink的过程,使用的资源调度器是yarn。版本信息:flink-1.11 idea-201803(安装后一直没更新)配置由于任务是调度在yarn上,这里存在多个flink任务,因此将java环境变量配置在任务启动过程中,其他flink配置正常使用。-yD "env.java.opts.jobmanager=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address
2021-01-25 18:01:47
561
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人