写点什么

Facebook 如何使用 Avartarnode 提升 HDFS 可靠性

  • 2012 年 8 月 27 日
  • 本文字数:1501 字

    阅读完需:约 5 分钟

在不久前的 Hadoop 峰会上,Facebook 的工程师 Andrew Ryan 分享了他们如何使用 Namenode 和 Avatarnode 提升 HDFS 可靠性的方法。Ryan 从 2009 年开始,就参与到了 Facebook 的 Hadoop 开发中。在他的帮助下,Facebook 的 Hadoop 和 HDFS 数据基础设施,从一个数据中心的单个 600TB 集群,发展到了多个数据中心超过 100 多个 HDFS 集群。

Ryan 首先分析了 HDFS 的 Namenode 机制。

图:Namenode,单点故障点

在 HDFS 中,客户端通过 Namenode 服务器完成文件系统的元数据操作,并与一个 Datanode 池通信,以发送和接受文件系统数据。数据在多个 Datanode 上都有复制,因此一个 Datanode 宕机不会出现数据丢失,对集群也不应是致命问题。

但是 Namenode 就不是这样,所有的元数据操作都要通过它完成。如果 Namenode 不可用,任何客户端就无法从 HDFS 完成读写操作,虽然客户端仍可以从 Datanode 中读出单个数据块,但是整个 HDFS 就处于宕机状态,所有依赖于 HDFS 的用户和应用就无法正常工作。

因此,HDFS Namenode 是一个单点故障点(SPOF)。

Ryan 指出:在 Facebook,他们希望知道这个问题的影响范围,并尝试找出解决这个问题的方法。

Data Warehouse 是 Facebook 最大的 HDFS 部署之一,他们用其完成传统的 HadoopMapReduce 工作:有一些非常大的集群运行 MapReduce 批处理。由于集群很大,Namenode 的负载非常高,CPU、内存、磁盘和网络都常常处于很大的压力之下。他们的统计发现:在 Data Warehouse 发生的问题中,41% 是由 HDFS 造成的,这也是最大的问题肇因。

Ryan 接下来指出:如果能有某种高可用的 Namenode 方案,也许能防止 10% 的 Data Warehouse 问题和突发的宕机时间,这仍然是一个巨大的胜利,因为这让他们可以执行计划好的软件与硬件维护操作。实际上,他们估计这可以减少他们 50% 计划好的宕机时间,而之前在这些时间里集群都是不可用的。

下图是他们的高可用 Namenode HDFS 架构的简化版本。

图:高可用的 Namenode

在这个架构中,客户端可以与 Primary Namenode 或是 Standby Namenode 通信,Datanode 也可以向这两个服务器发送块报告,实现了高可用的 Namenode——Avatarnode。

Ryan 提到:Facebook 在两年前就开始研究 Avatarnode。现在,这已经是一个开源项目,提供高可用的 Namenode,支持热切换。目前,在 Facebook 中,Avatarnode 已经进入生产环境,并运行在他们最大的 Hadoop Data Warehouse 集群中。

Avatarnode 是一个双节点的、高可用的 Namenode,需要手工完成故障切换。它将现有的 Namenode 代码包装在一个 Zookeeper 层中。Avatarnode 的基本概念包括:

  • Primary Avatarnode 和 Standby Avatarnode 角色可互换。
  • 当前的 Primary Avatarnode 主机名保存在 Zookeeper 中。
  • 修改后的 Datanode 的块报告要同时发送给 Primary Avatarnode 和 Standby Avatarnode。
  • 修改后的 HDFS 客户端在开始每次事务前,要检查 Zookeeper,如果以此事务失败,要再次检查 Zookeeper。即使 Avatarnode 发生故障切换,一次写操作也可以得以完成。

图:客户端视角

图:Datanode 视角

Ryan 指出:接下来,他们要进一步提升 Avatarnode,并将其整合在一个通用的高可用框架中,使之能够完成不需人工参与的、自动化的、安全的故障切换。

读者可以访问 GitHub 上 Facebook 发布的 Hadoop 版本,其中包括 Avatarnode 源代码。

除了 Facebook 之外,还有其他公司也致力于解决这个问题,包括:

InfoQ 的读者,不知道您对如何解决 Namenode 高可用问题有何意见和看法?欢迎在评论中分享您的经验。

2012 年 8 月 27 日 20:122167
用户头像

发布了 479 篇内容, 共 134.4 次阅读, 收获喜欢 37 次。

关注

评论

发布
暂无评论
发现更多内容

我看JAVA 之 基本数据类型与封装类型

awen

Java 源码 基本数据类型

多年阅读《经济学人》是一种什么体验?

wbliu85

第十二周 作业

简简单单

涨薪50%,从小厂逆袭快手 - 附面经

haxianhe

面试

从萧何进入咸阳丞相府到数字化时代的决策

数列科技杨德华

28天写作

智能客服+智能助手,这波“数字员工”的业务能力太强了!

华为云开发者社区

华为 AI 数字 智能客服 智能助手

推荐程序员平时使用最多的绘图软件!!!

秦怀杂货店

软件 流程图 绘图

金融数字化转型浪潮呼啸而来 大数据区块链落地场景全面开花

CECBC

金融

写给 Go 初学者的指北

Rayjun

Go 语言

LiteOS:SpinLock自旋锁及LockDep死锁检测

华为云开发者社区

死锁 LiteOS 自旋锁 SpinLock LockDep

2021突击金三银四必备:BAT1000Java面试真题合集!

比伯

Java 编程 架构 面试 计算机

GitHub上连夜被下架!阿里巴巴2021版JDK源码笔记(2月第三版)

Java架构追梦

Java 阿里巴巴 面试 jdk源码 金三银四

我看JAVA 之 Class

awen

Java 源码 jdk class

Linux入门篇 —— Linux 用户与组管理详解(system-config-users && 命令行)

若尘

Linux 命令行 用户

探索图神经网络的网络架构和训练方法

华为云开发者社区

神经网络 AI 图神经网络 网络架构 GNNs

第十二周 学习总结

简简单单

公链,区块链的未来和归宿

CECBC

区块链

如何探索自己的职业价值观,让工作更有动力

一笑

28天写作

Linux常见IO分析工具

运维研习社

《经济学人》2021年2月27日刊精彩文章导读及资源下载

wbliu85

双指针高频面试题:「三数之和」的姐妹篇 ...

宫水三叶的刷题日记

面试 LeetCode 数据结构与算法

观点 | 破解云管理平台在数据中心管理体系中定位模糊的困局

BoCloud博云

云计算 PaaS 服务目录 多云管理平台 数据中心管理

程序员成长第十四篇:做好时间管理(二)

石云升

程序员 时间管理 28天写作 2月春节不断更

前端170面试题+答案学习整理(良心制作)

魔王哪吒

程序员 面试 大前端 28天写作 2月春节不断更

如何学习一项技能

不在调上

我看JAVA 之 Annotation

awen

Java 源码 jdk 注解 annotation

万绿丛中一点红——雷斯多夫效应

Justin

心理学 交互设计 28天写作 游戏设计

我看JAVA 之 Thread & ThreadLocal

awen

Java 源码 多线程

我看JAVA 之 枚举类型

awen

Java 源码 jdk 枚举

深入解读华为云细粒度文本情感分析及其应用

华为云开发者社区

AI 华为云 情感分析 语言语义 文本情感分析

Enterprise Tech30(2021)

行人23

Tech ET30

Facebook如何使用Avartarnode提升HDFS可靠性-InfoQ