HDFS
HDFS是Hadoop应用程序使用的主要分布式存储。HDFS集群主要由管理文件系统元数据的NameNode和存储实际数据的datanode组成。HDFS具有很高的容错性,设计用于部署在低成本硬件上。HDFS提供了对应用程序数据的高吞吐量访问,适用于具有大数据集的应用程序。HDFS允许对文件系统数据进行流访问
HDFS的特点
优点
- 分块存储
- 块的大小通过参数( dfs.blocksize)来设置
- 默认大小为128M
- 容错性高
- 数据能够自动保存多个副本(副本数量通过参数dfs.replication设置,默认是3)
- 若某一个副本丢失,可以自动恢复(HDFS 内部机制实现)
- 适合批处理
- 它是通过移动计算而不是移动数据
- 它能够处理数量大的数据
- 流式访问
- 一次写入,多次读取
- 保证数据的一致性
- 部署在低廉的机器上
- 多副本机制和自动恢复机制
缺点
- 写入和读取速度慢
- 频繁的RPC交互
- 不能够小文件存储
- NameNode的内存是有限的,小文件存储会占用 NameNode大量的内存来存储文件、目录和块信息
- 小文件存储的时间会超过读取时间,违反了HDFS的设计目标
- 不能够并发写入,修改文件
- 一个文件只能有一个写,不允许多个线程同时写
- 仅支持数据追加,不支持文件的随机修改
实现分布式存储
HDFS的运行机制
- 在上传文件时,用户会指定一个路径
- 客户端向NameNode发送上传文件请求,NameNode对上传路径和文件进行判断,最后向客户端返回请求结果
- 客户端收到服务器的响应之后,读取客户端配置,将文件分成一个个Block,依次发送到DataNode中
- NameNode记录上传路径和块信息等信息存储在元数据中
- 服务器进行异步操作,将Block再进行复制,随机存储到一个DataNode中,保证服务器的负载均衡,避免多对一进行访问
参考资料:http://hadoop.apache.org/docs/stable2/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html