返回顶部
首页 > 资讯 > 精选 >Router-Based HDFS Federation在滴滴大数据中如何应用
  • 216
分享到

Router-Based HDFS Federation在滴滴大数据中如何应用

2023-06-02 17:06:52 216人浏览 独家记忆
摘要

这篇文章给大家分享的是有关Router-Based hdfs Federation在滴滴大数据中如何应用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、背景HDFS 的 Master/Slave 架构,使得其具

这篇文章给大家分享的是有关Router-Based hdfs Federation在滴滴大数据中如何应用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

一、背景

HDFS 的 Master/Slave 架构,使得其具有单点瓶颈,即随着业务数据的大规模膨胀,Master 节点在元数据存储与提供服务上都会存在瓶颈。为了克服 HDFS 单点瓶颈存在的扩展性、性能、隔离问题,社区提出了Federation(https://issues.apache.org/jira/browse/HDFS-1052 )方案来进行解决。

但是使用该方案之后,暴露给客户的问题就是,同一个集群出现了多个命名空间(namespace),客户需要知道读写的数据在哪个命名空间下才可以进行操作。为了解决统一命名空间的问题,社区提出了基于客户端(client-side)的解决方案 ViewFS(Https://issues.apache.org/jira/browse/hadoop-7257 ),该方案会在客户端做好配置,用户目录一对一的挂载到具体的命名空间目录上,滴滴在解决 Federation 问题时使用的就是这个方案。

ViewFS 方案也存在一些问题:

  • 对于已经发布出去客户端升级比较困难;

  • 对于新增目录需要增加挂载配置,与产品对接,维护起来比较困难。

社区在 2.9 和 3.0 版本中发布了一个新的解决统一命名空间问题的方案 Router-Based Federation(https://issues.apache.org/jira/browse/HDFS-10467 ),该方案是基于服务端进行实现的,在升级管理方面比较好维护,滴滴最近引入了该方案,并进行了一些改造。

二、Router-Based Federation 方案介绍

Router-Based Federation 对外提供了 Router 服务,包含在 Federation layer 中,如下图所示。这个 Router 服务将允许用户透明地访问任何子集群,让子集群独立管理自己的 Blockpool。为了实现这些目标,Federation layer 必须将 Block 访问引导至适当的子群集。同时,它具有可扩展性,高可用性和容错性。

Router-Based HDFS Federation在滴滴大数据中如何应用

Federation layer 包含多个组件。Router 是一个与 Namenode 具有相同接口的组件,根据 State Store 的元数据信息将客户端请求转发给正确的子集群。State Store 组件包含了远程挂载表(具有 ViewFS 特性,但在客户端之间共享)和有关 SubCluster 的负载/空间信息。

下图架构中显示每个子集群增加了 Router(标记为“R”)和逻辑集中式(但物理分布式)的状态存储(State Store),以及每个 SubCluster 的 Namenodes(“NN”)和 Datanodes(“DN”)。这种方法与 YARN Federation(YARN-2915)具有相同的架构。

Router-Based HDFS Federation在滴滴大数据中如何应用

2.1 Router 组件

系统中可以有多个的 Router,每个 Router 有两个角色:

  1. 向客户端提供一个全局 Namenode 接口并负责转发请求正确的子群集中的 Active Namenode;

  2. 在 State Store 中维护关于 Namenode 的信息。

Router 在收到客户端请求,根据 mount-table 中的信息查找正确的子集群,然后转发对该集群请求到对应子集群 Active Namenode。在收到 Active Namenode 的响应结果之后,将结果返回给客户端 。 为了提升性能,Router 可以缓存远程挂载表条目和子集群的状态。

对于 Namenode 信息的维护,Router 定期检查一个 Namenode 的状态和向 State Store 报告其高可用性(HA)状态和负载/空间状态。 为了提高 Namenode HA 的性能,Router 使用 State Store 中的高可用性状态信息,以将请求转发到最有可能处于活动状态的 Namenode。

2.1.1 可用性与容错性

Router 是无状态的,所有 Router 同时提供服务。如果某个 Router 变成不可用,不影响其他任何 Router 提供服务。

客户端配置他们的 DFS HA 客户端(例如 ConfiguredFailoverProvider 或 RequestHedgingProxyProvider)与 Federation 中的所有 Router 配合使用。

为了实现高可用性和灵活性,多个 Router 可以监控相同的 Namenode 并把心跳发送信息到 State Store。 如果 Router 出现故障,这会增加信息的恢复能力。

2.1.2 Safe Mode

如果 Router 不能连接到 State Store,它可能会错误地提供过期 locations 的访问,让 Federation 进入不一致的状态。

为防止这种情况发生,当 Router 无法连接到 State Store 一段时间后,它会进入安全模式(类似于 Namenode 的 safe mode)。当客户端尝试访问 safe mode 的 Router 时候,会抛出异常,客户端的 Proxy 捕获后,会尝试连接其他的 Router。类似于 Namenode,Router 保持在这个安全模式,直到它确定 State Store 可用为止。

这可以防止 Router 启动时出现不一致。 假定一个 Router 如果在一段时间内没有心跳(例如,心跳间隔的五倍),则它已经死亡或处于安全模式。

2.1.3 交互接口

为了与用户和管理员进行交互,Router 公开了多个接口。包括 rpc、Admin、WEBUI 。

RPC 实现了客户端与 HDFS 交互的最常见接口。 目前仅支持使用普通 mapReducesparkHive ( on Tez,Spark 和MapReduce)。一些高级特性,如快照、加密和分层存储在未来版本实现。 所有未实现的功能都会抛出异常。

Admin 为管理员实现的一个 RPC 接口,包括从子集群获取信息、添加/删除条目到 mout table。也可以通过命令行获取和修改 Federation 信息。WebUI 实现了一个可视化 Federation 状态,模仿了当前的 Namenode UI,除此之外,还包含 mout table,每个子集群的成员信息以及 Router 的状态。

2.2 State Store 组件

State Store 维护的信息包括:

  1. 子集群的块访问负载,可用磁盘空间,HA 状态等状态;

  2. 文件夹/文件和子集群之间的映射,即远程 Mount Table;

  3. Router 的状态。State Store 的后端存储是可配置的。 既可以可以存储在文件中,也可以存在 ZooKeeper 中。

2.2.1 Membership

Membership 反映了 Federation 中的 Namenode 的状态。包括有关子集群的信息,例如存储量和节点数量。Router 定期检测一个或多个 Namenode 的信息。

2.2.2 Mount Table

管理文件夹和子集群之间的映射。 它与 ViewFS 中的 Mount Table 类似:hdfs://tmp → hdfs://C0-1/tmp

2.2.3 Router State

为了跟踪 Router 中 caches 的状态,Router 将其版本信息、状态信息等存储在 State Store 中。

2.3 未来计划

目前 RBF 只是实现了一些基本 Namenode 接口,有些接口并不支持,HDFS-13655(https://issues.apache.org/jira/browse/HDFS-13655 )中会实现一些不支持的协议接口;当前 RBF 的稳定性也还存在一些问题,HDFS-13891(https://issues.apache.org/jira/browse/HDFS-13891 )会跟踪一些稳定性问题进而解决掉。

三、Router-Based Federation 在滴滴的应用

3.1 部署情况

社区 Hadoop 在 2.9 和 3.0 中发布了 RBF 这个 Feature,滴滴目前的 Hadoop 版本是 2.7.2,我们的做法是将 branch-2 分支里关于 RBF 的提交都移植到了我们的代码中,做了一些必要的修改工作。

在滴滴的大数据集群中,Federation 拆成了 5 组 Namenode。经过性能测试,我们得出这样的结论:一个 Router 对应服务一组 Namenode 不存在压力,因此我们选择部署 5 个 Router 来服务整个集群。目前 Router-Based Federation 方案在滴滴已经稳定运行 2 月有余。

3.2 兼容性

直接引入 RBF 在运行 Hive 任务时会出现一些错误,例如 Wrong FS 等等。为此我们将 Hive 客户端代码做了修改,使其兼容 RBF。在 Hive 的元数据存储中,location 信息存储的是带HDFS Schema 的绝对路径信息,在 Hive 代码中处理 move 逻辑时,我们都会将路径做一个 resolve 得到实际的 HDFS 路径,然后再进行处理,这样可以避免该问题的出现。

3.3 RBF 社区贡献

在实际测试中,我们也发现了 RBF 的一些性能问题和 BUG,包括 Quota 问题、mount-table cache 使用不当问题、mount-table 创建 znode 出现  Null 问题等等。在解决这些问题之后,将 patch 贡献给了社区,大部分被社区接收,具体修复和优化如下:

  • HDFS-13710:https://issues.apache.org/jira/browse/HDFS-13710

  • HDFS-13821:https://issues.apache.org/jira/browse/HDFS-13821

  • HDFS-13836:https://issues.apache.org/jira/browse/HDFS-13836

  • HDFS-13844:https://issues.apache.org/jira/browse/HDFS-13844

  • HDFS-13845:https://issues.apache.org/jira/browse/HDFS-13845

  • HDFS-13854:https://issues.apache.org/jira/browse/HDFS-13854

  • HDFS-13856:https://issues.apache.org/jira/browse/HDFS-13856

  • HDFS-13857:https://issues.apache.org/jira/browse/HDFS-13857

  • HDFS-13802:https://issues.apache.org/jira/browse/HDFS-13802

  • HDFS-13852:https://issues.apache.org/jira/browse/HDFS-13852

  • HDFS-14114:https://issues.apache.org/jira/browse/HDFS-14114

感谢各位的阅读!关于“Router-Based HDFS Federation在滴滴大数据中如何应用”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: Router-Based HDFS Federation在滴滴大数据中如何应用

本文链接: https://www.lsjlt.com/news/230743.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Router-Based HDFS Federation在滴滴大数据中如何应用
    这篇文章给大家分享的是有关Router-Based HDFS Federation在滴滴大数据中如何应用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、背景HDFS 的 Master/Slave 架构,使得其具...
    99+
    2023-06-02
  • PL/SQL在大数据处理中如何应用
    在大数据处理中,PL/SQL可以作为数据处理和分析的工具来帮助实现数据的插入、更新、删除和查询操作。PL/SQL可以与大数据处理平台...
    99+
    2024-05-08
    PL/SQL
  • 如何理解Kubernetes在大数据的应用
    本篇内容介绍了“如何理解Kubernetes在大数据的应用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!&...
    99+
    2024-04-02
  • 大数据索引在PHP中的应用前景如何?
    随着互联网的迅速发展,数据量的增长速度越来越快。这就给数据的存储和检索带来了巨大的挑战。为了解决这个问题,我们需要一个高效的索引机制。大数据索引就是一个非常好的解决方案。 PHP作为一种广泛使用的编程语言,也可以利用大数据索引机制来提高数据...
    99+
    2023-06-15
    大数据 unix 索引
  • 中小企业如何应用大数据
    中小企业可以通过以下几个步骤应用大数据:1. 收集数据:中小企业可以通过各种途径收集数据,包括客户信息、销售数据、供应链数据等。可以...
    99+
    2023-10-11
    大数据
  • 如何在ASP中应用编程算法处理大数据?
    ASP是一种流行的Web应用程序开发技术,它能够帮助程序员轻松地处理大数据集。在本文中,我们将介绍如何在ASP中应用编程算法处理大数据。 一、什么是编程算法? 编程算法是一组计算机程序,用于解决特定问题的数学或逻辑方法。这些算法涉及数学、统...
    99+
    2023-10-04
    响应 大数据 编程算法
  • Git中的大数据如何在PHP中得到响应?
    Git是一个非常流行的分布式版本控制系统,它被广泛应用于开源项目和企业级应用程序中。在Git中,大量的数据需要被处理和管理,这些数据包括代码文件、历史记录、分支、标签等等。在PHP中,我们需要使用一些技术和工具来处理Git中的大数据,以便得...
    99+
    2023-10-19
    响应 git 大数据
  • GO语言在大数据处理中的应用效果如何?
    随着大数据时代的到来,数据处理成为了企业和组织中最重要的任务之一。在这个领域中,GO语言已经成为了一种备受推崇的选择。本文将从几个方面来探讨这个问题。 一、GO语言的特点 GO语言是一种开源的编程语言,由Google公司开发。它是一种静态...
    99+
    2023-08-20
    大数据 自然语言处理 http
  • HDFS在大数据存储中与其他分布式文件系统的比较如何
    HDFS(Hadoop分布式文件系统)是一种针对大数据存储和处理的分布式文件系统,与其他分布式文件系统相比有以下一些特点和优势: ...
    99+
    2024-05-08
    HDFS
  • 如何在大数据时代应用Java函数进行数据处理?
    在当今的大数据时代,数据处理成为了一项非常重要的工作,而Java作为一门具有广泛应用的编程语言,其函数库也提供了大量用于数据处理的函数,可以帮助我们更高效地进行数据处理。本文将介绍如何在大数据时代应用Java函数进行数据处理,并提供相关演示...
    99+
    2023-09-15
    函数 教程 大数据
  • 大数据处理中常用的算法在PHP编程中如何应用?
    大数据处理是当今信息时代中的一个重要课题,随着互联网技术的飞速发展,数据量的急剧增加,如何高效地处理这些数据已经成为了众多企业和机构关注的焦点。而在大数据处理中,算法是一个至关重要的因素,能够帮助我们更加高效地处理和分析数据。在本文中,我们...
    99+
    2023-11-11
    编程算法 大数据 javascript
  • ASP应用程序如何响应大数据?
    随着互联网时代的到来,大数据成为了一个十分热门的话题。大数据的应用范围越来越广泛,如何处理大数据也成为了一个亟待解决的问题。在ASP应用程序中,如何响应大数据呢? 一、优化数据库查询 对于ASP应用程序而言,数据库查询是必不可少的一部分。...
    99+
    2023-10-04
    响应 大数据 编程算法
  • Python ORM 在大数据项目中的应用
    对象关系映射(ORM)是一种编程技术,允许开发人员使用对象编程语言来操作数据库,而无需直接编写 SQL 查询。Python 中的 ORM 工具(例如 SQLAlchemy、Peewee 和 Django ORM)简化了大数据项目的数据库交...
    99+
    2024-03-15
    ORM
  • Python如何在自然语言处理中应用大数据路径?
    自然语言处理(Natural Language Processing, NLP)是计算机科学和人工智能领域的一个分支,它研究如何让计算机理解和处理人类语言。在NLP领域中,大量的数据是必不可少的。如何高效地处理和利用这些数据,成为了NLP...
    99+
    2023-06-06
    自然语言处理 大数据 path
  • 如何在Spring大数据应用程序中优化Python重定向?
    在Spring大数据应用程序中,Python脚本经常被用来进行数据处理、清洗和转换。然而,在处理大量数据时,Python脚本可能会变得非常缓慢,这可能会导致应用程序的性能问题。其中一个解决方案是使用Python的重定向功能来优化脚本的性能。...
    99+
    2023-08-24
    重定向 spring 大数据
  • 如何在Javascript编程中应用算法来处理大量数据?
    在现代互联网时代,数据处理已经成为了一项非常重要的任务,无论是大型企业还是小型公司,都需要处理大量的数据。而Javascript作为一种非常流行的编程语言,其在数据处理方面也有着不可忽视的作用。在这篇文章中,我们将会介绍如何在Javascr...
    99+
    2023-11-11
    编程算法 大数据 javascript
  • Python重定向:如何在Spring大数据应用程序中应用最佳实践?
    在Spring大数据应用程序中,Python脚本是常用的数据处理工具。但是,Python的输出可能会影响应用程序的性能和稳定性。为了避免这种情况,我们需要学习如何在Spring大数据应用程序中应用Python重定向的最佳实践。 Pytho...
    99+
    2023-08-24
    重定向 spring 大数据
  • PHP如何响应Git中的大数据?
    PHP作为一门流行的服务器端编程语言,其在开发中的应用越来越广泛。Git作为一个分布式版本控制系统,也被广泛应用于软件开发中。但在Git中,当处理大量数据时,会导致PHP响应速度变慢,这给开发者带来了不便。本文将介绍如何优化PHP代码,以更...
    99+
    2023-10-19
    响应 git 大数据
  • 如何在PHP中使用大数据处理函数
    PHP是一种流行的开源脚本语言,常用于Web开发。随着大数据时代的到来,越来越多的开发人员需要使用PHP中的大数据处理函数来处理海量数据。本文将介绍如何在PHP中使用大数据处理函数。一、PHP中的大数据处理函数PHP中有许多用于处理大数据的...
    99+
    2023-05-19
    使用 PHP 大数据处理函数
  • 如何在 PHP 容器中实现高效响应大数据?
    PHP 是一种流行的服务器端编程语言,它被广泛用于构建 Web 应用程序。在处理大量数据时,PHP 容器可以成为瓶颈,影响应用程序的性能。在本文中,我们将探讨如何在 PHP 容器中实现高效响应大数据。 1. 了解 PHP 容器 在 PHP ...
    99+
    2023-06-15
    容器 响应 大数据
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作