一、特点
1、专为存储超大文件而设计。
2、重点保证高吞吐量而不是低延迟的用户响应。
3、容错性高,有完善的冗余备份机制。
4、支持简单的一致性模型,移动计算优于移动数据,兼容性强。
5、不适用于大量小文件、低延迟数据访问、多用户写入场景。
二、主要组件
HDFS 主要由三个组件构成:
1、NameNode:部署在 Master 节点上。
2、SecondaryNameNode:部署在 Master 节点上。
3、DataNode:部署在 Slave 节点上。
三、数据块
HDFS中的数据块存储在 DataNode 中,以多个副本的形式分布在集群中,默认副本数是3个。
采用数据块存储的好处:
1、文件可以任意大小,不用担心单节点磁盘容量不足。
2、简化了文件子系统的设计,元数据交给主节点管理。
3、有利于提高系统可用性,有利于负载均衡。
四、NameNode
1、元数据
NameNode 管理文件系统的命名空间,维护文件系统树,以及树中的文件的和目录,也负责维护所有文件或目录的打开、关闭、移动、重命名等操作。
具体文件数据传输不需要经过 NameNode。
NameNode 的元数据不包括每个数据块的具体位置信息,因为系统重启时会重构。
2、持久化
将数据写入本地文件系统的同时,再实时同步到一个远程挂载的网络文件系统(NFS)。
运用 SecondaryNameNode 合并的命名空间镜像副本恢复。
五、DataNode
负责存储数据块。
负责为客户段提供数据块读写服务。
根据NameNode的指示进行创建、删除、复制等操作。
通过心跳消息(默认3秒)定期向 NameNode 发送数据块列表信息。
六、SecondaryNameNode
NameNode 中存放元数据的文件是 fsimage。
元数据的操作信息会被持久化到 edits 文件中。
SecondaryNameNode 会定期向 NameNode 请求并合并 fsimage 和 edits 文件,生成新的 fsimage 文件。
NameNode 获取新的 fsimage 文件替换原来的,然后将最后一次检查点的时间戳更新进文件 fstime 中。
SecondaryNameNode 保存状态总是滞后于 NameNode,所以用这种方法恢复数据,难免会有数据丢失。
七、数据备份
在不同节点备份3个副本,选择副本时,HDFS 会请求最近的副本。
八、通信协议
HDFS 的通信协议都是基于 TCP/IP 的。
九、可靠性保证
HDFS 可以检查到数据块损坏。在读取数据块时,HDFS 会对数据块、保存的校验和文件进行匹配检测。如果发现不匹配,NameNode 会重新备份损坏的数据块。
十、基本命令
创建目录
hadoop fs -mkdir /test
hadoop fs -mkdir /test/input
注意,如果没有提前创建好 /test 目录,不能用上述命令创建 input 目录。
查看文件列表
hadoop fs -ls [HDFS路径]
文件上传
将文件从本地复制到HDFS的操作。
hadoop fs -put [本地路径] [HDFS路径]
hadoop fs -copyFromLocal [本地路径] [HDFS路径]
文件下载
将文件从HDFS复制到本地的操作。
hadoop fs -get [HDFS路径] [本地路径]
hadoop fs -copyToLocal [HDFS路径] [本地路径]
查看HDFS中的文件内容
hadoop fs -cat [HDFS路径]
删除HDFS中的文件
hadoop fs -rm [HDFS路径]