hadoop NameNode 实现分析
在hadoop 整体分析中,说过nameNode主要是实现一个 blockID 到对应 dataNode的对应关系映射。 现在分析一下腰实现这个映射,nameNode还需要哪些模块。
1 为了方便用户查找,实现一个目录树是必须的 (因为要完成 目录到文件的映射,称之为一级关系)。 在linux中是用C 和汇编语言来实现这个的,想要看懂代码感觉不容易,现在有一个JAVA版本的实现,让人兴奋。
2 核心问题实现 blockID 与dataNode的映射。(称之为二级关系)
3 还有一个重要问题 是 nameNode要实现某个block要放置在哪个dataNode上的算法。这个算法要保证效率,保证集群中节点的负载均 衡。
3 提供IPC服务 等等其他的辅助性工作。
同dataNode的实现分析一样,这里也是采取由上及下,从nameNode的启动开始分析它的各个模块的实现。
启动的时候最重要的是先把前面说的 一二级关系建立起来。
第一级关系的建立。
1). 从fsimage中读取该HDFS中保存的每一个目录和每一个文件
2). 初始化每个目录和文件的元数据信息
3). 根据目录和文件的路径,构造出整个namespace在内存中的镜像
4). 如果是文件,则读取出该文件包含的所有blockid,并插入到BlocksMap中。
整个加载流程如下图所示:

第二级关系的建立
建立第二级关系之前,先看一下 第二级关系在数据结构

这个数据结构的建立过程

如图所示,在naneNode启动的过程中 先是处于安全模式,数据节点向nanode节点主动汇报自己存储的block信息。
对于第三个问题 在hadoop 中节点选择的原则 是这样 如果写入数据源来源于一个数据节点 那么 选择原则如下
在当前数据节点下作为一个副本 然后随机选择一个机架存储其他副本 。
![]() |
这个算法由于机架式用简单的随机算法选定的,所以会出现负载不均衡问题,hadoop 中为解决这个问题,采取了启动专门的负载均衡线程来完成。 而没有使用分布式hash表。
hadoop NameNode 实现分析的更多相关文章
- Hadoop启动脚本分析
Hadoop启动脚本分析 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 能看到这篇博客的你估计对Hadoop已经有一个系统的了解了,最起码各种搭建方式你应该是会的,不会也没有关系, ...
- Hadoop记录-Hadoop NameNode 高可用 (High Availability) 实现解析
Hadoop NameNode 高可用 (High Availability) 实现解析 NameNode 高可用整体架构概述 在 Hadoop 1.0 时代,Hadoop 的两大核心组件 HDF ...
- 对hadoop namenode -format执行过程的探究
引言 本文出于一个疑问:hadoop namenode -format到底在我的linux系统里面做了些什么? 步骤 第1个文件bin/hadoop Hadoop脚本位于hadoop根目录下的bi ...
- Hadoop源码分析之数据节点的握手,注册,上报数据块和心跳
转自:http://www.it165.net/admin/html/201402/2382.html 在上一篇文章Hadoop源码分析之DataNode的启动与停止中分析了DataNode节点的启动 ...
- 4. hadoop启动脚本分析
4. hadoop启动脚本分析 1. hadoop的端口 ``` 50070 //namenode http port 50075 //datanode http port 50090 //2name ...
- Hadoop namenode无法启动
最近遇到了一个问题,执行start-all.sh的时候发现JPS一下namenode没有启动 每次开机都得重新格式化一下namenode才可以 其实问题就出在tmp文件,默 ...
- Hadoop NameNode is not formatted.
2014-08-26 20:27:22,712 WARN org.apache.hadoop.hdfs.server.namenode.FSNamesystem: Encountered except ...
- hadoop namenode多次格式化后,导致datanode启动不了
jps hadoop namenode -format dfs directory : /home/hadoop/dfs --data --current/VERSION #Wed Jul :: CS ...
- hadoop namenode -format Couldn'tload main class "-Djava.library.path=.home.hadoop.hadoop-2.5.2.lib"
<pre name="code" class="sql">[hadoop@MasterHadoop50 ~]$ hadoop namenode -f ...
随机推荐
- ZOJ3718 Diablo II(状态压缩dp)
题意:一个人物有K(K<=7)种技能,每种技能都有bi,ci,di值,表示该技能不能点超过bi次,每点一次加ci,点满bi次有一个附加得分di.然后还有N件武器,武器本身会有能力加成,然后每个武 ...
- C#--判断当前是否是移动设备和设备的型号
--如果是移动设备是true var ismobile = System.Web.HttpContext.Current.Request.Browser.IsMobileDevice; --设备型号( ...
- mysql 存储过程事务
DECLARE t_error INTEGER DEFAULT ; DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=; START TRAN ...
- Integral类型的跨平台使用
fundamental integral types or extended integral types 我们先通过下图,来了解可以跨平台使用的整数类型: 之所以我们需要以上各种明确指定宽度的int ...
- 基础DOM和CSS操作(三)
CSS方法 jQuery不但提供了CSS的核心操作方法,比如.css()..addClass()等.还封装了一些特殊功能的CSS操作方法,我们分别来了解一下. width()方法 方法名 描述 wid ...
- myeclipse 8.6 安装svn插件
第一种:在线安装 1.打开HELP->MyEclipse Configuration Center,切换到SoftWare标签页. 2.点击Add Site 打开对话框,在对话框Name输入Sv ...
- Java 虚拟机体系结构
众所周知,Java源代码被编译器编译成class文件.而并不是底层操作系统可以直接执行的二进制指令(比如Windows OS的.exe文件).因此,我们需要有一种平台可以解释class文件并运行它.而 ...
- iOS:UIMapView地图视图控件的简单使用
可以通过设置MKMapView的mapViewType设置地图类型 MKMapTypeStandard 普通地图 MKMapTypeSatellite 卫星云图 MKMapTypeHybrid 普通 ...
- Reads sequentially from multiple sources
/* * Copyright (C) 2016 Stephen Ostermiller * http://ostermiller.org/contact.pl?regarding=Java+Utili ...
- Algorithm: cartesian tree
http://baike.baidu.com/link?url=XUt5fXQ-jtFBM0UdKiGA41_NWFvdFSYwVsy4SVvCRRuEBvNkLfT9TgOtzsXvaOT9nuq_ ...
