美文网首页
深度剖析 - 大规模集群下 Hadoop NameNode 如何

深度剖析 - 大规模集群下 Hadoop NameNode 如何

作者: alexlee666 | 来源:发表于2019-09-29 10:39 被阅读0次

    如果大量客户端对 NameNode 发起高并发(比如每秒上千次)访问来修改元数据,此时 NameNode 该如何抗住?

    一、问题分析

    以大量add新文件到DataNode为例,NameNode需要将【add文件】record写入到编辑日志edits log文件(磁盘文件)中,并将edits log同步到JournalNode中。

    • 【写磁盘】+【网络传输】都是非常耗时的操作,是制约系统性能的主要因素;
    • 若采用【多线程 + 加锁 + 每次写磁盘和网络传输】,那么NameNode肯定承受不住1000次/s的高并发请求;

    二、解决方案

    2.1 解决思路

    方案【多线程 + 加锁 + 每次写磁盘和网络传输】的问题在于,线程会出现阻塞,极大影响了效率。那么解决问题的方向就在于【如何让线程不阻塞】。

    2.2 HDFS的方案:【加锁 + 内存双缓冲 + 批量写磁盘和网络传输】

    2.2.1 加锁 + 内存双缓冲
    • 多线程抢占锁🔒,抢到的将record先写入到内存buffer中,随后释放🔒;
    • 写buffer和读buffer分离:内存缓冲区分为两部分,某一时刻,一部分用于写record到buffer中,另一部分用于将其中的records批量写入磁盘文件edits log或通过网络传输到JournalNode,互不阻塞;
    • 一个读写周期后,两部分的buffer会交换位置;
    • 将record写入内存buffer是非常快的,微秒级别吧;
    2.2.2 批量写磁盘和网络传输
    • 当buffer中的records累积到一定数量后,再将它们batch写入磁盘文件edits log或通过网络传输到JournalNode;
    • 减少磁盘IO和网络传输频次,以提高效率;
    【内存双缓冲 + 批量写磁盘和网络传输】

    参考:http://www.sohu.com/a/275932372_463994

    相关文章

      网友评论

          本文标题:深度剖析 - 大规模集群下 Hadoop NameNode 如何

          本文链接:https://www.haomeiwen.com/subject/tvwmuctx.html