HDFS(Hadoop Distributed Filesystem)
- HDFS是为高数据吞吐量应用优化的,则会以提高实践延迟为代价。
- 由于namenode内存容量限制,HDFS不适合存储大量的小文件。
- HDFS只支持单个写入者,不支持多个写入者,不支持在文件任意位置修改
HDFS的设计
设计理念:一次写入,多次读取。
HDFS上的文件是被划分为块,块作为独立的存储单元(默认128M),且HDFS中小于一个块大小的文件不会占据整个块。
好处:
- 一个文件的大小可以大于网络中任意一个磁盘的容量
- 大大简化存储系统的设计:简化存储管理
- 块适合用于数据备份而提高数据容错能力和提高可用性
namenode与datanode
HDFS集群有两类结点:一个管理节点namenode和多个工作结点datanode。
namenode
- namenode管理文件系统的命名空间,它维护着文件系统树及整棵树内所有的文件和目录。这些信息以命名空间镜像文件和编辑日志文件两个文件形式永久保存在本地磁盘上。
- namenode在内存中保存文件系统中每个文件和每个数据块的引用关系。
- namenode负责管理文件系统的名字空间以及客户端对文件的访问
- namenode全权管理数据块的复制,它周期性得从集群中每个Datanode接收心跳信号(存活的象征)和块状态报告(节点上所有数据块的列表)。
- 跟文件内容相关的数据流不经过namenode,只会询问它跟哪个datanode联系
- 目录作为元数据保存在namenode中
datanode
- datanode是文件系统的工作结点。它们根据需要存储并检索数据块,并定期向namenode发送它们所存储的块的列表。
- datanode启动后向namenode注册,通过后,定期向NameNode上报信息
- 心跳是每秒3次,心跳返回结果会带有复制数据,删除数据等命令。如果超过10分钟没有收到某个datanode的心跳,则认为该节点不可用
数据损坏的处理
- 当datanode读取block时,会计算checksum
- 如果计算的checksum与block创建时值不一样,说明block已坏,Client读取其他datanode上的block
- namenode标记该块已经损坏,然后复制block达到预期设置的文件备份数
- datanode在其文件创建三周后验证其checksum
启动
NameNode初始化时,创建fsimage文件和edits文件。
启动
- namenode加载fsimage和edits文件(到内存),并生成新的fsimage和一个空的edits
- datanode向namenode注册,发送Block Report(安全模式,只读状态)
- namenode开始监听RPC(远程过程通过协议)和HTTP请求
Secondary NameNode运行时定期合并edits文件至fsimage,避免意外宕机丢失edits
命令行接口
hadoop fs -help
hadoop fs -copyFromLocal 本地文件 hdfs文件
hadoop fs -cppyToLocal hdfs文件 本地文件
hadoop fs -mkdir books
hadoop fs -ls
Found 2 items
drwxr-xr-x - tom supergroup 0 2014-10-04 13:22 books
-rw-r--r-- 1 tom supergroup 119 2014-10-04 13:21 quangle.txt
第一列显示文件模式;第二列是文件的备份数;第三列所属用户;第四列所属组;第五列文件大小;第六列第七列 最后修改日期与实践;第八列是文件或目录的名称。