今天总结了一些HDFS的分享一下。。
HDFS是hadoop分布式文件系统是一中文件系统,设计用于在商用硬件上运行,它与现有的分布式文件系统有许多相似之处,但是与这些分布式文件系统有所差别,Hdfs具有高度的容错能力,致力与部署在低成本的硬件上。HDFS提供对应用数据的高吞吐量访问,适用于具有极大规模数据集的应用程序。HDFS为了实现对文件系统数据的流式数据访问,放宽了一些POSIX要求。HDFS最初是作为Apache Nutch网络搜索引擎项目的基础设施而构建的,现在是Apache Hadoop Core项目的一部分

HDFS设计目标及特点:
硬件故障是常态而非例外。hdfs实例可能包含数百甚至上千台服务器,每台服务器都存户文件系统数据的一部分。事实上,存在大量组件并且每个组件都具有一定的故障概率意味着hdfs的某些组件始终起不到作用。因此,检测故障并从中快速自动恢复是hdfs的核心架构目标(指数据)
流失数据访问:
在hdfs上运行的应用程序需要对其数据集进行流式数据访问,因为hdfs致力于存储极大规模数据集,过大的数据量导致一次访问全部数据是不可能的,或者这会导致极大的io开销。hdfs设计用于批处理而不是用户的交互式使用,hdfs所关注的重点是高吞吐量而不是数据访问的低延时,而posix在某些地方有一些不适合hdfs设计的需求,所以在几个关键点放弃posix语义来提高数据吞吐率是有必要的(流式数据访问和批处理不矛盾)
大数据集
在hdfs上运行的应用程序应具有极大的数据集。hdfs上典型文件大小为千兆字节到太字节(1GBand1TB)。因此hdfs被设计支持极大文件的存储,hdfs单个集群中的复数节点提供了高聚合数据宽带,并且hdfs自身具有极高的扩展性,hdfs实例同时也支持存储上千万数据级别的文件。
简单的一致性模型
hdfs应用在某一时刻只支持一个用户进行数据写入,但是可以满足同一时候复数用户读取数据的操作。这样保证了除了进行数据的追加以及截断之外,无需更改创建,写入和关闭的文件,hdfs支持将新数据追加到已存在文件的末尾,但无法在任意位置更新。这样的设计简化了数据一致性的问题,并可以实现高吞吐量的数据访问。mapreduce应用程序或是web爬网程序应用十分使用于该模型。
移动计算比移动数据更加廉价
如果应用程序在其操作的数据符合执行,则计算的效率更高,所消耗的资源更少,当数据集太小极大时尤其如此,数据存储的位置暴漏给计算框架,在进行计算时,将计算迁移到靠近数据的位置,而不是将数据其移动到计算节点上,这样极大提高了计算效率一即降低集群的资源开销。
构建廉价集群
hdfs具有极强的数据可靠性机制,单一数据多副本存储,且某一份副本丢失或损坏,hdfs会补充某一数据集的副本数据量来保证集群中存储的数据副本不低于某一阈值,且这些副本都均匀夫不是在整个集群中。数据的冗余以及保证足够的副本数量保证了hdfs中存储的数据高可靠性(hdfs的高可靠性)基于hdfs数据存储的高可靠性,hdfs可以构建在相对廉价的商用服务器上,想对低的节点稳定性对整个集群的运行以及数据存储不构成威胁。
补充
HDFS无法进行交互式分析。
设计用于批处理而非低延时的交互式分析,关注数据吞吐量而非延时性。
用于存储极大文件而非海量小文件
hdfs本身具有极大的数据存储量,千亿甚至更多的海量小文件会造成增加文件寻址时间,降低文件读取效率。
hdfs中文件的元数据信息存储在管理节点的内存中,海量小文件会导致管理节点内存oom,导致集群瘫痪。
不支持随机写
为保证极大规模数据集的一致性且不影响吞吐量,hdfs不支持在任意位置更新数据,只支持数据追加。
HDFS原理
hdfs架构

hdfs对比es hdfs es_什么是hdfs
hdfs为主从架构(M/S),hdfs集群主要由单个nameNode,一个管理文件系统命名空间(namespace)的主服务器,且负责管理客户端对文件的访问,以及复数。