Hadoop 复习 ---- chapter04
-
HDFS 的特性
1:它是一个分布式文件系统,适用于一次写入,多次读取的场景。
2:它是一个主从结构体系,由 namenode + datanode + (secondaryNamenode)
3:namenode : datanode = 1 : n
4:namenode:负责文件的命名空间
5:datanode:主要对数据进行存储
6:secondaryNamenode:是 namenode 的冷备 -
HDFS 适合对大数据的存储,大数据我们应该如何存储呢?
大数据的存储我们采用的是分而治之的思想。我们将一个大文件分成若干小文件进行存储。 -
那么分成的小文件多大的?
128M -
一个文件的操作需要两步
寻址时间 : 传输时间 = 1 : 100 = 10ms : 1s
我们硬盘的传输速率一般 100M/s -
hadoop2.x 默认 block 128M
-
hadoop3.x 默认 block 64M
-
一个集群的最小节点数量 2N+1 n>=1
-
hadoop 默认有 3 个副本(3 个副本怎么存放呢?)
机架感知策略
第一个副本放置在随机的一个机架上的一个节点上。
第二个副本放置在第一个副本相邻的机架上的任意节点上。
第三个副本放置在第一个副本的机架的相邻节点上。 -
namednode:用来管理文件系统的命名空间
-
namenode 的数据主要包含两部分:内存元数据 + 硬盘元数据
内存元数据:是真实的,是实时更新的最新的命令空间
硬盘元数据:是持久化的,序列化的问价。fsimage + edit -
模拟:对命令空间的增加操作
1:我们在启动 namenode 之前,应该先对 namenode 进行格式化。
hdfs namenode -format
2:启动 namenode,start-all.sh,是不是也在启动 datanode,datanode 会主动将他的信息发送给 namenode,所以 namenode 拥有 datanode 的命名空间信息。
3:我们要添加一个命名空间。
4:首先将添加操作记录到 edit01 文件中。且同步到 secondaryNamenode(edit 文件只记录事务性操作)
5:内存元数据真实对命名空间进行操作。这时没内存元数据的数据就是最新数据,如果你要进行查询操作,你是对内存元数据进行的查询操作。
6:edit01 文件会变得越来越大,我们不希望他越来越大。
7:secondaryNamenode 设置一个检查带你 checkpoint。
主要满足下面任意一条件,进行数据合并 fsimage + edit01
1、edit01 满足一定的大小
2、edit01 满足一定的存活时间
8:secondaryNamenode 要进行合并,它会告知 namenode。这时 namenode 会滚动生成一个新的 edit02 文件,后面的所有操作写入到 edit02 文件中。
9:secondaryNamenode 要进行合并文件 fsimage.check
10:secondaryNamenode 将文件 fsimage.check 上传到 namenode
11:namenode 重命名 fsimage.check 为 fsimage,覆盖原有文件。
剩下的操作重复 3-11 的操作 -
dfs.name.dir = /opt/hadoop/namenode:存放 namenode 信息的目录
-
dfs.data.dir = /opt/hadoop/datanode:存放 datanode 信息的目录
-
所有的 HDFS 通信协议都是构建在 TCP/IP 协议上。
ClientProtocal:client 和 namenode 之间的通信协议
datanodeProtatal:datanode 和 namenode 之间的通信协议
从 ClientProtocol 和 DatanodeProtocol 抽象出来一个远程调用(RPC),在设计上,Namenode 不会主动发起 RPC,而是响应来自客户端和 Datanode 的 RPC 请求。 -
HDFS 的安全模式
HDFS:1个 namenode + n个datanode + 1个secondaryNamenode
我们启动 HDFS 顺序:namenode -> datanode -> secondaryNamenode
namenode 启动成功,但是 datanode 并未全部启动成功。
当每个 datanode 启动成功后,会主动的汇报他的信息到 namenode。
当 namenode 收集到的 datanode 启动的成功率达到 99%。
namenode 会等待 30s,然后 NameNode 退出安全模式。
在过程中,NameNode 处于安全模式下,不能修改。 -
客户端读取文件的流程。
读取文件需要使用什么?
IO 流。我们以前的 IO 流,都是对本地文件的读取。
那么我们如果对 HDFS 上的文件进行读取呢?
hadoop 就封装了一个 FSDataInputStream 对象,用于对 HDFS 上的文件的读取。
hadoop 就封装了一个 FSDataOutputStream 对象,用于对 HDFS 上的文件的写入。 -
hadoop 会有一些操作指令,那么这些操作指令在哪里呢?
在 hadoop 的安装包目录下 sbin 和 bin 目录中。 -
sbin:放置了 hadoop 组件的启动命令
-
start-all.sh:启动所有的 hadoop 组件
-
start-dfs.sh:启动 HDFS 组件 namenode + datanode + secondaryNamenode
-
start-yarn.sh:启动 yarn 组件 resourceManager + nodeManager
-
bin:放置了 hadoop 组件的操作命令