它是分布式的,有分多服务器联合起来实现其功能。
适合一次写入,多次读出的场景,且不支持文件的修改。
是和数据分析,并不适合用来做网盘应用。
NameNode(nn):1.存储文件的元数据{1.文件信息(文件名,文件目录结构,文件属性(生成时间,副本数,文件权限)),2.每个文件的块列表和块所在的DataNode(Block映射信息)},2.处理客户端读写请求。
DataNode(dn):在本地文件系统存储文件块数据,以及块数据的校验。
Secondary NameNode(2nn):是一个辅助后台的程序,用来监控HDFS状态,每隔一段时间获取HDFS元数据的快照。
上面计算的每秒传输大小为100MB只是一个近似值,实际为128M。
机械硬盘文件顺序读写的速度为100MB/s
普通固态为500MB/s
pcie固态的速度可以达到2000MB/s
因此块的大小可以分别设为128MB,512MB,2048MB.
CPU,磁盘,网卡之间的协同效率 即 跨物理机/机架之间文件传输速率
1. 如果块设置过大,
2. 如果块设置过小,
文件块越大,寻址时间越短,但磁盘传输时间越长;
文件块越小,寻址时间越长,但磁盘传输时间越短。
大数据平台包含了采集层、存储层、计算层和应用层,是一个复杂的IT系统,需要学会Hadoop等分布式系统的开发技能。1.1采集层:Sqoop可用来采集导入传统关系型数据库的数据、Flume对于日志型数据采集,另外使用Python一类的语言开发网络爬虫获取网络数据;
1.2储存层:分布式文件系统HDFS最为常用;采用了主从(Master/Slave)结构模型,一个HDFS集群是由一个NameNode和若干个DataNode组成的。其中NameNode作为主服务器,管理文件系统的命名空间和客户端对文件的访问操作;集群中的DataNode管理存储的数据。
1.3计算层:有不同的计算框架可以选择,常见的如MapReduce、Spark等,一般来讲,如果能使用计算框架的“原生语言”,运算效率会最高(MapReduce的原生支持Java,而Spark原生支持Scala);
1.4应用层:包括结果数据的可视化、交互界面开发以及应用管理工具的开发等,更多的用到Java、Python等通用IT开发前端、后端的能力;
NameNode是Apache Hadoop HDFS体系结构中的主节点,用于维护和管理DataNode(从节点)上存在的块。NameNode是一个非常高可用性的服务器,用于管理文件系统命名空间并控制客户端对文件的访问。HDFS体系结构的构建方式使用户数据永远不会驻留在NameNode上。数据仅驻留在DataNodes上。
Functions of NameNode:
第二名称节点(Secondary NameNode,SNN)是用于定期合并命名空间镜像和镜像编辑日志的辅助守护进程。和名称节点一样,每个集群都有一个第二名称节点,在大规模部署的集群条件下,一般第二名称节点也独自占用一台服务器。
除了这两个守护进程之外,还有第三个守护进程或称为辅助NameNode的进程。辅助NameNode作为辅助守护进程与主NameNode并发工作。不要混淆次要的NameNode是备份的NameNode,因为它不是。
Functions of Secondary NameNode:
新的FsImage被复制回NameNode,下一次启动NameNode时将使用该FsImage)
Hence, Secondary NameNode performs regular checkpoints in HDFS. Therefore, it is also called CheckpointNode(因此,辅助NameNode在HDFS中执行常规检查点。因此,它也称为CheckpointNode。)
Functions of DataNode:
到现在为止,你一定已经意识到NameNode对我们来说非常重要。如果失败了,我们就完了。但是不要担心,我们将在下一篇Apache Hadoop HDFS架构博客中讨论Hadoop如何解决这个单点故障问题。
block不过是硬盘上存储数据的最小连续位置。通常,在任何文件系统中,您都将数据存储为块的集合。类似地,HDFS将每个文件存储为块,这些块分散在整个Apache Hadoop集群中。在Apache Hadoop 2.x中,每个块的默认大小是128 MB(在Apache Hadoop 1.x中是64 MB),您可以根据需要进行配置。
在HDFS中,不必将每个文件都以配置的块大小的精确倍数存储(128 MB,256 MB等)。让我们举一个例子,我有一个大小为514 MB的文件“ example.txt”,如上图所示。假设我们使用的默认块大小配置为128 MB。那么,将创建多少个块?5个:前四个块的大小为128 MB。但是,最后一个块的大小仅为2 MB。
现在,你一定在想为什么我们需要这么大的块大小,即128兆字节?
每当我们谈到HDFS,我们就谈到巨大的数据集,即兆兆字节和千兆字节的数据。因此,如果我们有一个比如4 KB的块大小,就像在Linux文件系统中一样,我们会有太多的块,因此会有太多的元数据。因此,管理这些数量的块和元数据会产生巨大的开销,这是我们不想要的
HDFS提供了一种以数据块的形式在分布式环境中存储大量数据的可靠方法。还复制这些块以提供容错能力。默认的复制因子是3,这也是可配置的。因此,如下图所示,每个块复制三次并存储在不同的datanode上(考虑默认的复制因子)
NameNode定期从DataNode收集阻止报告以维护复制因子。因此,每当块被过度复制或复制不足时,NameNode都会根据需要删除或添加副本。
同样,NameNode还确保所有副本都不存储在同一机架或单个机架中。它遵循内置的机架感知算法,以减少延迟并提供容错能力。考虑到复制因子为3,机架感知算法表示,一个块的第一个副本将存储在本地机架上,接下来的两个副本将存储在不同的(远程)机架上。下面就是实际的Hadoop生产集群的外观。在这里,可以装多个有DataNodes的机架。
Advantages of Rack Awareness:
So, now you will be thinking why do we need a Rack Awareness algorithm? The reasons are:
https://www.edureka.co/blog/apache-hadoop-hdfs-architecture/
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)