当前位置: 首页 > news >正文

十堰市有几家网站公司网页设计与自学教程

十堰市有几家网站公司,网页设计与自学教程,北京建筑公司排名,邢台做网站哪儿好前言 《HDFS NameNode内存全景》中#xff0c;我们从NameNode内部数据结构的视角#xff0c;对它的内存全景及几个关键数据结构进行了简单解读#xff0c;并结合实际场景介绍了NameNode可能遇到的问题#xff0c;还有业界进行横向扩展方面的多种可借鉴解决方案。 事实上我们从NameNode内部数据结构的视角对它的内存全景及几个关键数据结构进行了简单解读并结合实际场景介绍了NameNode可能遇到的问题还有业界进行横向扩展方面的多种可借鉴解决方案。 事实上对NameNode实施横向扩展前会面临常驻内存随数据规模持续增长的情况为此需要经历不断调整NameNode内存的堆空间大小的过程期间会遇到几个问题 当前内存空间预期能够支撑多长时间。何时调整堆空间以应对数据规模增长。增加多大堆空间。另一方面NameNode堆空间又不能无止境增加到达阈值后与机型、JVM版本、GC策略等相关同样会存在潜在问题 重启时间变长。潜在的FGC风险。由此可见对NameNode内存使用情况的细粒度掌控可以为优化内存使用或调整内存大小提供更好的决策支持。 本文在前篇《HDFS NameNode内存全景》文章的基础上针对前面的几个问题进一步对NameNode核心数据结构的内存使用情况进行详细定量分析并给出可供参考的内存预估模型。根据分析结果可有针对的优化集群存储资源使用模式同时利用内存预估模型可以提前对内存资源进行合理规划为HDFS的发展提供数据参考依据。 内存分析 NetworkTopology NameNode通过NetworkTopology维护整个集群的树状拓扑结构当集群启动过程中通过机架感知通常都是外部脚本计算逐渐建立起整个集群的机架拓扑结构一般在NameNode的生命周期内不会发生大变化。拓扑结构的叶子节点DatanodeDescriptor是标识DataNode的关键结构该类继承关系如图1所示。 图1 DatanodeDescriptor继承关系 在64位JVM中DatanodeDescriptor内存使用情况如图2所示除特殊说明外后续对其它数据结构的内存使用情况分析均基于64位JVM。 图2 DatanodeDescriptor内存使用详解 由于DataNode节点一般会挂载多块不同类型存储单元如HDD、SSD等图2中storageMap描述的正是存储介质DatanodeStorageInfo集合其详细数据结构如图3所示。 图3 DatanodeStorageInfo内存使用详解 除此之外DatanodeDescriptor还包括一部分动态内存对象如replicateBlocks、recoverBlocks和invalidateBlocks等与数据块动态调整相关的数据结构pendingCached、cached和pendingUncached等与集中式缓存相关的数据结构。由于这些数据均属动态的形式临时存在随时会发生变化所以这里没有做进一步详细统计结果存在少许误差。 根据前面的分析假设集群中包括2000个DataNode节点NameNode维护这部分信息需要占用的内存总量 64 114 56 109 ∗ 16∗ 2000 ~4MB 在树状机架拓扑结构中除了叶子节点DatanodeDescriptor外还包括内部节点InnerNode描述集群拓扑结构中机架信息。 图4 NetworkTopology拓扑结构内部节点内存使用详解 对于这部分描述机架信息等节点信息假设集群包括80个机架和2000个DataNode节点NameNode维护拓扑结构中内部节点信息需要占用的内存总量 44 48) ∗ 80 8 ∗ 2000 ~25KB 从上面的分析可以看到为维护集群的拓扑结构NetworkTopology当集群规模为2000时需要的内存空间不超过5MB按照接近线性增长趋势即使集群规模接近10000这部分内存空间~25MB相比整个NameNode JVM的内存开销微乎其微。 NameSpace 与传统单机文件系统相似HDFS对文件系统的目录结构也是按照树状结构维护NameSpace保存的正是整个目录树及目录树上每个目录/文件节点的属性包括名称name编号id所属用户user所属组group权限permission修改时间mtime访问时间atime子目录/文件children等信息。 下图5为Namespace中INode的类图结构从类图可以看出文件INodeFile和目录INodeDirectory的继承关系。其中目录在内存中由INodeDirectory对象来表示并用List children成员列表来描述该目录下的子目录或文件文件在内存中则由INodeFile来表示并用BlockInfo[] blocks数组表示该文件由哪些Blocks组成。其它属性由继承关系的各个相应子类成员变量标识。 图5 文件和目录继承关系 目录和文件结构在继承关系中各属性的内存占用情况如图6所示。 图6 目录和文件内存使用详解 除图中提到的属性信息外一些附加如ACL等非通用属性没有在统计范围内。在默认场景下INodeFile和INodeDirectory.withQuotaFeature是相对通用和广泛使用到的两个结构。 根据前面的分析假设HDFS目录和文件数分别为1亿Block总量在1亿情况下整个Namespace在JVM中内存使用情况 Total(Directory) (24 96 44 48) ∗ 100M 8 ∗ num(total children) Total(Files) (24 96 48) ∗ 100M 8 ∗ num(total blocks) Total (24 96 44 48) ∗ 100M 8 ∗ num(total children) (24 96 48) ∗ 100M 8 ∗ num(total blocks) ~38GB 关于预估方法的几点说明 1. 对目录树结构中所有的Directory均按照默认INodeDirectory.withQuotaFeature结构进行估算如果集群开启ACL/Snapshotd等特性需增加这部分内存开销。 2. 对目录树结构中所有的File按照INodeFile进行估算。 3. 从整个目录树的父子关系上看num(total children)就是目录节点数和文件节点数之和。 4. 部分数据结构中包括了字符串按照均值长度为8进行预估实际情况可能会稍大。 Namespace在JVM堆内存空间中常驻在NameNode的整个生命周期一直在内存存在同时为保证数据的可靠性NameNode会定期对其进行Checkpoint将Namespace物化到外部存储设备。随着数据规模的增加文件数/目录树也会随之增加整个Namespace所占用的JVM内存空间也会基本保持线性同步增加。 BlocksMap HDFS将文件按照一定的大小切成多个Block为了保证数据可靠性每个Block对应多个副本存储在不同DataNode上。NameNode除需要维护Block本身的信息外还需要维护从Block到DataNode列表的对应关系用于描述每一个Block副本实际存储的物理位置BlockManager中BlocksMap结构即用于Block到DataNode列表的映射关系。BlocksMap内部数据结构如图7所示。 图7 BlockInfo继承关系 BlocksMap经过多次优化形成当前结构最初版本直接使用HashMap解决从Block到BlockInfo的映射。由于在内存使用、碰撞冲突解决和性能等方面存在问题之后使用重新实现的LightWeightGSet代替HashMap该数据结构本质上也是利用链表解决碰撞冲突的HashTable但是在易用性、内存占用和性能等方面表现更好。关于引入LightWeightGSet细节可参考HDFS-1114。 与HashMap相比为了尽可能避免碰撞冲突BlocksMap在初始化时直接分配整个JVM堆空间的2%作为LightWeightGSet的索引空间当然2%不是绝对值如果2%内存空间可承载的索引项超出了Integer.MAX_VALUE/8注Object.hashCode()结果是int对于64位JVM的对象引用占用8Bytes会将其自动调整到阈值上限。限定JVM堆空间的2%基本上来自经验值假定对于64位JVM环境如果提供64GB内存大小索引项可超过1亿如果Hash函数适当基本可以避免碰撞冲突。 BlocksMap的核心功能是通过BlockID快速定位到具体的BlockInfo关于BlockInfo详细的数据结构如图8所示。BlockInfo继承自Block除了Block对象中BlockIDnumbytes和timestamp信息外最重要的是该Block物理存储所在的对应DataNode列表信息triplets。 ![](https://awps-assets.meituan.net/mit-x/blog-images-bundle-2016/5bf22702.png) 图8 BlocksMap内存使用详解 其中LightWeightGSet对应的内存空间全局唯一。尽管经过LightWeightGSet优化内存占用但是BlocksMap仍然占用了大量JVM内存空间假设集群中共1亿BlockNameNode可用内存空间固定大小128GB则BlocksMap占用内存情况 16 24 2% ∗ 128GB 40 128 ∗ 100M ~20GB BlocksMap数据在NameNode整个生命周期内常驻内存随着数据规模的增加对应Block数会随之增多BlocksMap所占用的JVM堆内存空间也会基本保持线性同步增加。 小结 NameNode内存数据结构非常丰富除了前面详细分析的核心数据结构外其实还包括如LeaseManager/SnapShotManager/CacheManager等管理的数据由于内存使用非常有限或特性未稳定没有开启或没有通用性这里都不再展开。 根据前述对NameNode内存的预估对比Hadoop集群历史实际数据文件目录总量~140M数据块总量~160MNameNode JVM配置72GB预估内存使用情况 Namespace(24 96 44 48) ∗ 70M 8 ∗ 140M (24 96 48) ∗ 70M 8 ∗ 160M ~27GB BlocksMap16 24 2% ∗ 72GB 40 128 ∗ 160M ~26GB 说明这里按照目录文件数占比1:1进行了简化基本与实际情况吻合且简化对内存预估结果影响非常小。 二者组合结果~53GB结果与监控数据显示常驻内存~52GB基本相同符合实际情况。 从前面讨论可以看出整个NameNode堆内存中占空间最大的两个结构为Namespace和BlocksMap当数据规模增加后巨大的内存占用势必会给JVM内存管理带来挑战甚至可能制约NameNode服务能力边界。 针对Namespace和BlocksMap的空间占用规模有两个优化方向 合并小文件。使用Hive做数据生产时为避免严重的数据倾斜、人为调小分区粒度等一些特殊原因可能会在HDFS上写入大量小文件会给NameNode带来潜在的影响。及时合并小文件保持稳定的目录文件增长趋势可有效避免NameNode内存抖动。适当调整BlockSize。如前述更少的Block数也可降低内存使用不过BlockSize调整会间接影响到计算任务需要进行适当的权衡。对比其他Java服务NameNode场景相对特殊需要对JVM部分默认参数进行适当调整。比如Young/Old空间比例为避免CMS GC降级到FGC影响服务可用性适当调整触发CMS GC开始的阈值等等。关于JVM相关参数调整策略的细节建议参考官方使用文档。 这里笔者根据实践提供几点NameNode内存相关的经验供参考 根据元数据增长趋势参考本文前述的内存空间占用预估方法能够大体得到NameNode常驻内存大小一般按照常驻内存占内存总量~60%调整JVM内存大小可基本满足需求。为避免GC出现降级的问题可将CMSInitiatingOccupancyFraction调整到~70。NameNode重启过程中尤其是DataNode进行BlockReport过程中会创建大量临时对象为避免其晋升到Old区导致频繁GC甚至诱发FGC可适当调大Young区-XX:NewRatio到10~15。据了解针对NameNode的使用场景使用CMS内存回收策略将HotSpot JVM内存空间调整到180GB可提供稳定服务。继续上调有可能对JVM内存管理能力带来挑战尤其是内存回收方面一旦发生FGC对应用是致命的。这里提到180GB大小并不是绝对值能否在此基础上继续调大且能够稳定服务不在本文的讨论范围。结合前述的预估方法当可用JVM内存达180GB时可管理元数据总量达~700M基本能够满足中小规模以下集群需求。 总结 本文在《HDFS NameNode内存全景》基础上对NameNode内存使用占比较高的几个核心数据结构进行了详细的介绍。在此基础上提供了可供参考的NameNode内存数据空间占用预估模型 Total 198 ∗ num(Directory Files) 176 ∗ num(blocks) 2% ∗ size(JVM Memory Size) 通过对NameNode内存使用情况的定量分析可为HDFS优化和发展规划提供可借鉴的数据参考依据。 参考文献 [1] Apache Hadoop. https://hadoop.apache.org/. 2016. [2] Apache Issues. https://issues.apache.org/. 2016. [3] Apache Hadoop Source Code. https://github.com/apache/hadoop/tree/branch-2.4.1/. 2014. [4] HDFS NameNode内存全景. http://tech.meituan.com/namenode.html. 2016. [5] Java HotSpot VM Options. http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html.
http://www.zqtcl.cn/news/394177/

