-
Hadoop源码分析-18-DataNodeDiskMetrics
前言 DataNodeDiskMetric是磁盘慢盘检测工具,可以把DataNode慢盘对外以接口的方式暴露,方面集群管理人员对磁盘的读写现状 有一个清晰的认识.本文我们简单分析一下慢盘检测的机制,其中包括离群值计算概念.JMX接口暴露 访问http://datanode ip:9864/jmx 如下截图,可以看到慢盘检测后获取慢盘的数组DataNodeDiskMetrics源代码执行流程如下 构造方法中new OutliterDetector【离群检测】,启动检测线程 ...…
-
Hadoop源码分析-17-DataNode-shutdown
前言 DataNode作为一个庞大的类,这里不一一分析,如果去一一分析意义不是很大,本文浅析DataNode关闭方法,希望读者可以对HDFS DataNode 该角色上使用的相关线程和其他的服务从概念上有一个了解.关闭DataNode方法 通常暴力关闭DataNodehdfs --daemon stop datanode 滚动升级静默时关闭DataNodehdfs dfsadmin -shutdownDatanode <DATANODE_HOST:IPC_PORT> [...…
-
Hadoop源码分析-16-DiskBalancer
前言 HDFS磁盘写入数据的时候会存在磁盘写入速率不同导致磁盘使用比率差距可能会很大.但是我们可以手动移动 数据到其他的空间大的磁盘但是人为手动操作风险比较大.为了数据可以在命令行操作HDFS开发了磁盘平衡模块.该 新特性在Hadoop2.10&Hadoop3.0已经发布.本文笔者浅析磁盘均衡源码.磁盘均衡使用 查询指定的集群hdfs diskbalancer -query nodename.mycluster.com 生成执行计划hdfs diskbalancer...…
-
Hadoop源码分析-15-AvailableSpaceVolumeChoosingPolicy
前言 当集群规模庞大的时候,难免会存在异构的节点,比如磁盘的大小差异巨大.上文我们提到了副本选择策略,本文我们谈谈磁盘选择策略.默认情况下 HDFS磁盘选择策略为轮询的策略.也就是随机轮询选择. 为防止异构的磁盘被提前写满,采用`AvailableSpaceVolumeChoosingPolicy`优先写入磁盘空间大的磁盘中.配置使用AvailableSpaceVolumeChoosingPolicy 修改配置hdfs-site.xml文件```dfs.datanode.fs...…
-
Hadoop源码分析-14-AvailableSpaceBlockPlacementPolicy
前言 当集群规模庞大的时候,难免会存在异构的节点,比如磁盘的大小差异巨大,如果依然采用HDFS默认的副本的放置策略(第一块副本为本节点,第二块为另外一个机架,最后一个副本为同一个机架的随机的一个节点).这就存在一个问题,如果随机存放第三个副本的话,会导致节点基本上是数据均衡存放.如果存在异构节点存放数据不是按照节点属于空间的百分比存放数据.同样的数据磁盘小的节点很快被打满. 这是我们需要一个新的策略第三个副本不可以随机的选择副本节点存放数据,而是考虑节点使用百分比.这是就会使用到`...…
-
Hadoop源码分析-13-DataXceiver
前言在运维集群中我们会经常看到有DataXcevier Peer is not connect 这样的错误.其实在熟知的DataNode背后,有一个核心的线程为DataXcevier,这个线程 处理数据的流入和流出.直接关系到整个HDFS数据的流转.本文浅析一下DataXceiver这个线程类及其周边的类关系.核心类概述 DataXceiver Receiver Sender DataXceiverServer 概述:DataXceiver线程用来处理输入和...…
-
Hadoop源码分析-12-Maintenance
前言在某些情况下,例如DN滚动升级,最好将DN置于维护状态,在这种状态下NN停止向DN发送读写数据,同时不会去复制这些处于维护状态 的DN上的块.因为DN可能需要离线10分钟然后再次回来,比如切换为维护状态就是一个例子,不需要额外的开销去复制副本.让DN处于维护状态 应用的场景有DN批量更新,还有机架需要进行维护.执行步骤 配置文件添加如下内容<property> <name>dfs.hosts.maintenance</name> <...…
-
Hadoop源码分析-11-Decommission
前言 大规模的集群中,会经常出现磁盘损坏需要下线节点.集群下线过程需要遵循下线的规则,切勿直接停止DataNode下线节点.执行步骤 修改配置文件 找到dfs.hosts.exclude文件,在该文件中添加要下线的节点. 执行命令 hdfs dfsadmin -refreshNodes源码追踪相关类涉及到FSNamesystem,DatanodeManager,DatanodeAdminManager,HeartbeatManager,DatanodeManager涉及大量的DataN...…
-
Hadoop源码分析-10-BlockMap
前言 BlockInfo&BlockMap&DataNodeStorageInfo维护了数据块元数据关系.也就是我们通常所说的HDFS的元数据. 这些数据都存放在内存中,因此对于优化这些类的数据结构,一定程度上可以提高元数据存储内存的开销.下文我们 看一看源码中这些类的数据流和结构.BlockInfoBlockInfo该类为抽象类继承自Block是Block的扩展,其中扩展了块的副本,块和INodeFile的关系,处于UC态的块属性以及块集合中块的ID,Block指...…
-
Hadoop源码分析-09-Block
前言相信绝大多数的使用过HDFS的同学,都听说过Block(块),本文浅析以下Block结构.Block作为HDFS的数据存储的一个原语.其block ID唯一标识了一个Block,每个Block都会有一个对应的时间戳.这个时间戳会被HDFS的NameNode持久化.Block结构每个Block会涉及到两类文件 Block文件和Block元数据文件. public static final String BLOCK_FILE_PREFIX = "blk_"; public st...…