一、HDFS是什么?
- HDFS是Hadoop Distributed File System的简称;源自于Google的GFS论文,是其开源实现。
- 基于流数据模式访问和处理超大文件的需求而开发的;
- 适合应用于大规模数据集上;
二、HDFS优缺点
- 优点:
- 处理超大文件,能用来存储管理Pb级数据。
- 流式数据访问数据。
- 运行于廉价的集群上
- 缺点
- 不适合处理低延迟数据访问
- 无法高效存储大量的小文件
- 不支持多用户写入和任意文件修改
三、HDFS架构
主从结构
- NameNode(主节点,一般只有一个;HA下会有多个),包含命名空间镜像文件(namespace image,存储文件系统的命名空间,包括文件映射、文件属性等)和操作日志文件(edit log,记录hdfs元数据的变化),其主要作用:
- 接收用户操作请求;
- 维护文件系统的目录结构;
- 管理文件与block之间关系,block与DataNode之间关系;
- SecondaryNameNode(NameNode 辅助节点,为解决NameNode单点故障),周期性的合并NameNode的EditLog。
- 工作原理如下图:
- 参数设置:core-site.xml中fs.checkpoint.period:合并的时间间隔,默认1小时合并一次;fs.checkpoint.size:文件大小,默认64Mb,当editLog文件大小超过64M,就会触发EditsLog与FsImage文件的合并。
- DataNode(从节点,会有很多个),其主要作用
- 存储文件;
- 文件被分成固定大小的block(2.x默认是128M)存储在磁盘上;
- 为保证数据安全,文件会有多个副本(2.x版本默认为3副本)。
- 通过向NameNode发送心跳保持联系(3秒一次)。
四、HDFS核心设计
- NameNode的create、addBlock、complete动作
- 数据复制及数据副本存放策略
- 并发写入时租约设计
- 安全模式
- 负载均衡
- 心跳机制
- 机架感知
五、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