hdfs启动过程

Namenode保存文件系统元数据镜像,namenode在内存及磁盘(fsimage和editslog)上分别存在一份元数据镜像文件,内存中元数据镜像保证了hdfs文件系统文件访问效率,磁盘上的元数据镜像保证了hdfs文件系统的安全性。

namenode在磁盘上的两类文件组成:

fsimage文件:保存文件系统至上次checkpoint为止目录和文件元数据。

edits文件:保存文件系统从上次checkpoint起对hdfs的所有操作记录日志信息。

fsimage和editlog文件可以在本地文件系统看到,如下图:

image

首次安装格式化(format)主要作用是在本地文件系统生成fsimage文件。

1、首此启动hdfs过程:

启动namenode:

读取fsimage生成内存中元数据镜像。

启动datanode:

向namenode注册;

向namenode发送blockreport。

启动成功后,client可以对HDFS进行目录创建、文件上传、下载、查看、重命名等操作,更改namespace的操作将被记录在edits文件中。

2、之后启动HDFS文件系统过程:

启动namenode:

读取fsimage元数据镜像文件,加载到内存中。

读取editlog日志文件,加载到内存中,使当前内存中元数据信息与上次关闭系统时保持一致。然后在磁盘上生成一份同内存中元数据镜像相同的fsimage文件,同时生成一个新的null的editlog文件用于记录以后的hdfs文件系统的更改。

启动datanode:

向namenode注册;

向namenode发送blockreport。

启动成功后,client可以对HDFS进行目录创建、文件上传、下载、查看、重命名等操作,更改namespace的操作将被记录在editlog文件中。

3、SecondaryNameNode

辅助namenode,不能代替namenode。

SecondaryNameNode的主要作用是用于合并fsimage和editlog文件。在没有SecondaryNameNode守护进程的情况下,从namenode启动开始至namenode关闭期间所有的HDFS更改操作都将记录到editlog文件,这样会造成巨大的editlog文件,所带来的直接危害就是下次启动namenode过程会非常漫长。

在启动SecondaryNameNode守护进程后,每当满足一定的触发条件(每3600s、文件数量增加100w等),SecondaryNameNode都会拷贝namenode的fsimage和editlog文件到自己的目录下,首先将fsimage加载到内存中,然后加载editlog文件到内存中合并fsimage和editlog文件为一个新的fsimage文件,然后将新的fsimage文件拷贝回namenode目录下。并且声称新的editlog文件用于记录DFS的更改。

4、安全模式

在启动namenode至所有datanode启动完成前的阶段成为安全模式。在安全模式下,client只能读取部分HDFS文件信息,不允许client对HDFS的任何更改操作,比如创建目录、上传文件、删除文件、重命名文件等。

namenode推出安全模式条件需要满足以下条件:

datanodes blocks/total blocks >= 99.999% + 30s(缓冲时间) 此时安全模式才会推出

Secondary namenode工作流程:

1)secondary通知namenode切换edits文件

2)secondary通过http请求从namenode获得fsimage和edits文件

3)secondary将fsimage载入内存,然后开始合并edits

4)secondary将新的fsimage发回给namenode

5)namenode用新的fsimage替换旧的fsimage

Secondary namenode工作流程通过一张图可以表示为:

clip_image003

手工维护安全模式指令:

bin/hdfs dfsadmin -safemode <enter | leave | get | wait>

例如:

[hadoop@db01 ~]$ hdfs dfsadmin -safemode get

Safe mode is OFF

来源:网络


智能推荐

Android启动过程

1、背景知识                                                       &nbs...

linux启动过程

接触linux系统运维已经好几年了,常常被问到linux系统启动流程问题,刚好今天有空来梳理下这个过程: 一般来说,所有的操作系统的启动流程基本就是: 总的来说,linux系统启动流程可以简单总结为以下几步: 1)开机BIOS自检,加载硬盘。 2)读取MBR,进行MBR引导。 3)grub引导菜单(Boot Loader)。 4)加载内核kernel。 5)启动init进程,依据inittab文件...

vxworks启动过程

一. 引导Bootstrap在ROM中执行   romInit.s:romInit         目标板加电后,程序指针指向RESET中断程序入口处,开始执行初始化程序romInit.s,设置机器状态字及其他硬件相关寄存器,关闭中断,禁止程序和数据CACAHE,初始化内存,并设置堆栈指针,保存启动类型,调用romSt...

