如何去计算hdfs中namenode中所需的堆内存大小

请参考 上一个 链接地址:
hdfs为什么不擅长存储大量小文件
https://blog.51cto.com/12445535/2354951

概述:namenode replication(复制)
复制

默认块复制因子(dfs.replication)为3。复制影响磁盘空间但不影响内存消耗。复制会更改每个块所需的存储量,但不会更改块的数量。如果DataNode上的一个块文件(由NameNode上的一个块表示)被复制三次,则块文件的数量将增加三倍,但不会代表它们的块数。

关闭复制时,一个192 MB的文件占用192 MB的磁盘空间和大约450字节的内存。
//(计算方式为:128+64 也就是1个文件inode+2个块 3150 大约消耗 450字节的内存)
如果你有一百万个这样的文件,或192 TB的数据,你需要192 TB的磁盘空间,而不考虑RPC工作负载,450 MB内存:(100万inode + 200万个块)
150个字节。启用默认复制后,您需要576 TB的磁盘空间:(192 TB * 3)但内存使用率保持不变,450 MB。当您考虑簿记和RPC,并遵循每百万个块1 GB堆内存的建议时,对此方案更安全的估计是2 GB内存(有或没有复制)。



例子
示例1:估计使用的NameNode堆内存

Alice,Bob和Carl每个磁盘上都有1 GB(1024 MB)的数据,但切成不同大小的文件。 Alice和Bob的文件是块大小的一部分,需要的内存最少。 Carl没有用不必要的命名空间对象填充堆。
Alice:1 x 1024 MB文件

????1个文件inode
????8块(1024 MB / 128 MB)

总计= 9个对象* 150个字节= 1,350个字节的堆内存
Bob:8 x 128 MB文件

????8个文件inode
????8个块

总计= 16个对象* 150个字节= 2,400个字节的堆内存
Carl:1,024 x 1 MB文件

????1,024个文件inode
????1,024个街区

总计= 2,048个对象* 150个字节= 307,200个字节的堆内存

**计算实例//生产可用 根据已知磁盘大小去计算需要多大的namenode堆内存

示例2:估计所需的NameNode堆内存**

在该示例中,通过考虑群集的容量来估计存储器。值四舍五入。两个集群都物理存储4800 TB或大约3600万个块文件(默认块大小)。复制确定有多少名称空间块代表这些块文件。
群集A:每个24 TB的200个主机= 4800 TB。

????Blocksize = 128 MB,复制= 1
????以MB为单位的群集容量:200 24,000,000 MB = 4,800,000,000 MB(4800 TB)
????每个块所需的磁盘空间:每块128 MB
1 =每块128 MB存储空间
????块中的群集容量:4,800,000,000 MB / 128 MB = 36,000,000块

在容量方面,建议分配每百万个块1 GB的内存,群集A需要36 GB的最大堆空间。
群集B:每个24 TB的200个主机= 4800 TB。

????Blocksize = 128 MB,复制= 3
????以MB为单位的群集容量:200 24,000,000 MB = 4,800,000,000 MB(4800 TB)
????每个块所需的磁盘空间:每块128 MB
3 =每块384 MB存储空间
????块中的群集容量:4,800,000,000 MB / 384 MB = 12,000,000个块

在容量方面,建议为每百万个块分配1 GB内存,群集B需要12 GB的最大堆空间。

群集A和群集B都存储相同数量的块文件。但是,在群集A中,每个块文件都是唯一的,并由NameNode上的一个块表示;在群集B中,只有三分之一是唯一的,三分之二是副本。

原文地址:https://blog.51cto.com/12445535/2407841

时间: 2024-11-06 03:52:37

如何去计算hdfs中namenode中所需的堆内存大小的相关文章

hadoop中HDFS的NameNode原理

1. hadoop中HDFS的NameNode原理 1.1. 组成 包括HDFS(分布式文件系统),YARN(分布式资源调度系统),MapReduce(分布式计算系统),等等. 1.2. HDFS架构原理 比如现在要上传一个1T的大文件,提交给HDFS的Active NameNode(用以存放文件目录树,权限设置,副本数设置等),它会在指定目录下创建一个新的文件对象,比如access_20180101.log 至于具体数据,它会将它拆分后进行分布式存储,分散在各个DataNode节点,且默认都会

