目录

  • 一、什么是HDFS ?
  • 二、HDFS组件以及作用
  • 三、HDFS优缺点
  • 优点
  • 缺点
  • 四、HDFS的读写流程
  • 写操作
  • 读操作
  • 五、HDFS的shell命令


一、什么是HDFS ?

HDFS (Hadoop Distributed File System)是 Hadoop 下的分布式文件系统。HDFS是一个高度容错性的系统。具有高容错高吞吐量等特性。并且能部署在廉价的机器上。

二、HDFS组件以及作用

组件

作用

Client

1、文件上传HDFS的时候对文件进行切分,文件下载HDFS时对文件进行合并 。 2、与NN通信,上传时获取文件的数据节点, 下载时获取文件的下载节点 。3、与DN通信,进行数据的上传和下载 。4、管理整个HDFS

NameNode (元数据节点)

1、管理HDFS的命名空间。2、负责管理block的映射信息和副本信息。 3、处理客户端的读写请求

DataNode(数据节点)

1、存储实际的数据块。2、执行数据块的I/O操作

SecondaryNode

1、辅助NameNode,分担其工作量 。2、将NN的edit logs合并到fsimage文件中,将其拷贝到NN中。 3、在紧急情况下,可以辅助恢复NN(并不能马上替换)

三、HDFS优缺点

优点

1、高容错性
2、适合大数据处理 :能处理GB、甚至TB级别的数据
3、适合流式存储 : 一次写入、多次读取、文件写入后不能修改,只能追加,保持数据的一致性。
4、部署在廉价的机器上

缺点

1、不适合低延时数据访问 :数据量大,处理慢
2、不适合小文件存储 : 一个文件占128M
3、不支持高并发 : 一个文件不支持多线程同时写
4、不支持文件随机修改 : 只能追加

四、HDFS的读写流程

写操作

hdfs参数调优 hdfs性能_hdfs

具体流程:

1、client向NN发出请求
2、NN进行资源检测(检查路径和权限),如果目标路径存在,且该用户有权限,那么NN会回复Client可以上传
3、client对文件进行切分,并向NN请求第一个block块存储的DN列表。(默认为3)
4、NN返回DN列表dn1,dn2,dn3。
5、client通过FSDOS请求dn1上传数据,dn1收到请求会继续请求dn2,然后dn2请求dn3,建立一个通信管道。然后dn3响应dn2,dn2响应dn1,dn1响应client,至此管道打通。
6、client往dn1上传第一个block块,以packet(64kb)为单位,dn1每传一个packet都会建立一个应答队列等待应答。然后依次传给dn2,dn3。dn3,dn2,dn1逐级应答,并将结果反馈给client。然后再依次传下一个packet,直到第一个block块传输完成。
7、关闭FSDOS
8、client发送complete给NN。
9、重复3~8

读操作

hdfs参数调优 hdfs性能_hdfs_02

具体操作:

1、client创建DFS,调用FileSystem.open()方法
2、DFS向NN请求RPC(远程进程调用)获取文件的开始部分或者block的有序列表(按DN和client的距离升序排序),NN返回block的DN地址.(如果client是DN的话,就本地读取)
3、DFS向client返回支持文件定位的输入流对象FSDIS,用于client读取hdfs上的数据(FSDIS包含DFSIS,负责管理NN和DN之间的I/O)
4、client调用read()方法,DFSIS会找到离client最近的DN,并连接DN。在此DN上请求文件第一个block块的DN地址,然后连接距离此块最近的DN,并调用read()方法读第一个block块
5、当第一个block块读完,DFSIS就关闭当前指向第一个block块的DN连接,接着DFSIS连接下一个block块最近的DN,并读取。
6、当所有block读取完毕之后,关闭DFSIS,FSDIS,DFS。
7、将所有读取后的block合并成一个完整的最终文件

五、HDFS的shell命令