沅江市住房和建设局网站,网站图片管理系统,人力外包网站,百度软文推广怎样收费HDFS秒懂 HDFS定义HDFS优缺点优点缺点 HDFS组成架构NameNodeDataNodeSecondary NameNodeClient NameNode工作机制元数据的存储启动流程工作流程 Secondary NameNode工作机制checkpoint工作流程 DataNode工作机制工作流程数据完整性 文件块大小块太小的缺点块太大的缺点 文件写入… HDFS秒懂 HDFS定义HDFS优缺点优点缺点 HDFS组成架构NameNodeDataNodeSecondary NameNodeClient NameNode工作机制元数据的存储启动流程工作流程 Secondary NameNode工作机制checkpoint工作流程 DataNode工作机制工作流程数据完整性 文件块大小块太小的缺点块太大的缺点 文件写入流程机架感知作用策略 文件读取流程HDFS的shell操作 HDFS定义 HDFSHadoop Distributed File System是一个分布式的文件系统用户存储文件通过目录树来定位文件适合一次写入多次读出的场景不支持文件的修改 HDFS优缺点
优点
高容错性数据保存在多个副本某一个副本数据丢失后可以自动恢复适合处理大数据数据规模可达到GB、TB级能够处理百万规模的文件数量可构建在廉价的机器上通过多副本机制提高可靠性
缺点
不适合低延时数据访问毫秒级的存储是做不到的无法高效的对大量小文件进行存储小文件的寻址时间会超过读取时间不支持并发写入和文件随机修改一个文件只能一个写不允许多个线程同时写仅支持数据追加不支持文件修改
HDFS组成架构
NameNode
NNMaster,它是一个主管、管理者
保存HDFS上所有文件的元数据维护副本数管理数据块block的映射信息处理客户端请求
DataNode
DN就是Slave,数据节点
存储数据块执行对数据块的操作
Secondary NameNode
2NN不是NN的热备
辅助NameNode分担工作量 定期进行checkpoint紧急情况下可辅助恢复NameNode
Client
客户端
通过命令管理和访问HDFS文件切分与合并
NameNode工作机制
元数据的存储 元数据存储在fsiamge文件和edits文件中 了解NameNode的文件
1、fsimageNameNode内存中元数据序列化后形成的文件元数据的快照文件fsimage文件的产生1第一次格式化NN时此时会创建NN的工作目录在目录中生成一个fsimage_000...000文件2当NN在启动时NN会将所有的edits文件和fsiamge文件加载到内存合并得到最新的元数据将元数据持久化到磁盘生成新的fsimage文件3如果启用了2NN,2NN也会辅助NN合并元数据并将合并后的元数据发送给NN
查看faimage文件:语法hdfs oiv -p 文件类型 -i 镜像文件 -o 转换后文件输出路径实例hdfs oiv -p XML -i fsimage_0000000005067017090 -o /opt/fsimage.xml2、fsimage_xxx.md5是对应文件的md5值文件用来保证fsimage的一致性3、edits记录客户端更新元数据信息的每一步操作txid:每次更新元数据的写操作命令会被分解为若干步每一步都会有一个id这个id称为txid也叫事务id
edits文件的产生NN在启动之后每次更新元数据的操作都会将命令记录到edits_inprogress文件中当达到指定条件之后会进行滚动生成edits_txid文件同时生成新的edits_inprogress文件来记录新的操作等edits_inprogress文件再次满足条件后继续滚动以此循环
edits_inprogress的滚动条件1操作次数默认txid达到100万次会自动滚动生成edits文件参数可配置2时间默认每2分钟文件自动滚动生成edits文件时间可配置3重启当NN被重启的时候也会自动触发edits_inprogress的滚动4手动执行滚动通过命令hdfs dfsadmin -rollEdits强制滚动edits_inprogress
查看edits文件:语法hdfs oev -p 文件类型 -i编辑日志 -o 转换后文件输出路径实例hdfs oev -p XML -i edits_0000000005067128882-0000000005067142023 -o /opt/edits.xml4、edits_inprogress正在使用的编辑日志文件5、seen_txid文件保存的是一个数字是edits记录里txid的最后一个数字6、VERSION记录的是NameNode的集群信息namespaceID 文件系统的唯一标识符管理一组blockpoolID
clusterID 集群ID
cTime NameNode存储系统的创建时间
storageType 说明该存储目录包含的是NameNode的数据结构
blockpoolID 针对每一个NamespaceID所对应的blockpool的ID
layoutVersionHDFS永久性数据结构的版本信息每次格式化NN会产生一个VERSION文件重新生成clusterID和blockpoolIDblockpoolID会被DN领取生成一个同名的目录每次DN启动时
会将这个同名目录中的块上报给NNDN在第一次启动时如果没有VERSION信息会向配置文件中配置的NN发起请求生成VERSION加入到集群启动流程 加载fsimage fsimage文件记录了自最后一次检查点之前HDFS文件系统中所有目录和文件的序列化信息 加载edits edits文件记录了最后一次检查点之后所有针对HDFS文件系统的操作加载了这两个文件后确保了数据的完整性和一致性 记录checkpoint 在NN启动时edits_inprogress文件会回滚也会再生成一个新的fsimage文件这样在本次启动之前的所有数据都被保存记录本次检查点以便更新新的操作 安全模式 在加载完fsimage和edits文件后NN开始监听DN请求在这个过程期间NN一直运行在安全模式在安全模式下只能进行有限的读操作不能对hdfs文件系统做任何修改各个DN会向NN上报最新的块信息在整个系统中99.9%的块满足至少有一个副本NN会在30秒后退出安全模式 # 基本语法
hdfs dfsadmin -safenode get 功能描述查看安全模式状态
hdfs dfsadmin -safenode enter 功能描述进入安全模式状态
hdfs dfsadmin -safemode leave 功能描述离开安全模式状态
hdfs dfsadmin -safemode wait 功能描述等待安全模式状态hdfs接收的命令会等待待离开安全模式后依次执行工作流程 Secondary NameNode工作机制
checkpoint checkpoint是一种HDFS元数据的备份机制元数据信息依据触发条件被定期写入持久化存储 checkpoint 默认触发条件
每隔1小时触发一次edits产生了100万次的操作记录
工作流程 DataNode工作机制
工作流程
DataNode启动后向NameNode注册通过后每1小时向NameNode上报所有的块信息每3秒一次心跳心跳返回结果带有NameNode给该DataNode的命令如果超过10分钟没有收到某个DataNode的心跳则认为该节点不可用
数据完整性
一个数据块在DataNode上以文件形式存储在磁盘上包括两个文件一个是数据本身一个是元数据包括数据块的长度块数据的校验和以及时间戳当DataNode读取Block的时候它会计算CheckSum校验和如果计算后的CheckSum与Block创建时值不一样说明Block已经损坏Client会复制其他DataNode上的BlockDataNode在其文件创建后周期验证CheckSum
文件块大小
HDFS中的文件存储在物理上是分块存储blockHadoop1.x默认大小是64MHadoop2.x默认大小是128M 块的大小设置基于最佳传输损耗理论在一次传输中寻址时间占用总传输时间的1%时本次传输的损耗最小为最佳性价比传输目前硬件的发展条件普通磁盘写的速率大概为100M/S, 寻址时间一般为10ms!一次传输时间就是1s所以块的最佳大小为100M块的大小最好为2的n次方所以最接近的就是128M如果磁盘的传输速率很快例如是300M/S那么块大小就可以调整到 256M可以通过dfs.blocksize参数进行设置。 块太小的缺点
同样大小的文件在存储时块太小会占用更多的NN的元数据空间在进行读写操作时DFS存储了大量的小文件会消耗额外的寻址时间
块太大的缺点
块太大在读取块内某一部分数据场景时需要将整个块下载后再读取内容会带来更多额外的网络消耗不够灵活在上传文件时一旦发生故障需要将整个块文件重新上传那么之前上传文件的资源开销就会浪费
默认块大小为128M128M指的是每个块最多存储128M的数据如果当前块存储的数据不满128M那么存了多少数据就占用多少的磁盘空间一个块只属于一个文件
文件写入流程 流程详细说明 流程5客户端根据返回的DN节点请求建立传输通道客户端向最近的DN节点发起通道建立请求由这个DN节点依次向通道中的距离当前节点距离最近的下一个节点发送建立通道请求各个节点发送响应通道建立成功 流程7客户端每读取64K的数据会封装为一个packet数据包每个packet为64K由若干个chunks组成每个chunks是512B还会包含一个checksum校验和封装成功的packet会放到一个叫做dataQuene的队列中按顺序发送到通道里第一个DN节点节点收到packet之后再送到通道的下一个节点发送过之后的packet会被放入到ackQuene队列里当所有的DN节点返回了成功的ack确认消息这个packet会在ackquene队列中删除。一旦发生错误ackQuene队列里的小包会回滚到dataQuene在原始通道里把坏的节点剔除掉再重新建立一个新的通道继续传输。 ACK (Acknowledge Character即是确认字符在数据通信中接收方发给发送方的一种传输类控制字符。表示发来的数据已确认接收无误。在 pipeline 管道传输数据的过程中传输的反方向会进行ACK校验确保数据传输安全 流程8第一个块传输完成后DN向NN上报块的消息只要有一个DN节点上报块信息,NN就认为这个块已经传输完成通道关闭开始下一个块的传输重复3-8的流程 副本数如果暂时不满足条件之后NN会自动检查维护副本数 机架感知 机架感知是一种能够识别集群中各个节点所属机架并在任务调度和数据块副本放置时利用这些信息来优化数据传输和任务执行效率 作用
提高数据传输效率增强容错能力优化任务调度
策略
第一个副本放在本地机架的一个DN节点第二个副本放在本地机架的另一个DN节点本地机架的网络拓扑距离最多为2速度快第三个副本放在其他机架的一个DN节点考虑安全性更多的副本放置在相对空闲的其他DN节点上
文件读取流程 流程3NN将文件所对应block的存储地址放入一个队列客户端从队列中依次按每一个block对应地址来取出数据也是按照packet进行读取读取的时候可以多个DN一起读取 流程4读取完一个block之后会对这个block进行一次checksum验证验证这个block的数据总量是否正确。如果不一致说明这个block已损坏客户端会通知NN,再从其他节点上读取该block,NN收到消息会重新备份一次,并发指令给这个DN将这个坏的block删掉 HDFS的shell操作
bin/hadoop fs command
OR
bin/hdfs dfs command# hadoop fs : 既可以对本地文件系统进行操作还可以操作分布式文件系统
# hdfs dfs : 只能操作分布式文件系统常用命令实例
# 查看文件目录
hadoop fs -ls# 创建目录
hadoop fs -mkdir# 删除文件或目录
hadoop fs -rm# 移动或更名文件
hadoop fs -mv