HDFS的缺点及改进策略

news/2024/7/9 22:32:29 标签: hadoop, hbase, 集群, google, 扩展, 存储
HDFS是一个不错的分布式文件系统,它有很多的优点,但也存在有一些缺点。目前而言,它在以下几个方面就效率不佳:
低延时访问
HDFS不太适合于那些要求低延时(数十毫秒)访问的应用程序,因为HDFS是设计用于大吞吐量数据的,这是以一定延时为代价的。HDFS是单Master的,所有的对文件的请求都要经过它,当请求多时,肯定会有延时。当前,对于那些有低延时要求的应用程序,HBase是一个更好的选择。现在HBase的版本是0.20,相对于以前的版本,在性能上有了很大的提升,它的口号就是goes real time。
使用缓存或多master设计可以降低client的数据请求压力,以减少延时。还有就是对HDFS系统内部的修改,这就得权衡大吞吐量与低延时了,HDFS不是万能的银弹。
大量小文件
因为Namenode把文件系统的元数据放置在内存中,所以文件系统所能容纳的文件数目是由Namenode的内存大小来决定。一般来说,每一个文件、文件夹和Block需要占据150字节左右的空间,所以,如果你有100万个文件,每一个占据一个Block,你就至少需要300MB内存。当前来说,数百万的文件还是可行的,当扩展到数十亿时,对于当前的硬件水平来说就没法实现了。还有一个问题就是,因为Map task的数量是由splits来决定的,所以用MR处理大量的小文件时,就会产生过多的Maptask,线程管理开销将会增加作业时间。举个例子,处理10000M的文件,若每个split为1M,那就会有10000个Maptasks,会有很大的线程开销;若每个split为100M,则只有100个Maptasks,每个Maptask将会有更多的事情做,而线程的管理开销也将减小很多。
要想让HDFS能处理好小文件,有不少方法:
1、利用SequenceFile、MapFile、Har等方式归档小文件,这个方法的原理就是把小文件归档起来管理,HBase就是基于此的。对于这种方法,如果想找回原来的小文件内容,那就必须得知道与归档文件的映射关系。
2、横向扩展,一个Hadoop集群能管理的小文件有限,那就把几个Hadoop集群拖在一个虚拟服务器后面,形成一个大的Hadoop集群google也是这么干过的。
3、多Master设计,这个作用显而易见了。正在研发中的GFS II也要改为分布式多Master设计,还支持Master的Failover,而且Block大小改为1M,有意要调优处理小文件啊。
附带个Alibaba DFS的设计,也是多Master设计,它把Metadata的映射存储和管理分开了,由多个Metadata存储节点和一个查询Master节点组成。
多用户写,任意文件修改
目前Hadoop只支持单用户写,不支持并发多用户写。可以使用Append操作在文件的末尾添加数据,但不支持在文件的任意位置进行修改。这些特性可能会在将来的版本中加入,但是这些特性的加入将会降低Hadoop的效率,就拿GFS来说吧,这篇文章里就说了google自己的人都用着Multiple Writers很不爽。
利用Chubby、ZooKeeper之类的分布式协调服务来解决一致性问题。
本文转载自: http://www.cnblogs.com/wycg1984/archive/2010/03/20/1690281.html

http://www.niftyadmin.cn/n/1629360.html

相关文章

WPF控件模板和数据模板

来自:http://www.th7.cn/Program/WPF/2011/12/21/51676.shtml ControlTemplate用于描述控件本身. 使用TemplateBinding来绑定控件自身的属性, 比如{TemplateBinding Background}DataTemplate用于描述控件的Content. 使用Binding来绑定数据对象的属性, 比如{Bindin…

042多进程

内容:进程创建(两种方法) #############################第一种创建方法:通过创建线程对象,参数设置进程执行的方法以及方法的参数 from multiprocessing import Process import timedef f(name):time.sleep(0.2)print(hello,name,time.ctime…

C++ | 关于const的一些问题总结

今天在学习CSTL中内置迭代器的过程中&#xff0c;因为声明变量时没有加const关键字&#xff0c;引发了错误&#xff0c;所以想用这篇博客来专门记录平时可能用到的与const有关的问题。 【问题1】平时在使用一个指针来指向一个常量时&#xff0c;可能引发的问题。 #include<…

对Hadoop-HDFS性能造成重大影响的杀手-Shell

在测试Hadoop时, 使用NameNode身上的dfshealth.jsp管理页面发现&#xff0c;DataNode在运行的过程中,Last Contact参数时常会超过3。LC&#xff08;Last Contact&#xff09;的意思是表明DataNode有多少秒的时间未向NameNode发送心跳包了。然而默认DataNode是3秒发送一次&#…

ssh免密登录(使用公钥私钥对登录)

两台&#xff08;多台&#xff09;机器之间实现ssh免密登录&#xff08;实质上是使用公钥 私钥对&#xff09;关于公钥私钥对一般ssh免密登录 采用的ssh的rsa密钥:id_rsa 私钥id_rsa.pub 公钥下述命令产生不同类型的密钥ssh-keygen -t dsassh-keygen -t rsassh-keygen -t r…

C++ | 进程虚拟地址空间区域的划分

注&#xff1a;以下代码的均执行在 x86系统 32位linux环境下 #include<iostream>int gdata1 10; int gdata2 0; int gdata3;static int gdata4 11; static int gdata5 0; static int gdata6;int main() {int a 12;int b 0;int c;static int d 13;static int e 0…

对于HDFS中元数据的一些疑问,欢迎大家讨论

HDFS中元数据中是否有冗余&#xff1f;如果有冗余那么冗余机制是什么&#xff1f;冗余写入过程是什么&#xff1f;HDFS中元数据是否有读写权限&#xff1f;如果有权限&#xff0c;通过什么方式控制权限&#xff1f;客户端与元数据是否存在同步问题&#xff0c;如果存在那么如何…

【linux之进程管理,系统监控】

一、进程管理 前台进程&#xff1a;一般是指占据着标准输入和/或标准输出的进程后台进程&#xff1a;不占据默认开启的进程都是前台进程ctrlC 中断ctrlz 从前台转入后台bg 后台进程编号 让其在后台运行ls -R / & 让其在后台进行 使一个进程在后台进行1.ctrlz将前台进程调入…