在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 实现分析的更多相关文章

  1. Hadoop启动脚本分析

    Hadoop启动脚本分析 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 能看到这篇博客的你估计对Hadoop已经有一个系统的了解了,最起码各种搭建方式你应该是会的,不会也没有关系, ...

  2. Hadoop记录-Hadoop NameNode 高可用 (High Availability) 实现解析

    Hadoop NameNode 高可用 (High Availability) 实现解析   NameNode 高可用整体架构概述 在 Hadoop 1.0 时代,Hadoop 的两大核心组件 HDF ...

  3. 对hadoop namenode -format执行过程的探究

      引言 本文出于一个疑问:hadoop namenode -format到底在我的linux系统里面做了些什么? 步骤 第1个文件bin/hadoop Hadoop脚本位于hadoop根目录下的bi ...

  4. Hadoop源码分析之数据节点的握手,注册,上报数据块和心跳

    转自:http://www.it165.net/admin/html/201402/2382.html 在上一篇文章Hadoop源码分析之DataNode的启动与停止中分析了DataNode节点的启动 ...

  5. 4. hadoop启动脚本分析

    4. hadoop启动脚本分析 1. hadoop的端口 ``` 50070 //namenode http port 50075 //datanode http port 50090 //2name ...

  6. Hadoop namenode无法启动

    最近遇到了一个问题,执行start-all.sh的时候发现JPS一下namenode没有启动        每次开机都得重新格式化一下namenode才可以        其实问题就出在tmp文件,默 ...

  7. Hadoop NameNode is not formatted.

    2014-08-26 20:27:22,712 WARN org.apache.hadoop.hdfs.server.namenode.FSNamesystem: Encountered except ...

  8. hadoop namenode多次格式化后,导致datanode启动不了

    jps hadoop namenode -format dfs directory : /home/hadoop/dfs --data --current/VERSION #Wed Jul :: CS ...

  9. 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 ...

随机推荐

  1. 10个jQuery插件分享

    原文:http://www.shejidaren.com/10-jquery-plugins.html blur.js blur.js是一个很有意思的插件,它能实现像WIN7 AERO效果的JS插件, ...

  2. ZOJ3762 The Bonus Salary!(最小费用最大流)

    题意:给你N个的任务一定要在每天的[Li,Ri]时段完成,然后你只有K天的时间,每个任务有个val,然后求K天里能够获得的最大bonus. 思路:拿到手第一直觉是最小费用最大流,然后不会建图,就跑去想 ...

  3. String Reduction

    问题出自这里 问题描述: Given a string consisting of a,b and c's, we can perform the following operation: Take ...

  4. IIS 发布程序的一些心得

    1.应用程序池一般自己建立对应Framework版本的程序池,并托管管道模式为经典 2.在IIS根目录双击,右侧的“ISAPI和CGI限制” 双击打开,将自己所需要的Framework版本的限制设置为 ...

  5. procedure can't return a result set in the given context

    调用存储过程失败!出现如下错误:PROCEDURE ipbx.qu_ery can't return a result set in the given context, ipbx是数据库, qu_e ...

  6. C#编程使用Managed Wifi API连接无线SSID

    C#编程使用Managed Wifi API连接无线SSIDhttp://www.2cto.com/kf/201307/227623.html Managed Wifi API - Homehttp: ...

  7. ExtJs之进度条实现

    慢慢按书上的作. <!DOCTYPE html> <html> <head> <title>ExtJs</title> <meta h ...

  8. 传说中的WCF(9):流与文件传输

    在使用Socket/TCP来传输文件,弄起来不仅会有些复杂,而且较经典的“粘包”问题有时候会让人火冒七丈.如果你不喜欢用Socket来传文件,不妨试试WCF,WCF的流模式传输还是相当强大和相当实用的 ...

  9. java理论基础学习三

    Eclipse 是一个开放源码的.基于java的可扩展开发平台 最初主要用来java语言开发,但目前也有人通过插件使其作为其它计算机语言比如C++.python.安卓的开发 下载地址:http://e ...

  10. 【HDU 5030】Rabbit's String (二分+后缀数组)

    Rabbit's String Problem Description Long long ago, there lived a lot of rabbits in the forest. One d ...