zoukankan      html  css  js  c++  java
  • 聊聊HDFS和Ozone的融合

    前言


    Ozone的出现的初衷就是要解决HDFS namespace的扩展性问题,那么现在问题了,未来如何将这两大从设计上上来已经完全大改变的系统整合起来呢?这个听起来非常有意思,本文笔者结合最近社区的一些讨论,来简单聊聊这个话题。

    Ozone的核心结构


    社区在设计Ozone的时候,提出了一个具有关键性意义的概念:Storage Container。而不是HDFS中的块(block)概念。二者的关系是:Storage Container对外提供块服务。而Storage Container由底层存储向外提供服务,它可以支持不同的上层系统。所以Ozone的结构是这样的:


    有人会说了,将block块服务剥离开来真的有这么重要吗?答案是非常重要。如果大家维护过拥有大规模数量级块的HDFS集群,一定经历过很多很多大大小小的问题。比如说以下几点:

    • 大量的块导致NameNode维护的blockMap异常庞大,耗费内存。
    • 每次涉及到块更新的操作都会持有一个全局锁,导致系统平均RPC的延时会提高,触发GC更频繁。
    • 块规模的变大,在很多操作上会遇到瓶颈,快照,块汇报,等等。

    而在Ozone中,SCM只负责维护这些Container信息。原先的block report就会变成container report。此时的关系变为:

    KSM: object —> block
    SCM: block —> container

    在上图中,我们看到的是1对1的关系,在未来Ozone会支持到多对多的关系,类似与目前HDFS的Federation。


    如何在Ozone上构建HDFS


    Ozone既然已经出现了,现在我们如何把现有HDFS移植到Ozone之上。比如达到下面的架构,这样就充分利用了新设计的架构体系。


    在这里,我们需要一个关键的实现:Ozone FS,Ozone内部提供的文件系统接口。以此将新的数据写出到Ozone FileSystem,Ozfs完全兼容现有的hdfs路径格式和读取方式,可以给Spark、Hive程序使用。通过现有文件操作兼容API,可以将数据从老的HDFS转移到Ozone中。这步操作实质做的改动:将全存入内存的namespace数据移到了k-v存储的namespace中。相比于之前内存式的查询读取,K-V存储下查询的操作就变为了IO scan的方式了,效率上还是会有所影响。可能在未来,再进一步优化,只保留工作集的数据在内存中,达到新HDFS的状态结果。


    当然,要想让现有HDFS更加平滑地构建于Ozone之上,还需要很多的工作需要去做。

    参考资料


    1.https://issues.apache.org/jira/secure/attachment/12895963/HDFS%20Scalability%20and%20Ozone.pdf

  • 相关阅读:
    font-weight 导致iconfont显示有问题和糊
    compositionstart与compositionend解决组合文字输入问题
    工具函数 createOnceHandler 只执行一次的事件绑定
    redis的基本数据类型
    dubbo服务的发布和调用
    Dubbo介绍和服务架构分析
    spring的事务配置方法
    [已解决] java.net.ConnectException: Connection refused: no further information
    [已解决] 点击 【Show in system explorer】Eclipse卡死,未响应
    [已解决] java.lang.ClassNotFoundException: org.apache.jsp.WEB_002dINF.com.yourproject.test_jsp
  • 原文地址:https://www.cnblogs.com/bianqi/p/12183653.html
Copyright © 2011-2022 走看看