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的定义
HDFS全称为:Hadoop Distributed File System,它是一个文件系统,用于存储文件,通过目录树来定位;其次,他是分布式的,由很多服务联合起来实现其功能,集群中的服务器有各自的角色。
hdfs工作流程
1. hdfs基本工作流程
1. hdfs初始化目录结构
hdfs namenode -format 只是初始化了namenode的工作目录
而datanode的工作目录是在datanode启动后自己初始化的
namenode在format初始化的时候会形成两个标识:
blockPoolId:
clusterId:
新的datanode加入时,会获取这两个标识作为自己工作目录中的标识
一旦namenode重新format后,namenode的身份标识已变,而datanode如果依然
持有原来的id,就不会被namenode识别
2. hdfs的工作机制
hdfs集群分为两大角色:NameNode,DataNode (Secondary NameNode)
NameNode负责管理整个文件的元数据(命名空间信息,块信息) 相当于Master
DataNode负责管理用户的文件数据块 相当于Salve
文件会按照固定的大小(block=128M)切成若干块后分布式存储在若干个datanode节点上
每一个文件块有多个副本(默认是三个),存在不同的datanode上
DataNode会定期向NameNode汇报自身所保存的文件block信息,而namenode则会负责保持文件副本数量
hdfs的内部工作机制会对客户的保持透明,客户端请求方法hdfs都是通过向namenode申请来进行访问
SecondaryNameNode有两个作用,一是镜像备份,二是日志与镜像的定期合并
客户端向namenode通信,请求上传文件,namenode检查目标文件是否已经存在,父目录是否存在
namenode返回给客户端,告知是否可以上传
客户端请求第一个block该传输到那些datanode服务器上
namenode返回3个datanode服务器abc
客户端请求3台datanode的一台a上传数据(本质上是一个rpc调用,建立pipeline),A收到请求后会继续调用b,然后b调用c,将整个pipeline建立完成,逐级返回客户端。
客户端开始忘a上传第一个block(先从磁盘读取数据放入本地内存缓存),以packet为单位,a收到一个packet将会传给b,b传给c,a每传一个packet会放入一个应答队列等待应答
宕一个block传输完之后,客户端再次请求namenode上传第二个block的服务器
3. hdfs写入数据流程
1.客户端要向hdfs写入数据,首先要跟namenode通信以确认可以写文件并获得接收文件block的datanode,然后,客户端按照顺序将文件block逐个传给相应datanode,并由接收到block的datanode负责向其他datanode复制block副本-hdfs
4. 写入数据步骤详细解析