一页纸精华 | HDFS
ccwgpt 2025-05-22 09:39 3 浏览 0 评论
要入门大数据,最好的办法就是理清hadoop的生态系统。本期为你介绍分布式文件系统HDFS。
Apache Hadoop2.0生态系统如下图所示:
Hadoop2.0生态系统图
Hadoop核心项目包括:
HDFS:Hadoop分布式文件系统(Hadoop Distributed File System ):分布式文件系统,提供了高吞吐量的访问应用程序数据。
Hadoop YARN:Hadoop集群资源管理框架(Yet Another Resource Negotiator),用于作业调度和集群资源管理。
Hadoop MapReduce:基于YARN的大数据集的并行处理系统。
Hadoop Common:支持其他Hadoop模块的通用功能,包括序列化、Java RPC和持久化数据结构等。
Hadoop其他子项目包括:
Ambari:是一个部署、管理和监视Apache Hadoop集群的开源框架,它提供一个直观的操作工具和一个健壮的Hadoop API,可以隐藏复杂的Hadoop操作,使集群操作大大简化。
HBase:可扩展的分布式列式数据库,支持大表的结构化存储。
Hive:分布式数据仓库系统,提供基于类SQL的查询语言。
Mahout:可扩展的机器学习和数据挖掘领域经典算法的实现。
Pig:一个高级数据流语言和执行环境,用来检索海量数据集。
Spark:一个快速和通用的计算引擎。Spark提供了一个简单而富有表现力的编程模型,支持多种应用,包括ETL,机器学习,数据流处理,和图形计算。
Sqoop:关系型数据库与和Hadoop系统之间进行数据传输工具。
Tez:是从MapReduce计算框架演化而来的通用DAG计算框架,可作为MapReduceR/Pig/Hive等系统的底层数据处理引擎,它天生融入Hadoop 2.0中的资源管理平台YARN。
ZooKeeper:提供Hadoop集群高性能的分布式的协调服务。
HDFS简介
Hadoop分布式文件系统(Hadoop Distributed File System)HDFS被设计成适合运行在通用硬件上高度容错性的分布式文件系统, HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。HDFS放宽了一部分POSIX约束,来实现流式读取文件系统数据的目的。HDFS在最开始是作为Apache Nutch搜索引擎项目的基础架构而开发的,HDFS是Apache Hadoop Core项目的一部分。
HDFS设计目标概括为:
流式的访问数据:HDFS建立在这样一个思想上:一次写入、多次读取模式是最高效的。这意味着一个数据集一旦由数据源生成,就会被复制分发到不同的存储节点中,然后响应各种各样的数据分析任务请求。在多数情况下,分析任务都会涉及数据集中的大部分数据,也就是说,对HDFS来说,请求读取整个数据集要比读取一条记录更加高效。
处理超大文件:这里的超大文件通常是指百MB、设置数百TB大小的文件。目前在实际应用中,HDFS已经能用来存储管理PB级的数据了。所以,HDFS被调整成支持大文件。它应该提供很高的聚合数据带宽,一个集群中支持成百上千个节点,支持上亿级别的文件。
简单一致性模型:大部分的HDFS程序对文件操作需要的是一次写多次读取的操作模式。一个文件一旦创建、写入、关闭之后就不需要修改了。这个假定简单化了数据一致的问题和并使高吞吐量的数据访问变得可能。
移动计算比移动数据更经济:在靠近计算数据所存储的位置来进行计算是最理想的状态,尤其是在数据集特别巨大的时候。这样消除了网络的拥堵,提高了系统的整体吞吐量。一个假定就是迁移计算到离数据更近的位置比将数据移动到程序运行更近的位置要更好。HDFS提供了接口,来让程序将自己移动到离数据存储更近的位置。
异构软硬件平台间的可移植性:HDFS被设计成可以简便地实现平台间的迁移,这将推动需要大数据集的应用更广泛地采用HDFS作为平台。
运行于廉价的商用机器集群上:Hadoop设计对硬件需求比较低,只须运行在低廉的商用硬件集群上,而无需昂贵的高可用性机器上。廉价的商用机也就意味着大型集群中出现节点故障情况的概率非常高。这就要求设计HDFS时要充分考虑数据的可靠性,安全性及高可用性。
HDFS体系架构
HDFS是一个主/从(Mater/Slave)体系结构,从最终用户的角度来看,它就像传统的文件系统一样,可以通过目录路径对文件执行CRUD(Create、Read、Update和Delete)操作。但由于分布式存储的性质,HDFS集群拥有一个NameNode和一些DataNode。NameNode管理文件系统的元数据,DataNode存储实际的数据。客户端通过同NameNode和DataNodes的交互访问文件系统。客户端联系NameNode以获取文件的元数据,而真正的文件I/O操作是直接和DataNode进行交互的。HDFS架构如下图所示:
HDFS架构图
HDFS体系结构中有两类节点,一类是NameNode,又叫”元数据节点”;另一类是DataNode,又叫”数据节点”。这两类节点分别承担Master和Worker具体任务的执行节点。
NameNode是一个中心服务器,负责管理文件系统的命名空间(namespace)以及客户端对文件的访问。NameNode其将所有的文件和文件夹的元数据保存在一个文件系统树中。这些信息也会在硬盘上保存成以下文件:命名空间镜像(namespace image)及修改日志(edit log)其还保存了一个文件包括哪些数据块,分布在哪些数据节点上。然而这些信息并不存储在硬盘上,而是在启动的时候由数据节点上报到NameNode。
NameNode可以看作是分布式文件系统中的管理者,主要负责管理文件系统的命名空间、集群配置信息和存储块的复制等。NameNode会将文件系统的元数据存储在内存中,这些信息主要包括了文件信息、每一个文件对应的文件块的信息和每一个文件块在DataNode的信息等。
DataNode是文件系统中真正存储数据的地方,Datanode负责处理文件系统客户端的读写请求。在Namenode的统一调度下进行数据块的创建、删除和复制。客户端(client)或者元数据信息(NameNode)可以向数据节点请求写入或者读出数据块。DataNode周期性的向NameNode节点汇报其存储的数据块信息。DataNode是文件存储的基本单元,它将Block存储在本地文件系统中,保存了Block的元数据,同时周期性地将所有存在的Block信息发送给NameNode。
Client是HDFS文件系统的客户端,应用程序通过该模块与Namenode、Datanode交互,进行实际的文件读写。
HDFS数据块复制机制
HDFS设计成能可靠地在集群中大量机器之间存储大量的文件,它以块序列的形式存储文件。文件中除了最后一个块,其他块都有相同的大小。默认128M一个数据块,如果一个文件小于一个数据块的大小,并不占用整个数据块存储空间。为了容错,文件的所有数据块都会有副本,每个文件的数据块大小和副本系数都是可配置的。块的大小和复制数是以文件为单位进行配置的,应用可以在文件创建时或者之后修改复制因子。HDFS中的文件是一次写的,并且任何时候都只有一个写操作。
Namenode负责处理所有的块复制相关的决策。它周期性地接受集群中数据节点的心跳和块报告。一个心跳的到达表示这个数据节点是正常的。一个块报告包括该数据节点上所有块的列表。
HDFS数据块复制机制如下图所示:
HDFS数据块复制图
副本位置:块副本存放位置的选择严重影响HDFS的可靠性和性能。副本存放位置的优化是HDFS区分于其他分布式文件系统的特征,这需要精心的调节和大量的经验。机架敏感的副本存放策略是为了提高数据的可靠性,可用性和网络带宽的利用率。目前副本存放策略的实现是这个方向上比较原始的方式。短期的实现目标是要把这个策略放在生产环境下验证,了解更多它的行为,为以后测试研究更精致的策略打好基础。
HDFS运行在跨越大量机架的集群之上。两个不同机架上的节点是通过交换机实现通信的,在大多数情况下,相同机架上机器间的网络带宽优于在不同机架上的机器。
在开始的时候,每一个数据节点自检它所属的机架id,然后在向名字节点注册的时候告知它的机架id。HDFS提供接口以便很容易地挂载检测机架标示的模块。一个简单但不是最优的方式就是将副本放置在不同的机架上,这就防止了机架故障时数据的丢失,并且在读数据的时候可以充分利用不同机架的带宽。这个方式均匀地将复制分散在集群中,这就简单地实现了组建故障时的负载均衡。然而这种方式增加了写的成本,因为写的时候需要跨越多个机架传输文件块。
默认的HDFS block放置策略在最小化写开销和最大化数据可靠性、可用性以及总体读取带宽之间进行了一些折中。一般情况下复制因子为3,HDFS的副本放置策略是将第一个副本放在本地节点,将第二个副本放到本地机架上的另外一个节点而将第三个副本放到不同机架上的节点。这种方式减少了机架间的写流量,从而提高了写的性能。机架故障的几率远小于节点故障。这种方式并不影响数据可靠性和可用性的限制,并且它确实减少了读操作的网络聚合带宽,因为文件块仅存在两个不同的机架,而不是三个。文件的副本不是均匀地分布在机架当中,1/3在同一个节点上,1/3副本在同一个机架上,另外1/3均匀地分布在其他机架上。这种方式提高了写的性能,并且不影响数据的可靠性和读性能。
副本的选择:为了尽量减小全局的带宽消耗读延迟,HDFS尝试返回给一个读操作离它最近的副本。假如在读节点的同一个机架上就有这个副本,就直接读这个,如果HDFS集群是跨越多个数据中心,那么本地数据中心的副本优先于远程的副本。
作者: 牛家浩
大讲台,学习原本就是混合式自适应的;大讲台助力您更好更快学会开发!
欢迎加入Hadoop学习交流群:415659663,群内有一些Hadoop学习资料有民间高手指导,希望对新人有帮助。
相关推荐
- 如何为Hadoop选择最佳弹性MapReduce框架
-
ZDNet至顶网服务器频道07月22日新闻消息:亚马逊Web服务的弹性MapReduce是一项基于Hadoop的实施,它可允许你运行大型的预处理工作,如格式转换和数据聚合等。虽然我们可以选择很多的...
- 《平安小猪》:J.K.罗琳用“魔法”放大的真实
-
对很多孩子来说,某些玩具是抚慰心灵的“忠实伙伴”,几乎无可替代。J.K.罗琳在看到儿子大卫对玩偶小猪的依恋后创作了“平安小猪”的故事,这也是她自《哈利·波特》之后创作的首部儿童长篇小说。男孩杰克在平安...
- 一页纸精华 | HDFS
-
要入门大数据,最好的办法就是理清hadoop的生态系统。本期为你介绍分布式文件系统HDFS。ApacheHadoop2.0生态系统如下图所示:Hadoop2.0生态系统图Hadoop核心项目包括:H...
- 谷歌搁置与法国出版商的协议,将等候反垄断裁定
-
据路透社6月29日消息,两位知情消息人士称,谷歌搁置了与一些法国出版商达成的为新闻内容付费的初步协议,将等待反垄断审议结果。该决定可能为欧洲在线新闻的版权谈判定下基调。文件显示,按照谷歌与法国新闻总联...
- Java 微服务从源码实战开始 | Gitee 项目推荐
-
在软件开发的不同时期、阶段,对技术架构的理解、选择和应用都有着不一样的诉求。微服务架构是当前互联网业界的一个技术热点,它的思想也更符合我们的目标:根据业务模块划分服务种类。每个服务可以独立部署并且互相...
- 快讯|谷歌搁置向法国出版商付费协议:等待反垄断决定
-
财经网科技6月30日讯,据新浪科技消息,两位知情人士透露,谷歌已经搁置此前与一些法国出版商达成的为新闻内容付费的初步协议。因为谷歌正在等待一项反垄断决定,这项决定可能会为该公司的欧洲在线新闻版权谈判定...
- 外媒:谷歌搁置与法国出版商的协议 等候反垄断决定
-
路透中文网30日报道,据两位知情消息人士透露,谷歌GOOGL.O搁置了与一些法国出版商达成的为新闻内容付费的初步协议,等待一项反垄断决定。该决定可能为欧洲在线新闻的版权谈判定下基调。报道显示,根据路透...
- 大数据任务调度框架Oozie
-
Oozie(驯象人)是一个基于工作流引擎的开源框架,由Cloudera公司贡献给Apache,提供对HadoopMapReduce、PigJobs的任务调度与协调。Oozie需要部署到JavaS...
- 惊了!SpringBoot 3.4 触雷,升级后参数绑定竟悄悄破坏你的代码?
-
背景在微服务架构中,我们经常利用HTTP请求头来控制系统行为,比如实现灰度发布和流量控制。在PIG微服务框架中,我们通过重写SpringCloudLoadBalancer,根据请求he...
- 《终结者》:科幻电影巅峰的里程碑
-
在阅读此文之前,麻烦您点击一下“关注”,既方便您进行讨论和分享,又能给您带来不一样的参与感,感谢您的支持。文|庭芥摘要:本文以一位影评家的视角赏析詹姆斯·卡梅隆执导的经典科幻电影《终结者》。通过对该...
- AI已经越过红线?复旦大学:在知道自己将被关闭后,AI复制了自己
-
2024年12月9日,复旦大学的一项研究引发了全球科技界的强烈关注。研究团队对Meta与阿里巴巴旗下的两个大型AI系统展开测试,结果发现,在知晓自身可能被关闭的情况下,它们居然选择自我复制。这不是普通...
- 重磅开源!LocalAI让你在个人电脑上运行AI大模型,无需显卡,已获28K Star!
-
随着AI技术的快速发展,如何在本地设备上高效运行AI模型成为了开发者关注的焦点。LocalAI开源项目提供了一个革命性的解决方案-它让用户能够在个人电脑上轻松部署和运行各种AI模型,并且完全兼容...
- 了解《终结者》的恐怖末日世界观,能让你看懂《终结者6》
-
相信很多人的科幻动作启蒙片,应该就是《终结者》系列,起码对于我来说,童年的暑假里,不止一次反复看着《终结者2》的电影,深深被影片中施瓦辛格的硬核铁汉形象吸引,也为片中的液态机器人着迷。《终结者》系列成...
- Golang底层是用什么语言编写的?
-
Go底层语言Go语言在1.5版本之前主要由汇编和C语言写的,C语言占比85%以上,另外有少量的周边模块如文档等,带了些htmlshellperl代码,可以忽略不计。1.5版本及之后...
- skynet服务的缺陷 lua死循环
-
服务端高级架构—云风的skynet这边有一个关于云风skynet的视频推荐给大家观看点击就可以观看了!skynet是一套多人在线游戏的轻量级服务端框架,使用C+Lua开发。skynet的显著优点是,...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- MVC框架 (46)
- spring框架 (46)
- 框架图 (58)
- bootstrap框架 (43)
- flask框架 (53)
- quartz框架 (51)
- abp框架 (47)
- jpa框架 (47)
- laravel框架 (46)
- springmvc框架 (49)
- 分布式事务框架 (65)
- scrapy框架 (56)
- shiro框架 (61)
- 定时任务框架 (56)
- java日志框架 (61)
- grpc框架 (55)
- ppt框架 (48)
- 内联框架 (52)
- winform框架 (46)
- gui框架 (44)
- cad怎么画框架 (58)
- ps怎么画框架 (47)
- ssm框架实现登录注册 (49)
- oracle字符串长度 (48)
- oracle提交事务 (47)