hadoop之安全模式,HDFS的读取,写入
一:安全模式
1:Name启动的时候首先将fsimage(镜像)载入内存,并执行(replay)编辑日志editlog的的各项操作
2:一旦在内存中建立文件系统元数据映射,则创建一个新的fsimage文件(这个过程不需SecondaryNameNode)
和一个空的editlog
3:在安全模式下,各个datanode会向namenode发送块列表的最新情况
4:此刻namenode运行在安全模式。即namenode的文件系统对于客服端来说是只读的。(显示目录,显示文件
内容等。写、删除、重命名都会失败)
5:NameNode开始监听RPC和HTTP请求
解释RPC:RPC(Remote Procedure Call Protocol)——远程过程通过协议,它是一种通过网络从远程
计算机程序上请求服务,而不需要了解底层网络技术的协议。
6:系统中数据块的位置并不是由namenode维护的,而是以块列表形式存储在datanode中。
7:在系统的正常操作期间,namenode会在内存中保留所有块信息的映射信息。
8:进入和离开安全模式:
查看namenode处于哪个状态
hadoop dfsadmin –safemode get
进入安全模式(hadoop启动的时候是在安全模式)
hadoop dfsadmin –safemode enter
离开安全模式
hadoop dfsadmin -safemode leave
综上所述:
分布式文件系统启动的时候处于安全模式,此时文件系统中的内容不允许修改也不允许删除,直到安全
模式结束。安全模式主要是为了系统启动的时候检查各个DataNode上数据块的有效性,同时根据策略必要
的复制或者删除部分块数据。
二:HDFS的读取
1:使用HDFS提供的客户端开发库Client,向远程的Namenode发起RPC请求;
2:Namenode会视情况返回文件的部分或者全部block列表,对于每个block,Namenode都会返回有该block拷贝
的DataNode地址;
3:客户端开发库Client会选取离客户端最接近的DataNode来读取block;
4:如果客户端本身就是DataNode,那么将从本地直接获取数据.:
5:读取完当前block的数据后,关闭与当前的DataNode连接,并为读取下一个block寻找最佳的DataNode;
三:HDFS的写入
1:使用HDFS提供的客户端开发库Client,向远程的Namenode发起RPC请求;
2:Namenode会检查要创建的文件是否已经存在,创建者是否有权限进行操作,成功则会为文件创建一个记录,
否则会让客户端抛出异常;
3:当客户端开始写入文件的时候,开发库会将文件切分成多个packets,并在内部以数据队列"data queue"的形式
管理这些packets,并向Namenode申请新的blocks,获取用来存储replicas的合适的datanodes列表,列表的大小
根据在Namenode中对replication的设置而定。
4:开始以pipeline(管道)的形式将packet写入所有的replicas中。开发库把packet以流的方式写入第一个datanode,
该datanode把该packet存储之后,再将其传递给在此pipeline中的下一个datanode,直到最后一个datanode,这种
写数据的方式呈流水线的形式。
5:最后一个datanode成功存储之后会返回一个ack packet,在pipeline里传递至客户端,在客户端的开发库内部维护
着"ack queue",成功收到datanode返回的ack packet后会从"ack queue"移除相应的packet。
6:如果传输过程中,有某个datanode出现了故障,那么当前的pipeline会被关闭,出现故障的datanode会从当前
的pipeline中移除,剩余的block会继续剩下的datanode中继续以pipeline的形式传输,同时Namenode会分配一个
新的datanode,保持replicas设定的数量。