代刷开通建设网站,网络公司网站建设方案书,网站如何实现微信登录界面,ai可以用来做网站吗一、Hadoop HDFS的架构
HDFS#xff1a;Hadoop Distributed File System#xff0c;分布式文件系统
#xff11;#xff0c;NameNode
存储文件的metadata#xff0c;运行时所有数据都保存到内存#xff0c;整个HDFS可存储的文件数受限于NameNode的内存大小一个Block在…一、Hadoop HDFS的架构
HDFSHadoop Distributed File System分布式文件系统
NameNode
存储文件的metadata运行时所有数据都保存到内存整个HDFS可存储的文件数受限于NameNode的内存大小一个Block在NameNode中对应一条记录一般一个block占用150字节如果是大量的小文件会消耗大量内存。同时map task的数量是由splits来决定的所以用MapReduce处理大量的小文件时就会产生过多的map task线程管理开销将会增加作业时间。处理大量小文件的速度远远小于处理同等大小的大文件的速度。因此Hadoop建议存储大文件数据会定时保存到本地磁盘但不保存block的位置信息而是由DataNode注册时上报和运行时维护NameNode中与DataNode相关的信息并不保存到NameNode的文件系统中而是NameNode每次重启后动态重建NameNode失效则整个HDFS都失效了所以要保证NameNode的可用性
Secondary NameNode
定时与NameNode进行同步定期合并文件系统镜像和编辑日志然后把合并后的传给NameNode替换其镜像并清空编辑日志类似于CheckPoint机制但NameNode失效后仍需要手工将其设置成主机
DataNode
保存具体的block数据负责数据的读写操作和复制操作DataNode启动时会向NameNode报告当前存储的数据块信息后续也会定时报告修改信息DataNode之间会进行通信复制数据块保证数据的冗余性
Block数据块
基本存储单位一般大小为64M配置大的块主要是因为 1减少搜寻时间一般硬盘传输速率比寻道时间要快大的块可以减少寻道时间 2减少管理块的数据开销每个块都需要在NameNode上有对应的记录 3对数据块进行读写减少建立网络的连接成本一个大文件会被拆分成一个个的块然后存储于不同的机器。如果一个文件少于Block大小那么实际占用的空间为其文件的大小基本的读写单位类似于磁盘的页每次都是读写一个块每个块都会被复制到多台机器默认复制3份HDFS2.x以后的block默认128M
二、Hadoop 读文件 1客户端向NameNode发送读取请求 2NameNode返回文件的所有block和这些block所在的DataNodes包括复制节点 3客户端直接从DataNode中读取数据如果该DataNode读取失败DataNode失效或校验码不对则从复制节点中读取如果读取的数据就在本机则直接读取否则通过网络读取
三、Hadoop 写文件 1客户端将文件写入本地磁盘的 HDFS Client 文件中 2当临时文件大小达到一个 block 大小时HDFS client 通知 NameNode申请写入文件 3NameNode 在 HDFS 的文件系统中创建一个文件并把该 block id 和要写入的 DataNode 的列表返回给客户端 4客户端收到这些信息后将临时文件写入 DataNodes 1 客户端将文件内容写入第一个 DataNode一般以 4kb 为单位进行传输 2 第一个 DataNode 接收后将数据写入本地磁盘同时也传输给第二个 DataNode 3依此类推到最后一个 DataNode数据在 DataNode 之间是通过 pipeline 的方式进行复制的 4后面的 DataNode 接收完数据后都会发送一个确认给前一个 DataNode最终第一个 DataNode 返回确认给客户端 5当客户端接收到整个 block 的确认后会向 NameNode 发送一个最终的确认信息 6如果写入某个 DataNode 失败数据会继续写入其他的 DataNode。然后 NameNode 会找另外一个好的 DataNode 继续复制以保证冗余性 6 每个 block 都会有一个校验码并存放到独立的文件中以便读的时候来验证其完整性 5文件写完后客户端关闭NameNode 提交文件这时文件才可见如果提交前NameNode 垮掉那文件也就丢失了。只保证数据的信息写到 NameNode 上但并不保证数据已经被写到DataNode 中