相关文章:

  • 如何做旅游休闲网站苍南做网站
  • wordpress jp theme关键词排名优化公司成都
  • Soho外贸常用网站wordpress下不了插件吗
  • 企业网站建设小技巧有哪些WordPress网站小程序
  • 公司招聘网站续费申请seo编辑是干什么的
  • 58同城泉州网站建设人工投票平台app
  • dede 网站地图 插件网站引导页flash
  • 聊城做网站的公司渠道网站总体结构
  • 北京比较大的网站建设公司wap网站引导页特效
  • 做关于植物的网站即墨网站设计
  • 怎么提升网站收录商品网页制作
  • 做网站建设的平台wordpress5.0发布
  • 站长工具a级查网站域名
  • 免费做网站电话手机开发者模式打开有什么影响
  • 上海免费网站建站模板毕节做网站优化
  • 影响网站建设的关键点手机网站制作app
  • 商务网站建设的流程深圳模板网站建设案例
  • 做中英文网站多少钱方维制网站
  • 做一个信息发布网站要多少钱开发小程序多少钱一个
  • 山东网站设计网站关键词设置技巧
  • 做网站服务怎么赚钱产品展示型的网站功能有哪些
  • 丹东网站制作宁波网站建设公司制作网站
  • 南宁建设工程质量网站九江网站建设九江
  • 永州市住房和城乡建设厅网站服务器可以做几个网站
  • 哪里学网站建设与管理做移动端电影网站
  • 境外企业网站推广大冶市建设局网站
  • 户网站建设的不全.阿里巴巴国际站
  • 定制手机壳的网站能在家做的兼职的网站
  • 温州营销型网站建设郴州网络推广公司
  • asp.net 做网站源代码网站怎么做配置文件夹