文章目录
- HDFS介绍
- HDFS设计目标
- HDFS适用场景
- HDFS重要特性
- 主从架构
- 分块存储
- 副本机制
- 元数据MetaData管理
- Namespace命名空间
- 数据块存储
- HDFS基本命令操作
HDFS介绍
- HDFS意为Hadoop分布式文件系统,是Apache Hadoop生态圈中的核心组件之一,也是整个生态圈中最底层的分布式存储服务,也是大数据首先要解决的海量存储问题的关键。
- HDFS作为分布式存储,是横跨在多太计算机上的存储系统,能够在普通硬件上运行,具有高度的容错性。非常适用于存储大型数据TB级甚至PB级。
- HDFS和普通分布式文件系统一样,使用多台计算机存储文件,并且提供统一的访问接口,如下图所示:
HDFS设计目标
- 硬件故障问题:HDFS可能有成百上千的服务器组成,每一个组件都有可能出现故障。因此故障检测和自动快速恢复是HDFS的核心架构目标。
- 批处理:HDFS上的应用主要是流式读取数据,HDFS设计却是批处理,主要原因是相比于数据访问的时间,更注重于数据访问的吞吐量。
- 高聚合数据带宽:HDFS作为支持大文件的分布式文件系统,需要提供很高的聚合数据带宽。
- write-one-read-many访问模型:为了支持高吞吐量的数据访问,HDFS对文件要求使用write-one-read-many访问模型,一但写入之后,无需再修改。
- 代价性比较:移动计算的代价比之移动数据的代价低。一个应用请求的计算,离它操作的数据越近就越高效。将计算移动到数据附近,比之将数据移动到应用所在显然更好。
- 可移植:HDFS可以从一个平台轻松移动到另一个平台。
HDFS适用场景
- 适用场景有:大文件、数据流式访问、一次写入多次读取、低成本部署、高容错。
- 不适用的场景:小文件、数据交互式访问、修改频繁的文件、低延时处理。
HDFS重要特性
主从架构
- HDFS群集是标准的主从架构群集,一般来说是由1个Namenode和多个Datanode组成,Namenode是HDFS主节点、Datanode是从节点。官方架构图如下所示:
分块存储
- HDFS中的文件在物理上是分块存储(block)的,默认大小是128M,不足128M则本身就是一块。块的大小可以通过修改hdfs-default.xml文件中dfs.blocksize参数来指定。
副本机制
文件所有的block都会有副本,默认值为3,也就是说会额外会复制2份,副本可以通过修改dfs.replication参数来设置。
元数据MetaData管理
- HDFS中是由Namenode管理元数据,元数据主要有两种类型。
- 文件自身的属性信息:文件名称、权限,修改时间,文件大小,复制因子,数据块大小。
- 文件块映射信息:记录文件块和DataNode之间的映射信息,即哪个块位于哪个节点上。
Namespace命名空间
- HDFS支持传统的层次型文件组织结构。用户可以创建目录,然后将文件保存在这些目录里。文件系统名字空间的层次结构和大多数现有的文件系统类似:用户可以创建、删除、移动或重命名文件。
- Namenode负责维护文件系统的Namespace名称空间,任何对文件系统名称空间或属性的修改都将被Namenode
记录下来。 - HDFS会给客户端提供一个统一的抽象目录树,客户端通过路径来访问文件。
数据块存储
- 文件的各个block的具体存储管理由DataNode节点承担。
- 每一个block都可以在多个DataNode上存储。
HDFS基本命令操作
- 创建文件夹命令
#path为目录
#-p选项的行为与mkdir -p非常相似,它会沿着路径创建父目录
hadoop fs -mkdir [-p] <path> ...
#示例
hadoop fs -mkdir /cauchy
- 查看指定目录下内容
#path为目录
# -h 人性化显示文件size
# -R 递归查看指定目录及其子目录
hadoop fs -ls [-h] [-R] [<path> ...]
- 上传文件到HDFS目录下
# -f 覆盖目标文件(已存在下)
# -p 保留访问和修改时间,所有权和权限。
# localsrc 本地文件系统(客户端所在机器)
# dst 目标文件系统(HDFS)
hadoop fs -put [-f] [-p] <localsrc> ... <dst>
#示例
hadoop fs -put file:///root/hello.txt hdfs://node1:8020/cauchy
- 下载HDFS文件
#解释与上传相同
hadoop fs -get [-f] [-p] <src> ... <localdst>
#示例
hadoop fs -get hdfs://node1:8020/cauchy/hello.txt ./
- 拷贝HDFS文件
# -f覆盖目标文件
hadoop fs -cp [-f] <src> ... <dst>
#示例(默认是hdfs所以可以不需要加hdfs://....)
hadoop fs -cp -f /test/nihao.txt /cauchy/
- HDFS数据移动操作
#类似于mv操作
hadoop fs -mv <src> ... <dst>
#示例
hadoop fs -mv /test/nihao.txt ni_hao.txt
- HDFS其他指令
- HDFS其他指令请参考官网链接