spring 启动过程

  1.首先,对于一个web应用,其部署在web容器中,web容器提供其一个全局的上下文环境,这个上下文就是ServletContext,其为后面的spring IoC容器提供宿主环境; 其次,在web.xml中会提供有contextLoaderListener。在web容器启动时,会触发容器初始化事件,此时contextLoaderListener会监听到这个事件,其contextIn...

zynq启动过程

本文主要介绍zynq启动过程,主要包括BootROM和FSBL等的执行过程。 硬件启动过程 重新上电或POR复位后进行硬件启动过程 扫描“启动引脚”设置,并存入只读寄存器slcr.BOOT_MODE中 若使能pll,则等到pll输出时钟;若旁路pll,则直接使用ps_clk时钟 更详细硬件启动过程可以参考下图 硬件启动过程 BootROM BootROM在POR复位后经过硬...

猜你喜欢

spring启动过程

不用担心框架不同,大家如果是使用的xml方式进行配置的话,可以去你的ContextListener里面进行追踪,spring-boot只是对 spring所有框架进行了一个集成,如果实在进行不了前面几个步骤的话,可以从文章第6步的AbstractApplicationContext开始看起, 这里就是spring最最重要的部分。   1、默认的spring启动器,DemoApplicat...

linux启动过程

Centos 7 启动过程 加载基本输入输出系统(BIOS): BIOS中包含硬件CPU,内存,硬盘,等相关信息。加载完BIOS信息,计算机将根据顺序进行启动 读取MBR 读取完BIOS信息计算机将会查找BIOS所指定的硬盘MBR引导扇区,将其内容复制到0x7c00地址所有在物理内存中。被复制到物理内存的内容是bootloader,然后进行引导 GRUP引导 GRUP启动引导器是计算机启动过程中运...

Linux启动过程

(本文内容来自于菜鸟课程,本贴主要是用于记录学习) 五个阶段 1、内核的引导 BIOS开机自检——>读入/boot下的内核文件 运行 init 系统初始化 建立终端 用户登录系统...

Android启动过程

上述报价是百分之一百合适的。 从表面上看,Android似乎是一个简单的操作系统。 但是,相比之下,大多数智能手机消费者使用的操作系统中添加的过程和功能要复杂得多。 对于初学者来说,引导过程不过是一堆面向最终用户的精美图像和动画。 这篇文章旨在为那些最终用户分解启动过程。 我保证您需要阅读完整的书才能理解流程。 如果以正确的方式进行解释,没有什么太复杂的。 基本过程的骨架 引导ROM->引导...

redis中的hash扩容渐进式rehash过程

背景: redis字典(hash表)当数据越来越多的时候,就会发生扩容,也就是rehash 对比:java中的hashmap,当数据数量达到阈值的时候(0.75),就会发生rehash,hash表长度变为原来的二倍,将原hash表数据全部重新计算hash地址,重新分配位置,达到rehash目的 redis中的hash表采用的是渐进式hash的方式: 1、redis字典(hash表)底层有...

问答精选

How to get the sum of rows using a vector and the make the result in a column

I have a dataframe and i want to calculate the sum of variables present in a vector in every row and make the sum in other variable after i want the name of new variable created to be from the name of...

Call a custom class in zend framework

I have a very rough project that done partially in zend framework (not ZF2). The 'application', 'library' and 'public' folders are on the same root. Now i need to create a library 'Anil' in the 'libra...

Hide Some Of The Categories In Magento?

I want to hide some of the categories from magento home page. I have created some categories like New Arrivals, Special Offer Which I would like to show in some different way may be in left panel or r...

Reading an internal file in Android Studio

I am writing to an internal file in Android Studio The code lets me write lines of data split with commas. I am able to then go to another activity and read it all out at once. However I want to be ab...

Rails Acts_as_votable Gem Like/Unlike Buttons with Ajax

I'm new to Ruby On Rails, I used the acts_as_votable gem to create Like and Unlike Buttons to make Users like and unlike Posts but I can't make them change from Like to Unlike (and viceversa) and upda...

相关问题

相关文章

热门文章

推荐文章

相关标签

推荐问答