HDFS详解
HDFS:是hadoop的核心子项目,是一个分布式的文件系统
它整合了众多的文件系统,并提供了一个类FileSystem作为接口来支持各个系统
简介:
HDFS:基于流数据模式访问和处理超大文件的需求而开发的,他可以运行在廉价的服务器上
1.超大文件处理
不言而喻,其处理是百m来至百TB的文件
2.流式访问
其以“一次写入,多次读取”的宗旨,一旦数据被写入就会被分发到多个服务器上,往往数据是成块的,所以往往访问整个数据集要比访问一条数据快
3.在廉价机上部署
也造成了一些缺点:以延迟来达到高吞吐(不适合低延迟访问),无法高效储存大量小文件(所以都合并再处理),不支持多个用户写入和随意修改
相关概念
1.块
块是HDFS存储的基本单元,它的默认值是64MB。
作为一个分布式文件系统,块发挥了很大的作用,超大型的文件一个机器是装不了的,那么分为了多个块,就可以分配到多个主机上。不仅如此它还是很好的容错性,每份文件都会有默认的3份文件。
2.NameNode和DateNode
两类节点分别承担Master和Worker的任务。NameNode主要是进行任务的调度,DateNode则是任务的执行。
NameNode负责维护整个文件的命名空间等,每次得到请求时,把相应文件的位置告诉DN,让Worker去完成,这样可以减轻NameNode的负担。
DateNode时间包括了数据本身和元数据(数据块的长度时间等)。
怎么确保两者的链接呢?
是通过心跳信号和块状态报告。每隔一定时间,DateNode会向NameNode发送心跳证明自己还存活,也会隔一定时间发送文件存储信息到主节点。
这里再说说亲身经历的一些错误。
DateNode不启动,查看日志如果有ID不统一,这是因为DN和NameNode版本号不一样,将版本号强行修改。文件在Hdfs/data/../current
有SecondaryNameNode没有NameNode,且日志说日志不连续。可能是NameNode元数据,hadoop namenode -recover修复,选择C
There appears to be a gap in the edit log. We expected txid 1, but got txid 3.
体系结构:
1.副本存放与读取
副本存放往往是系能和可靠的关键。HDFS采用了机架感应的方式。
因为同一机架上两台的传输成本低于两个在不同机架上传输成本。副本存放是一部分放在本机架上减少传输成本,但又防止整个机架奔溃,所以也存放了一些在其他的机架上。
因为有的在一个机架,减少了写操作的数据传输。副本在多个机架上,这样减少了读取时需要的总带宽。读取数据时,也会让客户在靠得最近的机器上读取。
2.安全模式
当NameNode启动后会进入一种安全模式,在这个阶段,不会进行块的复制,也不进行写操作。在这个阶段它会检查每个数据块的副本数,在副本数达到最小值时才认为是安全的。在确认一定百分比的块达标之后,退出安全模式。把不合格的副本补上。
3.文件安全
HDFS有SecondaryNameNode保证文件安全,它会和NameNode同步合并编辑日志中的命名空间镜像。但是其同步备份要慢于NameNode,所以会有一定的损失
常用命令
查看块并且打印报告 hadoop fsck / -files -blocks
复制文件到本地或者到HDFS hadoop fs -copyFromLocal(-copyToLocal) filename towhere
查看文件列表 bin/hadoop fs -ls / 或者 bin/hdfs dfs -ls /
创建文件夹 hadoop fs -mkdir filename 或者 hdfs dfs -mkdir /filename
文件权限 hdfs dfs -chomd 777 /