hdfs的优缺点(hdfs的优缺点是什么)
本篇文章给大家谈谈hdfs的优缺点,以及hdfs的优缺点是什么对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
大数据之HDFS
在现代的企业环境中,单机容量往往无法存储大量数据,需要跨机器存储禅卖。统一管理分布在集群上的文件系统称为 分布式文件系统 。
HDFS (Hadoop Distributed File System)是 Hadoop 的核心组件之一, 非常适于存储大型数据 (比如 TB 和 PB), HDFS 使用多台计算机存储文件,并且提供统一的访问接口,像是访问一个普通文件系统一样使用分布式文件系统。
HDFS是分布式计算中数据存储管理的基础,是基于流数据模式访问和处理超大文件的需求而开发的,可以运行于廉价的商用服务器上。它所具有的 高容错、高可靠性、高可扩展性、高获得性、高吞吐率 等特征为海量数据提供了不怕故障的存储,为超大数据集的应用处理带来了很多便利。
HDFS 具有以下 优点 :
当然 HDFS 也有它的 劣势 ,并不适合以下场合:
HDFS 采用Master/Slave的架构来存储数据,这种架构主要由四个部分组成,分别为HDFS Client、NameNode、DataNode和Secondary NameNode。
Namenode是整个文件系统的管理节点,负责接收用户的操作请求。它维护着整个文件系统的目录树,文件的元数据信息以及文件到块的对应关系和块到节点的对应关系。
Namenode保存了两个核心的数据结构:
在NameNode启动的时候,先将fsimage中的文件系统元数据信息加载到内存,然后根据edits中的记录将内存中的元数据同步到最新状态;所以,这两个文件一旦损坏或丢失,将导致整个HDFS文件系统不可用。
为了避免edits文件过大, SecondaryNameNode会按照时间阈值或者大小阈值,周期性的将fsimage和edits合并 ,然后将最新的fsimage推送给NameNode。
并非 NameNode 的热备。当NameNode 挂掉的时候,枯指它并不能马上替换 NameNode 并提供服务。其主要任务是辅助 NameNode,定期合并 fsimage和fsedits。
Datanode是实际存储数据块的地方,负责执行数据块的读/写操作。
一个数据块在DataNode以文件存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据,包括数据块的长度,块数据的校验和,以及时间戳。
文件划分成块,默认大小128M,以快为单位,每个块有多个副本(默认3个)存储不同的机器上。
Hadoop2.X默认128M, 小于一个块的文件,并不会占据整个块的空间 。Block数据块大小设置较大的原因:没袭配
文件上传 HDFS 的时候,Client 将文件切分成 一个一个的Block,然后进行存储。
Client 还提供一些命令来管理 HDFS,比如启动或者关闭HDFS。
Namenode始终在内存中保存metedata,用于处理“读请求”,到有“写请求”到来时,namenode会首 先写editlog到磁盘,即向edits文件中写日志,成功返回后,才会修改内存 ,并且向客户端返回,Hadoop会维护一个fsimage文件,也就是namenode中metedata的镜像,但是fsimage不会随时与namenode内存中的metedata保持一致,而是每隔一段时间通过合并edits文件来更新内容。
HDFS HA(High Availability)是为了解决单点故障问题。
HA集群设置两个名称节点,“活跃( Active )”和“待命( Standby )”,两种名称节点的状态同步,可以借助于一个共享存储系统来实现,一旦活跃名称节点出现故障,就可以立即切换到待命名称节点。
为了保证读写数据一致性,HDFS集群设计为只能有一个状态为Active的NameNode,但这种设计存在单点故障问题,官方提供了两种解决方案:
通过增加一个Secondary NameNode节点,处于Standby的状态,与Active的NameNode同时运行。当Active的节点出现故障时,切换到Secondary节点。
为了保证Secondary节点能够随时顶替上去,Standby节点需要定时同步Active节点的事务日志来更新本地的文件系统目录树信息,同时DataNode需要配置所有NameNode的位置,并向所有状态的NameNode发送块列表信息和心跳。
同步事务日志来更新目录树由JournalNode的守护进程来完成,简称为QJM,一个NameNode对应一个QJM进程,当Active节点执行任何命名空间文件目录树修改时,它会将修改记录持久化到大多数QJM中,Standby节点从QJM中监听并读取编辑事务日志内容,并将编辑日志应用到自己的命名空间。发生故障转移时,Standby节点将确保在将自身提升为Active状态之前,从QJM读取所有编辑内容。
注意,QJM只是实现了数据的备份,当Active节点发送故障时,需要手工提升Standby节点为Active节点。如果要实现NameNode故障自动转移,则需要配套ZKFC组件来实现,ZKFC也是独立运行的一个守护进程,基于zookeeper来实现选举和自动故障转移。
虽然HDFS HA解决了“单点故障”问题,但是在系统扩展性、整体性能和隔离性方面仍然存在问题:
HDFS HA本质上还是单名称节点。HDFS联邦可以解决以上三个方面问题。
在HDFS联邦中,设计了多个相互独立的NN,使得HDFS的命名服务能够水平扩展,这些NN分别进行各自命名空间和块的管理,不需要彼此协调。每个DN要向集群中所有的NN注册,并周期性的发送心跳信息和块信息,报告自己的状态。
HDFS联邦拥有多个独立的命名空间,其中,每一个命名空间管理属于自己的一组块,这些属于同一个命名空间的块组成一个“块池”。每个DN会为多个块池提供块的存储,块池中的各个块实际上是存储在不同DN中的。
[img]在hadoop项目结构中h dfs指的是什么
HDFS(Hadoop Distributed File System)是Hadoop项目的核心子项目,是分布式计算中数据存储管理的基础,是基于流数据模式访问和处理超大文件的需求而开发的,可以运行于廉价的商用服务器上。
HDFS 具有以下优点:
1、高容错性
数据自动保存多个副本。它通过增加副本的形式,提高容错性。某一个副本丢失以后,它可以自动恢复,这是由 HDFS 内部机制实现的铅仿颤,我们不必关心。
2、适合批处理
它是通过移动计算而不是移动数据。它会把数据位置暴露给计算框架。
3、适合大数据处理
处理数据达到 GB、TB、甚至PB级别的数据。能够处理百万规模以上的文件数量,数量相当之大。能够处理10K节点的规模。
4、流式文件访问
一次写入,多次读取。文件一旦写入不能修改,只能追加。它能保证数据的一致性。
5、可构建在廉价机器上
它通过多副本机制,提高可靠性。它提供了容错和恢复机制。比如某一个副本丢失,可以通过其它副本来恢复。
HDFS 也有它的劣势,并不适合所有的场合:
1、低延时数据访问
比如毫秒级的来存储数据,这是不行的,它做不到。它适合高吞吐率的场景,就是在某一时间内写入大量的数据。槐败但是它在低延时的情大含况下是不行的,比如毫秒级以内读取数据,这样它是很难做到的。
2、小文件存储
存储大量小文件(这里的小文件是指小于HDFS系统的Block大小的文件(默认64M))的话,它会占用 NameNode大量的内存来存储文件、目录和块信息。这样是不可取的,因为NameNode的内存总是有限的。
3、并发写入、文件随机修改
一个文件只能有一个写,不允许多个线程同时写。仅支持数据 append(追加),不支持文件的随机修改。
HDFS的优缺点以及应用场景
HDFS 是hadoop distributed file system的简称,分布式文件系统
在大数据生态系统中,分布式肆返祥是裂搏一个核心概念,大数据大数据,大数据量的数据和大量种类的数据,一台机器存不下,多台机器一起存储
一个对应用数据提供高吞吐访问量的分布式文件系统
适合一次写入,多次读出场景,而且不支持文件的随机修改,但是支持文件的追加 .适合做数据分析
随机修改:把已经写过的内存进行修改
追加:在之前文件写的基础上面后面继续加内容
优点:
缺点:
实际工作中本人自己测试过,一个文件/目录/文件块大概是占用的元数据内存是150B,假如有100W个小文件,每个文件世仿都占用一个文件块,需150B×100W/1024/1024≈143M,要是一个亿的数据量呢
四.(一)HDFS优缺点
Hadoop中HDFS优缺点
HDFS的优点:
1、处理超大文件
这里的超大文件通常是指百MB、甚至数百TB大小的文件。目前在实际应用中,HDFS已经能用来存储管理PB级的数据了。
2、流式的访问数据
HDFS的设计建立在“一次写入、多次读写”任务的基础上。这意味着一个数据集一旦由数据源生成,就会被复制分发到不同的存储节点中,然后响应各种各样的数据分析任务请求。在多数情况下,分析任务都会涉及数据集中的大部分数据,也就是说,对HDFS来说,请求读取整个数据集要比读取一条记录更加高效。
3、运行于廉价的商用机器轮唤集群上
Hadoop设计对应急需求比较低,只须运行在低廉的商用硬件集群上,而无需在昂贵的高可用性机器上。廉价的商用机也就意味着大型集群中出现节点故障情况的概率非常高。HDFS遇到了上述故障时,被设计成能够继续运行且不让用户察觉到明显的中断。
HDFS的缺点:
1、不适合低延迟数据访问
如果要处理一些用户要求时间比较短的低延迟应用请求,则HDFS不适合。HDFS是为了处理大型数据集分析任务的,主要是为达到高的数据吞吐量而设计的,这就可能要求以高延迟作为代价。
改进策略:
对于那些有低延时要求的应用程序,HBase是一个更好的选择,通过上层数据管理项目尽可能地弥补这个不足。在性能上有了很大的提升,它的口号是goes real time。使用缓存或多个master设计可以降低Clinet的数据请求压力,以减少延时。
2、无法高效存储大量的小文件
因为NameNode把文件系统的元数据放置在内存中,所有文件系统所能容纳的文件数目是由NameNode的内存大小来决定。还有一个问题就是,因为MapTask的数量是由Splits来决定的,所以用MR处理大量的小文件时,就会产生过多的MapTask,线程管理开销将会增加作业时间。当Hadoop处理很多小文件(文件大小小于HDFS中Block大小)的时候,由于FileInputFormat不会对小文件进行划分,所以每一个小文件都会被当做一个Split并分配一个Map任务,导致效率底下。
例如:一个1G的文件,会被划分成16个64MB的Split,并分配16个Map任务处理,而10000个100Kb的文件会被10000个Map任务处理。
改进策略:
要想让HDFS能处腊拿凯理好小文件,有不少方法。利用SequenceFile、MapFile、Har等方式归档小文件,这个方法的原理就是把小文件归档起来管理,HBase就是基于此的。
3、不支持多用户写入及任意修改文件
在HDFS的一个文件中只有敏物一个写入者,而且写操作只能在文件末尾完成,即只能执行追加操作,目前HDFS还不支持多个用户对同一文件的写操作,以及在文件任意位置进行修改。
hdfs的特点有哪些
hdfs的特点
一、hdfs的优点
1.支持海量数据的存储:一般来说,HDFS存储的文件可以支持TB和PB级别的数据。
2.检测和快速应对硬件故障:在集群环境中,硬件故障是常见性问题。因为有上千台服务器连在一起,故障率很高,因枯氏此故障检测和自动恢复hdfs文件系统的一个设计目标。假设某一基晌个datanode挂掉之后,因为数据是有备份的,还可以从其他节点里找到。namenode通过心跳机制来检测datanode是否还存活。
3.流式数据访问:(HDFS不能做到低延迟的数据访问,但是HDFS的吞吐量大)=》Hadoop适用于处理离线数据,不适合处理实时数据。HDFS的数据处理规模比较大,应用一次需要大量的数据,同时这些应用一般都是批量处理,而不是用户交互式处理。应用程序能以流的形式访问数据库。主要的是数据的吞吐量,而不是访问速度。访问速度最终是要受制于网络和磁盘的速度,机器节点再多,也不能突破物理的局限。
4.简化的一致性模型:对于外部使用用户,不需要了解hadoop底层细节,比如文件的切块,文件的存储,节点的管理。一个文件存储在HDFS上后,适合一次写入,多次读取的场景。因为存储在HDFS上的文件都是超大文件,当上传完这个文件到hadoop集群后,会进行文件切块,分发,复制等操作。如果文件被修改,会导致重新触发这个过程,而这个过程耗时是最长的。所以在hadoop里,2.0版本允许数据的追加,单不允许数据的修改。
5.高容错性:数据自动保存多个副本,副本丢失后自动恢复。可构建在廉价的机器上,实现线性扩展。当集群增加新节点之后,namenode也可以感知,将数据分发和备份到相应的节点上。
6.商用硬件:Hadoop并不需要运行在昂贵且高可靠的硬件上。它是设计运行在商用硬件(在各种零售店都能买到的普通硬件)的集群上的,因此至少对于庞大的集群来说,节点故障的几率还是非常高的。HDFS遇到上述故障时,被设计成能够继续运行且不让用户察觉到明显的中断。
二、HDFS缺点(局限性)没锋散
1、不能做到低延迟数据访问:由于hadoop针对高数据吞吐量做了优化,牺牲了获取数据的延迟,所以对于低延迟数据访问,不适合hadoop。对于低延迟的访问需求,HBase是更好的选择。
2、不适合大量的小文件存储 :由于namenode将文件系统的元数据存储在内存中,因此该文件系统所能存储的文件总数受限于namenode的内存容量。根据经验,每个文件、目录和数据块的存储信息大约占150字节。因此,如果有一百万个小文件,每个小文件都会占一个数据块,那至少需要300MB内存。如果是上亿级别的,就会超出当前硬件的能力。
3、修改文件:对于上传到HDFS上的文件,不支持修改文件。Hadoop2.0虽然支持了文件的追加功能,但是还是不建议对HDFS上的文件进行修改。因为效率低下。HDFS适合一次写入,然后多次读取的场景。
4、不支持用户的并行写:同一时间内,只能有一个用户执行写操作。
关于hdfs的优缺点和hdfs的优缺点是什么的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。