Hadoop学习笔记一:HDFS

一、HDFS是什么?

  • HDFS是Hadoop Distributed File System的简称;源自于Google的GFS论文,是其开源实现。
  • 基于流数据模式访问和处理超大文件的需求而开发的;
  • 适合应用于大规模数据集上;

二、HDFS优缺点

  • 优点:
  1. 处理超大文件,能用来存储管理Pb级数据。
  2. 流式数据访问数据。
  3. 运行于廉价的集群上
  • 缺点
  1. 不适合处理低延迟数据访问
  2. 无法高效存储大量的小文件
  3. 不支持多用户写入和任意文件修改

三、HDFS架构

Hadoop学习笔记一:HDFS

主从结构

  • NameNode(主节点,一般只有一个;HA下会有多个),包含命名空间镜像文件(namespace image,存储文件系统的命名空间,包括文件映射、文件属性等)和操作日志文件(edit log,记录hdfs元数据的变化),其主要作用:
  1. 接收用户操作请求;
  2. 维护文件系统的目录结构;
  3. 管理文件与block之间关系,block与DataNode之间关系;
  • SecondaryNameNode(NameNode 辅助节点,为解决NameNode单点故障),周期性的合并NameNode的EditLog。
  1. 工作原理如下图:Hadoop学习笔记一:HDFS
  2. 参数设置:core-site.xml中fs.checkpoint.period:合并的时间间隔,默认1小时合并一次;fs.checkpoint.size:文件大小,默认64Mb,当editLog文件大小超过64M,就会触发EditsLog与FsImage文件的合并。
  • DataNode(从节点,会有很多个),其主要作用
  1. 存储文件;
  2. 文件被分成固定大小的block(2.x默认是128M)存储在磁盘上;
  3. 为保证数据安全,文件会有多个副本(2.x版本默认为3副本)。
  4. 通过向NameNode发送心跳保持联系(3秒一次)。

四、HDFS核心设计

  • NameNode的create、addBlock、complete动作
  • 数据复制及数据副本存放策略
  • 并发写入时租约设计
  • 安全模式
  • 负载均衡
  • 心跳机制
  • 机架感知

五、HDFS读写流程

  • 写流程
    Hadoop学习笔记一:HDFS
  • 读流程
    Hadoop学习笔记一:HDFS

六、HDFS常用命令

  • hadoop fs -ls <path> :查看该目录下所有文件
  • hadoop fs -lsr <path>:递归查看该目录及子目录下所有文件
  • hadoop fs -mkdir <path>:创建目录
  • hadoop fs -put <src><des> :从本地上传文件到hdfs上
  • hadoop fs -copyFromLocal <src><des> :同上,从本地上传文件到hdfs上
  • hadoop fs -get <src> <des> :从hdfs上下载文件到本地
  • hadoop fs -copyToLocal <src> <des>:同上,从hdfs上下载文件到本地
  • hadoop fs -cat <src>:查看文件内容
  • hadoop fs -text <src>:同上,查看文件内容
  • hadoop fs -rm(r) :删除文件(夹)
  • hadoop fs -chmod :改变文件访问权限

七、HDFS JAVA API