* 基于大量分布节点上的本地文件系统。
- #### 2.流式访问
* 批量处理数据
+ 提高数据吞吐率
- #### 3.容错
* 正确处理故障,确保数据处理继续进行,且不丢失数据。
- #### 4.简单的文件模型
* 一次写入,多次读取。
* 支持在文件末端追加数据,不支持在文件位置任意修改。
- #### 5.数据块存储模式
* 默认数据块64MB
- #### 6.跨平台兼容性
* 采用JAVA语言,支持JVM的机器都可以运行HDFS。
+ ### 2.2 HDFS的存储架构及组件
- #### 2.2.1 HDFS的存储架构
* 采用经典的主从架构 4个部分组成
+ Client (客户端)
- DataNode (数据节点)
* NameNode (名称节点)
+ SecondaryNameNode (第二名称节点)
* 一个HDFS集群由一个名称节点和一定数量的数据节点组成。
* 名称节点和数据节点共同协调完成分布式的文件存储服务。
- #### 2.2.2 数据块
* 传统的文件系统
+ 为提高磁盘读写效率,一般以数据块为单位,而不是以字节为单位,数据块是磁盘读写的最小单位。
+ 文件系统的数据块大小通常是几千字节,而磁盘的数据块大小通常是512B。
* HDFS
+ 这里的数据块是一个更大的单元,Hadoop 2.x版本默认的数据块大小是128MB。
+ 如同单一磁盘的文件系统中的文件,HDFS中的文件被分解成数据块大小的若干数据块,独立保存在各单元。
+ HDFS使用数据块的好处
- 文件存储不受单一磁盘大小限制。
* 集群的若干磁盘共同存储。
- 简化存储系统的存储过程。
* 数据块大小固定,简单计算给定磁盘上存储数据块个数。
- #### 2.2.3 DataNode
* 定义
+ 一个数据节点运行一个数据节点进程。
+ 可作为服务器接收来自客户端访问处理数据块读写请求。
+ 通过心跳消息定时向名称节点发送所存储的文件信息。
* 作用
+ 管理所在节点上的数据存储。
- #### 2.2.4 NameNode
* 定义
+ 名称节点是一个中心服务器
* 作用
+ 管理文件系统的命名空间和元数据
+ 管理客户端对文件的访问
* 保存文件系统的3种元数据
+ (1)命名空间,即HDFS的目录结构。
+ (2)数据块与文件名的映射表。
+ (3)每个数据块副本的位置信息,每一个数据块默认有3个副本。
* 元数据信息
+ (1)文件的owership和permission。
+ (2)文件包含哪些数据块。
+ (3)数据块保存在哪个DataNode(由DataNode启动时上报)上。
- #### 2.2.5 SecondaryNameNode
* 备份NameNode的元数据,以便失效恢复。
* 周期性(周期的长短可配置)保存
- #### 2.2.6 心跳消息 (Heartbeat)
* 名称节点周期向管理的各数据节点发送心跳消息,收到心跳消息的数据节点回复。
- #### 2.2.7 客户端
* 严格来讲,客户端(代表用户)并不能算是HDFS的一部分
* 是用户和HDFS通信的渠道之一,部署的HDFS都会提供客户端。
* 为用户提供了一种与Linux中的Shell类似的方式访问 HDFS的数据。
* 支持常见的操作,如打开、读取、写入等
* 通过与NameNode 和DataNode 交互来访问HDFS中的文件。
- ### 2.3 HDFS的Shell 操作
* 适用
+ (1)hadoop fs:适用于任何不同的文件系统,例如本地文件系统和HDFS。
+ (2)hadoop dfs:只适用于HDFS。
+ (3)hdfs dfs:与hadoop dfs命令一样,也只适用于HDFS。
* #### 2.3.1查看命令的使用方法
+ 启动Hadoop
- cd /usr/local/hadoop
- ./sbin/start-dfs.sh
+ 关闭Hadoop
- ./sbin/stop-dfs.sh
+ 查看支持的操作
- cd /usr/local/hadoop
- ./bin/hdfs dfs
+ 查看某命令的用法
- 例如,查cp命令的用法
- ./bin/hafs dfs -help cp
* #### 2.3.2 HDFS常用的Shell 操作
+ 1.创建目录——mkdir 命令
- hdfs dfs -mkdir [-p] <path>
- -p参数表示创建目录时先检查路径是否存在,如果不存在,则创建相应的各级目录。
+ 2.列出指定目录下的内容——ls命令
- hdfs dfs -ls -d -h -R
- -d:将目录显示为普通文件。
- -h:使用便于操作人员读取的单位信息格式。
- -R:递归显示所有子目录的信息。
+ 3.上传文件——put命令
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
升。**
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!