Hadoop介绍-4.Hadoop中NameNode、DataNode、Secondary、NameNode、JobTracker TaskTracker

Hadoop是一个能够对大量数据进行分布式处理的软体框架,实现了Google的MapReduce编程模型和框架,能够把应用程式分割成许多的 小的工作单元,并把这些单元放到任何集群节点上执行.在MapReduce中,一个准备提交执行的应用程式称为「作业(job)」,而从一个作业划分出 得.运行于各个计算节点的工作单元称为「任务(task)」.此外,Hadoop提供的分布式文件系统(HDFS)主要负责各个节点的数据存储,并实现了 高吞吐率的数据读写. 在分布式存储和分布式计算方面,Hadoop都是用

NameNode中几个关键的数据结构

转载地址:http://blog.csdn.net/AE86_FC/article/details/5842020 NameNode启动过程详细剖析 NameNode中几个关键的数据结构 FSImage Namenode会将HDFS的文件和目录元数据存储在一个叫fsimage的二进制文件中,每次保存fsimage之后到下次保存之间的所有hdfs操作,将会记录在editlog文件中,当editlog达到一定的大小(bytes,由fs.checkpoint.size参数定义)或从上次保存过后一定时间

计算1到100000中出现93的次数

一个同学在群上要求出计算1到100000中出现93的次数,然后,我就写脚本了. cat count.sh  #!/bin/bash sum=0 for num in {1..100000} do echo $num | grep 93 [ $? -eq 0 ] && ((sum=sum+1)) done echo "sum=$sum" 然后有同学给出答案了,秒杀我一万里 seq 1 100000 | grep 93 |wc -l 我想静静  /(ㄒoㄒ)/~~   让我

C#(去、过滤)掉字符中的换行符

原文:C#(去.过滤)掉字符中的换行符 原文地址: http://www.feedou.com/articlepickservlet?commandkey=singlearticle&articleID=5c42b75f1b435084011b49ba083217d4 本文介绍的方法需要先导入命名空间:usingSystem.Text.RegularExpressions; 字符串里所有的的换行符都去掉:textStr = Regex.Replace(textStr, @"[/n/r]&

【译】 AWK教程指南 3计算并打印文件中指定的字段数据

awk 处理数据时,它会自动从数据文件中一次读取一条记录,并会将该记录切分成一个个的字段:程序中可使用 $1, $2,... 直接取得各个字段的内容.这个特色让使用者易于用 awk 编写 reformatter 来改变数据格式. 范例:以数据文件 emp.dat 为例,计算每人应发工资并打印报表. 分析:awk 会自行一次读入一条记录,故程序中仅需告诉 awk 如何处理所读入的数据行. 执行如下命令:($ 表UNIX命令行上的提示符)  $ awk '{ print $2, $3 * $4 }'

您在基于 Windows 7 的或基于 Windows Server 2008 R2 的计算机上读取器中插入智能卡时出现错误消息:"设备驱动程序软件未能成功安装"

http://support.microsoft.com/kb/976832/zh-cn http://support.microsoft.com/kb/976832/zh-tw 症状 当智能卡插入智能卡阅读器后时,Windows 尝试下载并安装智能卡 minidrivers 通过插服务卡.如果自定义的加密服务提供程序未在系统上安装智能卡的驱动程序在任一预配置位置,如 Windows 更新. WSUS 或 intranet 路径不可用,在通知区域中将收到以下错误消息: 未能成功安装设备驱动程序软

使用linq计算元素在列表中出现的次数c#代码

c#使用linq计算元素在列表中出现的次数,调用方法非常简单,和sql语句很像 //codego.net计算的次数一个项目出现在这个列表 public static int CountTimes<T>(this List<T> inputList, T searchItem){return ((from t in inputList where t.Equals(searchItem) select t).Count());}

python学习之——计算给出代码中注释、代码、空行的行数

题目:计算给出代码中注释.代码.空行的行数 来源:网络 思路:注释行以 ‘#’开头,空行以 ‘\n’ 开头,以此作为判断 def count_linenum(fname): fobj = open(fname,"rU") #print fobj.readlines() count_blankline = 0 count_notes = 0 count_code = 0 for eachLine in fobj: if eachLine[0] == '\n': count_blankli