1.简介
HDFS具有分布式文件系统的特性,同时具有高容错、** 运行在廉价机器、高吞吐量、适应大数据集** 等特点,是apache的开源核心项目,地址:hadoop.apache.org
2.HDFS设计目标&&优点
- 快速检测机器故障,快速自动修复。「这是因为,Hadoop集群有数以千计的廉价机器节点,机器故障很常见」
- 流式数据访问。「HDFS要处理的数据规模大,应用程序一次需要访问大量数据,适用于批量处理而非用户交互式处理数据。HDFS更注重数据获取的高吞吐量而非低延时(low latency)」「流式读取最小化了硬盘的寻址开销,只需要寻址一次,然后就一直读啊读。毕竟每一个文件块都被划分为128M大小了,所以流式读取更加适合硬盘的本身特性。当然大文件的特点也更适合流式读取。与流数据访问对应的是随机数据访问,它要求定位、查询或修改数据的延迟较小,传统关系型数据库很符合这一点」
- 大数据集。 「支持超大文件的存储」
- 文件一次性写入,多次读取模式。文件在写入完成之后,只能在文件末尾添加或截断,而不能在文件任意位置添加或删除。这一点保证了数据访问的高吞吐量。
- Moving Computing is Cheaper than Moving Data: 在数据存储位置的节点处(附近)进行计算是更为高效的,可以降低网络拥堵,提高系统整体的吞吐量。因此,将计算移动到数据存储节点(附近)更为高效。
3.HDFS的局限性
- 不适合低延迟的数据访问,HDFS是为处理大规模的数据而生的,主要是为达到高的数据吞吐量而设计的,HDFS为了高吞吐量,可以牺牲低延迟,因此我们不能奢望能够快速的读出HDFS里的数据。
- 不能高效的存储大量小文件,在HDFS中,有NameNode(Master)节点来管理文件系统的元数据,因此文件数量的限制就由NameNode(具体的来说是由其内存大小)来决定;另外,在一次数据访问中,更多的小文件也意味着更多的磁盘寻址操作,以及更多的文件的打开与关闭的开销,这会大大降低数据的吞吐量。
- 不支持多用户的数据写入和随机访问与修改文件,在一个HDFS写操作中只能有一个用户对一个文件写操作,并且自能通过追加的方式将数据写到文件末尾。目前HDFS还不支持多个用户对同一个文件的并发写操作、随机访问和修改数据。
4.HDFS架构
HDFS采用master/slave架构。一个HDFS集群有一个NameNode节点,该服务器负责管理文件系统的命名空间(namespace)和负责客户端client对文件的访问;还有许多的DataNodes节点,负责管理存储。一个文件file被分割成几个块block,这些blocks被存储到一组DataNodes中。
NameNode作用:
a、执行文件系统命名空间上的相关操作,如打开,关闭,重命名,重定址。
b、NameNode决定了块和DataNodes之间的映射关系。
c、存储了HDFS的metadata,包括Name,副本系数replication factor等等。DataNodes作用:
a、负责执行client发出的读写请求。
b、根据NameNode的指令,执行块的创建,删除,复制。NameNode 和 DataNode本质上是运行在商用机器上的一种软件。HDFS由Java语言开发,任何支持Java的机器都能支持运行NameNode和DataNodes软件。
File System Namespace
HDFS支持传统的文件系统的分级组织形式。但是HDFS不支持软连接和硬连接。数据副本
每个文件以一连串的blocks组成,同时各个block有其副本,存放在不同的机器上,提高容错率。文件可以设置block大小和副本系数。
文件的块中,除了最后一个块以外,其余所有的block是同样大小的,
来源:https://www.cnblogs.com/isguoqiang/p/11455195.html