BigData<3>_HDFS原理

倖福魔咒の 提交于 2020-03-07 07:21:24

1.简介

HDFS具有分布式文件系统的特性,同时具有高容错、** 运行在廉价机器高吞吐量适应大数据集** 等特点,是apache的开源核心项目,地址:hadoop.apache.org

2.HDFS设计目标&&优点

  1. 快速检测机器故障,快速自动修复。「这是因为,Hadoop集群有数以千计的廉价机器节点,机器故障很常见」
  2. 流式数据访问。「HDFS要处理的数据规模大,应用程序一次需要访问大量数据,适用于批量处理而非用户交互式处理数据。HDFS更注重数据获取的高吞吐量而非低延时(low latency)」「流式读取最小化了硬盘的寻址开销,只需要寻址一次,然后就一直读啊读。毕竟每一个文件块都被划分为128M大小了,所以流式读取更加适合硬盘的本身特性。当然大文件的特点也更适合流式读取。与流数据访问对应的是随机数据访问,它要求定位、查询或修改数据的延迟较小,传统关系型数据库很符合这一点」
  3. 大数据集。 「支持超大文件的存储」
  4. 文件一次性写入,多次读取模式。文件在写入完成之后,只能在文件末尾添加或截断,而不能在文件任意位置添加或删除。这一点保证了数据访问的高吞吐量。
  5. Moving Computing is Cheaper than Moving Data: 在数据存储位置的节点处(附近)进行计算是更为高效的,可以降低网络拥堵,提高系统整体的吞吐量。因此,将计算移动到数据存储节点(附近)更为高效。

3.HDFS的局限性

  1. 不适合低延迟的数据访问,HDFS是为处理大规模的数据而生的,主要是为达到高的数据吞吐量而设计的,HDFS为了高吞吐量,可以牺牲低延迟,因此我们不能奢望能够快速的读出HDFS里的数据。
  2. 不能高效的存储大量小文件,在HDFS中,有NameNode(Master)节点来管理文件系统的元数据,因此文件数量的限制就由NameNode(具体的来说是由其内存大小)来决定;另外,在一次数据访问中,更多的小文件也意味着更多的磁盘寻址操作,以及更多的文件的打开与关闭的开销,这会大大降低数据的吞吐量。
  3. 不支持多用户的数据写入和随机访问与修改文件,在一个HDFS写操作中只能有一个用户对一个文件写操作,并且自能通过追加的方式将数据写到文件末尾。目前HDFS还不支持多个用户对同一个文件的并发写操作、随机访问和修改数据。

4.HDFS架构

HDFS采用master/slave架构。一个HDFS集群有一个NameNode节点,该服务器负责管理文件系统的命名空间(namespace)和负责客户端client对文件的访问;还有许多的DataNodes节点,负责管理存储。一个文件file被分割成几个块block,这些blocks被存储到一组DataNodes中。

  1. NameNode作用:
    a、执行文件系统命名空间上的相关操作,如打开,关闭,重命名,重定址。
    b、NameNode决定了块和DataNodes之间的映射关系。
    c、存储了HDFS的metadata,包括Name,副本系数replication factor等等。

  2. DataNodes作用:
    a、负责执行client发出的读写请求。
    b、根据NameNode的指令,执行块的创建,删除,复制。

  3. NameNode 和 DataNode本质上是运行在商用机器上的一种软件。HDFS由Java语言开发,任何支持Java的机器都能支持运行NameNode和DataNodes软件。

  4. File System Namespace
    HDFS支持传统的文件系统的分级组织形式。但是HDFS不支持软连接和硬连接。

  5. 数据副本
    每个文件以一连串的blocks组成,同时各个block有其副本,存放在不同的机器上,提高容错率。文件可以设置block大小和副本系数。

文件的块中,除了最后一个块以外,其余所有的block是同样大小的,

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!