DFS架构图
知识点
1.HDFS Hadoop Distributed File System Hadoop的分布式文件系统,可以存储海量数据(文件,图片,影音等),实际工作中,一般存储的都是用户的访问日志(.txt)
2.HDFS之所以能够存储海量数据,原因是一个可扩展的分布式架构,硬盘存储空间不够,加服务器即可。
3.HDFS是基于Google的一篇论文《Google File System》
4.namenode,名字节点。最主要的职责是管理和存储HDFS的元数据信息(比如文件名,文件大小,文件切块的数量,每个文件块的大小,文件块编号,存储在哪个datanode上),可以通过指令:
hadoop fsck /park01/1.txt -files -blocks -locations
5.namenode不存储文件块
6.namenode除了存储元数据信息以外,还会通过RPC心跳机制来管理各个datanode
7.namenode会把元数据信息放在namenode服务器的内存里,目的是供用户快速查询。
8.namenode为了确保元数据存储的可靠性,会将元数据落地,存储的目录路径有core-site.xml里的hadoop.tmp.dir来指定的。
注意:此属性默认是放在linux的 /tmp 目录,所以在工作中一定要更换此目录。
9.namenode底层是通过两个文件来进行元数据管理:
①Edits文件 当客户端发起写请求时,Edits文件都会进行记录
写请求,比如:-mkdir -put -mv
②Fsimage文件 存储元数据信息的
以上这个两个文件会定期做一次合并,合并的目的是确保Fsimage文件里的数据是最新的。合并周期默认是3600s(1小时)
10.以上这个两个文件可以在配置的元数据目tmp/dfs/name/current找到
11.格式化指令:hadoop namenode -format
它的作用是在元数据目录生成新的Edits和Fsimage文件。
这个指令 在初次Hadoop时需要执行一次。
12.格式化指令很危险,因为它会清空之前所有的元数据。所以在实际工作,初次使用完之后,会通过配置文件的使得这个指令失效。
13.Edits和Fsimage文件可以通过指令手动合并:hadoop dfsadmin -rollEdits
14.为了当namenode宕机后,SNN能够工作,我们需要SNN具有元数据数据,
所以Hadoop底层机制是让SNN来做元数据的合并工作,通过这机制使得NN和SNN都有元数据信息了。
注意:以上这个机制存在一个问题,就是可能会造成元数据丢失
比如:
3:00 Edits和Fsimage 合并一次
3:30 namenode 宕机了
相当于丢失了30分钟之内的元数据信息。
这个机制是Hadoop1.0的机制,是存在问题的,即SNN合并不能达到实时热备,所以会元数据丢失,即Hadoop1.0的namenode还是会存在单点故障问题。
15.下图是Hadoop2.0 集群的架构图。
Hadoop2.0如果伪分布式模式,会看到SNN,但实际没有作用
Hadoop2.0如果是完全分布式,就没有SNN进程了
16.可以指令单独启停某个进程:
启动:
hadoop-daemon.sh start namenode
hadoop-daemon.sh start datanode
hadoop-daemon.sh start secondarynamenode
停止:
hadoop-daemon.sh stop namenode
此外,掌握:start-dfs.sh 启动和HDFS相关的所有进程
17.当namenode挂掉再次启动时,底层会将Edits和Fsimage合并一次。
3:10 namenode 宕机
即3:00 ~3:10会产生一些操作记录,
所以通过这种机制,可以确保namenode宕机再启动之后,Fsimage是最新的
18.当整个HDFS启动(namenode和datanode)时,底层每台datanode都会向namenode汇报自身的存储状态信息(存储了哪些文件块),namenode收到这写数据后,汇总并检查。检查文件块是否缺少,数据是否丢失,以及每个文件块的副本数量是否达到要求(集群环境,3副本),如果检查有问题,HDFS会进入安全模式,在安全模式下,要完成数据的修复、副本的复制。安全模式直到数据恢复完毕之后自动退出
19.如果HDFS处于安全模式,对外只能提供读服务,不能提供写服务。
可以通过指令:
hadoop dfsadmin -safemode enter
hadoop dfsadmin -safemode leave
20.如果是伪分布式模式,在hdfs-site.xml 配置副本数量,只能配置1,因为如果大于1,会使得HDFS一直安全模式而不退出(因为副本数量一直满足不了要求,就一台服务器,只能存一个副本)
21.datanode,数据节点,专门用来存储和管理文件块。
22.datanode会定期向namenode发送心跳,心跳周期默认是3s
23.配置datanode地址列表是在slaves配置文件里配置的
24.HDFS存储文件的方式是切块存储,
Hadoop 1.0 切块大小64MB
Hadoop 2.0 切块大小128MB
比如:上传来个文件①1.txt 257MB ②2.txt 100MB ,并设定副本数=1
①1.txt 1块:128MB 2块:128MB 3块:1MB
②2.txt 1块:100MB
综上,共4个文件块。
强调:切块是以文件为单位的,不同文件的文件块不能共用。
块是多大,在磁盘上就占多大。比如1MB文件块就占1MB,不会浪费127MB的磁盘空间的。
25.HDFS的特点:当文件上传HDFS之后,就不允许修改此文件。所以HDFS的适用场景:once-write-many-read (一次写入,多次读取)
26.HDFS不允许修改数据,但允许追加数据
27.HDFS是否适合存储海量的小文件(比如几kb,几mb)?
不适合,因为每个文件都会占用一条元数据信息,根据经验,一条元数据大约在150字节,即如果由海量小文件时,会占用大量的namenode服务内存空间。