- 浏览: 2110198 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
无心流泪wan:
private static final Log log = ...
log4j Category.callAppenders Block -
yjxa901:
博主好: http://www.java.net/down ...
jdk debug -
aptech406328627:
大神,请接收我的膜拜吧,纠结了两天的问题,就这么让你给解决了 ...
java.lang.reflect.MalformedParameterizedTypeException -
xukunddp:
谢谢1楼,我也遇到,搞定了
java.lang.reflect.MalformedParameterizedTypeException -
di1984HIT:
学习了!!!!
jvmstat hsperfdata java.io.tmpdir
之前的blog都是讲namenode的动态行为,今天来分析下静态数据,例如namenode到底维护了哪些变量。
namenode的主要工作都在FSNamesystem这个类中(有4749行代码),这里为了分析方便,我将用真实的例子来讲,例如我将文件的分块大小设置为512字节,这样是为了方便测试,然后我从本地copy了一个622字节的文件到hdfs文件系统上,这样文件就会被分为2块了,从datanode的存储数据目录看(/home/dikar/hadoop/tmp/dfs/data/current)一共生成了2个块文件,第一个块文件大小为512字节,第二个块文件大小为110字节(比较悲剧的是我的文件按照字节截取后再合起来就不是我之前的那个文件了,他没有考虑到我文件自身换行的完整性),我这里有2个datanode节点,第一个节点的ip是10.0.18.121 第二个节点的ip是10.0.18.122。以下是datanode中各个文件的信息
121节点上的 VERSION文件
#Sat Mar 12 15:55:05 CST 2011 namespaceID=1257554030 storageID=DS-863408884-127.0.0.1-50010-1299916505769 cTime=0 storageType=DATA_NODE layoutVersion=-18
122节点上的 VERSION文件
#Sat Mar 12 15:54:37 CST 2011 namespaceID=1257554030 storageID=DS-2139341662-127.0.0.1-50010-1299916477580 cTime=0 storageType=DATA_NODE layoutVersion=-18
这里127.0.0.1是我的机器名对应的ip,因为在host文件里有127.0.0.1和机器名的对应关系,故先取的127.0.0.1这个ip了,其实应该是取真实的eth接口上的ip地址,不过这个只是显示的问题。
注意到namespaceID都是一样的,其实这个是namenode上的id,我们可以看下namenode上VERSION文件的内容
#Sat Mar 12 21:59:56 CST 2011 namespaceID=1257554030 cTime=0 storageType=NAME_NODE layoutVersion=-18
我上传到hdfs上保存的文件名是test55,然后因为分块在datanode上生成了2个文件(2个datanode上的都是一样),2个分块后的文件名是
blk_-3134592920494009076 blk_-6874669727371532738
有了上面的信息描述,那么我们就进入到FSNamesystem中看它在内存中维护了哪些变量。
// datanode networktoplogy NetworkTopology clusterMap = new NetworkTopology();
这个维护网络拓扑关系,因为我对机架采取的是默认配置,故都在一个机架上,这里保存的内容如下
Number of racks: 1 Expected number of leaves:2 /default-rack/10.0.18.122:50010 /default-rack/10.0.18.121:50010
针对取最近节点的算法还是不错的,以后专门写一篇来分析下。
DNSToSwitchMapping dnsToSwitchMapping
这个保存的数据内容如下:(比较简洁)
10.0.18.122=/default-rack 10.0.18.121=/default-rack
以上2个都是和节点网络远近算法相关的数据。
Host2NodesMap host2DataNodeMap = new Host2NodesMap()
这个保存的是datanode的ip与datanode描述对象的一个映射关系,保存的数据内容如下
10.0.18.122=org.apache.hadoop.hdfs.server.namenode.DatanodeDescriptor;@18e95d9 10.0.18.121=org.apache.hadoop.hdfs.server.namenode.DatanodeDescriptor;@10098b
针对DatanodeDescriptor对象我会单独一篇文章来讲。
接下来是最重要的2个数据变量了,也是占内存比较大的。
/** * Stores the datanode -> block map. * <p> * Done by storing a set of {@link DatanodeDescriptor} objects, sorted by * storage id. In order to keep the storage map consistent it tracks * all storages ever registered with the namenode. * A descriptor corresponding to a specific storage id can be * <ul> * <li>added to the map if it is a new storage id;</li> * <li>updated with a new datanode started as a replacement for the old one * with the same storage id; and </li> * <li>removed if and only if an existing datanode is restarted to serve a * different storage id.</li> * </ul> <br> * The list of the {@link DatanodeDescriptor}s in the map is checkpointed * in the namespace image file. Only the {@link DatanodeInfo} part is * persistent, the list of blocks is restored from the datanode block * reports. * <p> * Mapping: StorageID -> DatanodeDescriptor */ NavigableMap<String, DatanodeDescriptor> datanodeMap = new TreeMap<String, DatanodeDescriptor>();
内存里数据格式大概如下
{ key:"DS-2139341662-127.0.0.1-50010-1299916477580" value:DatanodeDescriptor{ storageId:DS-2139341662-127.0.0.1-50010-1299916477580 blockInfo{ INodeFile{ name:test55 blocks:[blk_-3134592920494009076_1002, blk_-6874669727371532738_1002] } } } key:"DS-863408884-127.0.0.1-50010-1299916505769" value:DatanodeDescriptor{ storageId:DS-863408884-127.0.0.1-50010-1299916505769 blockInfo{ INodeFile{ name:test55 blocks:[blk_-3134592920494009076_1002, blk_-6874669727371532738_1002] } } }
DatanodeDescriptor中保存了block的信息,这个等分析DatanodeDescriptor再说。
/** * This class maintains the map from a block to its metadata. * block's metadata currently includes INode it belongs to and * the datanodes that store the block. */ BlocksMap blocksMap
BlocksMap中具体管存储的是
Map<BlockInfo, BlockInfo> map
对于BlockInfo我也会在后面安排专门的文章来分析。
我们来看下BlocksMap里的内存数据
因为map里的key value都是一样的,故只列出key
{ key1/value1 :BlockInfo{ blockId:-6874669727371532738 INodeFIle{ name:test55 blocks:[blk_-3134592920494009076_1002, blk_-6874669727371532738_1002] } } key2/value2:BlockInfo{ blockId:-3134592920494009076 INodeFIle{ name:test55 blocks:[blk_-3134592920494009076_1002, blk_-6874669727371532738_1002] } } }
针对INodeFile也需要单独的一篇来分析。
发表评论
-
hive相关操作文档收集
2011-12-02 13:26 905How to load data into Hive ... -
hive sql doc
2011-11-16 11:38 1037记录2个常用的hive sql语法查询地 官方 ht ... -
hive Required table missing : "`DBS`" in Catalog "" Schema "
2011-11-14 20:49 10907最近需要提取一些数据,故开始使用hive,本机搭建了一个hiv ... -
HDFS数据兼容拷贝
2011-09-29 22:07 1078系统中使用了hadoop 19.2 20.2 2个版本,为啥有 ... -
hdfs 简单的api 读写文件
2011-08-24 14:30 11250import java.io.BufferedReader; ... -
hbase之htable线程安全性
2011-08-19 01:52 3753在单线程环境下使用hbase的htable是没有问题,但是突然 ... -
hbase之scan的rowkey问题
2011-08-17 20:43 18744最近使用到hbase做存储,发现使用scan的时候,返回的ro ... -
datanode启动开启了那些任务线程
2011-03-27 23:21 1782今天开始分析datanode,首先看看datanode开启了哪 ... -
namenode这个类的主要功能
2011-03-22 22:34 2080今天来总看下namenode这 ... -
hadoop监控
2011-03-21 18:27 5631通过从hadoop的 hadoop-metrics文件中就可以 ... -
zookeeper集群配置注意项
2011-03-16 01:05 2669项目中需要使用hbase,故准备在本机搭建hbase,考虑到h ... -
Block类图描述
2011-03-15 08:24 1132前面2个描述了datanode以及INodeFile,还缺个B ... -
INodeFile类图描述
2011-03-14 21:58 1320针对具体存储在hdfs上的文件有个对象来模型化他那就是INod ... -
DatanodeDescriptor类图描述
2011-03-13 23:21 1616本想画个UML里的标准类图的,可惜linux下的画图工具都不那 ... -
namenode任务线程之RPC
2011-03-12 18:21 2946namenode需要监听和收集各个datanode的信息,需要 ... -
hadoop各配置文件加载情况
2011-03-12 16:30 4628之前依据名字想当然的把fs.default.name配置在hd ... -
hadoop远程调试
2011-03-12 13:52 2950之前的一篇blog里讲述了hadoop单机版调试的方法,那种调 ... -
namenode后台jetty web
2011-03-11 23:33 2503现在开始分析namenode启动时开启的 ... -
FSNamesystem中的recentInvalidateSets
2011-03-11 22:28 1236今天早就回来了,然后偷懒了2个小时,现在才开始分析代码,之前在 ... -
namenode任务线程之FSNamesystem$SafeModeMonitor
2011-03-10 22:58 1719前面5个任务线程一般会 ...
相关推荐
同时,其他变量如`HDFS_DATANODE_USER` 对应DataNode用户,`HADOOP_SECURE_DN_USER` 用于安全DNS,以及`HDFS_SECONDARYNAMENODE_USER` 是备用NameNode的用户。 3. 同样的,对于处理YARN(Yet Another Resource ...
以上各步骤都需要对Hadoop架构有深入理解,包括HDFS、YARN和MapReduce的工作原理。在实际操作中,还要考虑集群的安全性,如设置防火墙规则,使用安全认证机制如Kerberos,以及监控和日志管理。维护Hadoop集群还包括...
在这一过程中,NameNode和Secondary NameNode的存储系统经历了一系列状态转换,这些状态转移有助于确保数据的一致性和完整性。同时,文件系统上的目录也会相应变化,如edits和fsimage文件的更新。 通过以上分析,...
在构建Hadoop大数据平台的过程中,HDFS(Hadoop Distributed File System)是至关重要的组件,它提供了高容错性和高吞吐量的数据存储解决方案。...理解这些步骤对于管理和维护Hadoop集群至关重要。
1. 元数据管理:NameNode维护整个HDFS的目录树结构,即文件的目录结构及文件分块位置信息,这被称为元数据。它记录了每个文件对应的block块信息,如block ID和所在的DataNode服务器。 2. 文件块映射:NameNode负责...
【知识点详解】 本文档涉及的是全国职业院校技能大赛高职组“大数据技术与应用”赛项中的Hadoop High Availability (HA) 部署与管理,主要涵盖了...理解并熟练掌握这些知识,有助于构建和维护高可用的大数据处理系统。
在本篇文章中,我们将深入探讨Hadoop中的NameNode组件,特别是`NameNode.java`文件中的关键成员变量及其功能实现。此外,我们还将讨论与这些成员变量相关的接口,并通过具体的例子来说明它们是如何工作的。 #### 二...
* Secondary Namenode:负责辅助Namenode,维护文件系统的元数据的副本。 2. YARN(Yet Another Resource Negotiator) YARN是Hadoop的资源管理器,主要负责管理Hadoop集群的资源分配和任务调度。YARN的主要组件...
masters文件在Hadoop中用于标识哪些节点是NameNode。在搭建多集群环境时,由于JournalNode(JN)将接管NameNode的角色,因此不再需要masters文件,需要删除。 3. **配置HDFS-site.xml**: 这是Hadoop分布式文件...
配置 Hadoop 的 Java 环境,包括设置 JAVA_HOME、HDFS_NAMENODE_USER、HDFS_DATANODE_USER、HDFS_SECONDARYNAMENODE_USER 等环境变量。 2.4 配置 core-site.xml 配置 core-site.xml 文件,包括设置 fs.defaultFS ...
#### 一、启动Hadoop集群会分别启动哪些进程?各自的作用是什么? 1. **NameNode**: - **功能**:维护整个HDFS文件系统的目录树结构,记录文件与目录之间的层级关系。它还负责记录文件中各个数据块在DataNode上的...
2. **Hadoop 2.x系列配置**:在Hadoop 2.x版本中,可以通过编辑`hadoop-env.sh`文件中的`HADOOP_NAMENODE_OPTS`变量来设置NameNode的最大堆内存(`-Xmx`参数)。 3. **Hadoop 3.x系列配置**:Hadoop 3.x版本中,...
这对于有针对性的故障排查和维护非常有用。 当首次启动Hadoop集群或需要遵循特定顺序启动时,建议按照以下步骤进行: 1. 首先启动HDFS的守护进程: - `hadoop-daemons.sh start namenode`: 启动NameNode,它是...
相较于之前的版本,Hadoop 2.4.1在性能、稳定性以及安全性方面都有显著提升。 #### 二、Hadoop HA(High Availability) Hadoop HA是指在一个Hadoop集群中,通过配置多个NameNode来实现系统的高可用性。在Hadoop ...
- **修改主机名**:确保每个节点有唯一的主机名,这有助于在集群环境中区分各个节点。 - **创建HDFS用户**:创建一个统一的`hdfs`用户账户,便于后续的操作和维护。 - **更新/etc/hosts文件**:在所有节点上更新/etc...
【Hadoop-0.21.0分布式集群配置...总之,配置Hadoop-0.21.0分布式集群需要对网络配置、目录结构、环境变量、配置文件和启动流程有深入理解。正确配置后,Hadoop可以提供高扩展性和容错性,为大数据处理提供强大的支撑。
- NameNode维护着整个文件系统的元数据,包括文件和目录的信息以及Block的分布情况。 - 为了提高性能,NameNode将所有元数据加载到内存中。 - 需要合理配置内存大小以支持大量文件和目录的管理。 #### 1.2.6 纠删码...
- **解释**: NameNode维护着文件系统的元数据,并将这些信息存储在内存中以及硬盘上的两个文件中:日志文件和命名空间镜像文件。 #### 14. Namenode与数据块信息 - **知识点**: Namenode不会直接存储数据块信息。 -...
在实际操作中可能会遇到各种问题,如网络不通、配置错误等,记录并解决这些问题的经验,有助于提高部署和维护效率。 总结来说,这个教程覆盖了从基础环境准备到集群配置、启动、监控和故障恢复的整个流程,对理解...