北京痤疮治疗医院 http://pf.39.net/bdfyy/bdflx/210312/8740647.html
作者
荣翔
目录背景
第一部分回本溯源
第二部分HDFS大量小文件的危害
第三部分小文件治理方案总结
第四部分总结
参考文献及资料
背景企业级Hadoop大数据平台在实际使用过程中,可能大部分会遭遇小文件问题,并体验它的破坏性。HDFS文件系统的inode信息和block信息以及block的位置信息,这些原数据信息均由NameNode的内存中维护,这使得NameNode对内存的要求非常高,特别是遭遇海量小文件。
例如:京东的NameNode内存是GB,甚至还有大厂的NameNode的机器是1TB的内存。能力强的大厂,钱就不花在买机器上了,例如字节跳动使用C++重写NameNode,这样分配内存和释放内存都由程序控制。但是NameNode天生的架构缺陷,所以元数据的扩展性终是受限于单机物理内存大小。
本篇文章首先回本溯源,分析小文件的产生原理以及对业务平台的危害,最后总结分析治理方法。
第一部分回本溯源HDFS基于Google的论文《分布式文件系统》思想实现的,设计目的是解决大文件的读写。
1.1HDFS存储原理HDFS集群(hadoop2.0+)中,有两类服务角色:NameNode、DataNode。文件数据按照固定大小(blocksize,默认M)切分后,分布式存储在DataNode节点上。而数据的元数据信息加载在NameNode服务内存中。为防止服务单机会持久化一份在文件中(即fsimage文件,最新的元数据存储在editslog日志中,一般为64MB,当editslog文件大小达到64MB时,就会将这些元数据追加到fsimage文件中)。
每个文件/目录和block元数据信息存储在内存中,内存中分别对应:INodeFile、INodeDirectory、BlockInfo,每个对象大约-bytes。
1.2检查文件系统1.2.1命令fsckHDFS提供了fsck命令用来检查HDFS文件系统的健康状态和Block信息。需要有HDFS的supergroup特权用户组的用户才有执行权限。参考下面的命令:
[root
quickstartcloudera]#hdfsfsck/-blocks-locationsConnectingtonamenodevia