HDFS(Hadoop Distributed File System)是hadoop生态系统的一个重要组成部分,是hadoop中的的存储组件,是最基础的一部分,MapReduce等计算模型都要依赖于存储在HDFS中的数据。HDFS是一个分布式文件系统,以流式数据访问模式存储超大文件,将数据分块存储到一个商业硬件集群内的不同机器上。
数据块
文件以块为单位进行切分存储,块通常设置的比较大(最小6M,默认 128M)块越大,寻址越快,读取效率越高,但同时由于MapReduce任务也是以 块为最小单位来处理,所以太大的块不利于于对数据的并行处理一个文件至少占用一个块(逻辑概念)冗余备份 数据块非常适合用于数据备份,进而可以提供数据容错能力和提高可用性。每个块可以有多个备份(默认为三个),分别保存到相互独立的机器上去,这样就可以保证单点故障不会导致数据丢失。Namenode
namenode 负责维护整个文件系统的信息,包括:整个文件树,文件的块 分布信息,文件系统的元数据,数据复制策略等Datanode
datanode 存储文件内容,负责文件实际的读写操作,保持与namenode的 通信,同步文件块信息Secondary NameNode
Secondary NameNode是合并NameNode的edit logs到fsimage文件中。Secondary NameNode的整个目的是在HDFS中提供一个检查点。它只是NameNode的一个助手节点,来帮助NameNode更好的工作。它不是要取代掉NameNode也不是NameNode的备份。这也是它在社区内被认为是检查点节点的原因。HDFS 支持任意文件格式
常用的格式有如下几种:
1、sequencefile:k-v格式,比源文本格式占用磁盘更多 2、textfile:行式文本文件,生产中用得较多 3、rcfile:行列混合存储 4、orc:列式存储,生产用的较多 5、parquet:列式存储,生产中用得较多 6、avro:几乎不用,略 7、jsonfile:json格式,几乎不用,略 8、inputformat:几乎不用,略 大数据存储数据,99%以上的场景都是使用的是列式存储