Uber 如何优化其 Hadoop 集群

今天我们要讲的是

  • Uber 如何使用 HDFSUber 运行着世界上最大的 HDFS 集群之一,拥有 EB 级数据和数千个节点。 我们将深入研究他们面临的扩展问题以及他们提出的解决方案。

    • Hadoop分布式文件系统及其架构简介

    • 有关 Uber HDFS 集群的详细信息

    • HDFS Balancer 的数据倾斜问题

    • 通过更改 DataNode 配置设置、改进 HDFS Balancer 算法并添加更多可观察性来修复问题

  • 原子习惯的原则 – 《原子习惯》是一本很棒的书,讲述了如何建立积极的习惯和摆脱消极的习惯。 它为行为改变提供了一个全面的框架,是我读过的最有影响力的书之一。

    • 让好习惯变得明显且有趣

    • 消除良好习惯中的任何摩擦,并使它们令人满意

    • 颠倒“行为改变四法则”改掉坏习惯

  • 技术片段

    • 如何为您的公司创建良好的内部文档

    • 更好地提供反馈(对于经理

    • Photoshop 如何处理内存太大的文件

    • Netflix 如何测试他们的代码的回归

您可能知道 Brave 是一款拦截广告、注重隐私的网络浏览器。 但是,您知道吗,Brave 还拥有增长最快的之一, 独立的 那里有搜索引擎?

现在,他们发布了 Brave Search API,这是一种将此搜索引擎合并到您的应用程序中并将您的 AI 连接到网络的绝佳方式。

也许您想构建一个机器人,它可以查看您投资组合中股票的最新头条新闻,并在出现重要情况时向您发送短信提醒。 或者找到所有最新的新闻标题并使用 GPT-4 向您发送文章摘要,而无需点击诱饵。

您可以使用 Brave Search API 在一个周末内构建这两个项目以及数百个其他想法!

  • 价格实惠 – 与其他大型科技选项相比,它更便宜且更容易设置。 因此,它非常适合从小型项目到大型应用程序的所有内容。

  • 高质量 – Brave 的索引包含真实人物的网站 实际上 访问。 没有垃圾或标题诱饵农场,没有 SEO 垃圾邮件,并且有更多的人类数据集。

  • 便于使用 – 设置快速且简单。 数据经过结构化处理,可在从 NLP 到复杂分析的各种应用程序中轻松实现。

  • 它很快 – API 针对低延迟进行了优化,因此非常适合响应式搜索或聊天机器人等实时应用程序。

您每月可以免费使用该 API 最多 2,000 次查询。

Uber 是全球最大的乘车共享公司,到 2023 年完成的出行次数将超过 100 亿次。

他们还维护着世界上最大的 HDFS(Hadoop 分布式文件系统)部署之一,跨数十个​​集群存储 EB 级数据。 他们最大的 HDFS 集群存储数百 PB 数据并拥有数千个节点。

如此规模的运营带来了许多挑战。 Uber 面临的一个问题是 HDFS 平衡器,它负责在集群中的 DataNode 之间均匀地重新分配数据。

我们首先将简要概述 HDFS 及其工作原理。 然后,我们将探讨 Uber 在扩展集群时遇到的问题以及他们实施的解决方案。 有关 Uber 经验的更多详细信息,您可以阅读他们上周发布的博客文章。

如果您想记住我们在本文中讨论的概念,请查看 奎斯特专业版

您将获得有关过去 Quastor 文章中涵盖的所有概念的详细空间重复 Anki 闪存卡。 闪存卡涵盖了负载平衡、网络协议、数据库等概念!

HDFS简介

Apache Hadoop 分布式文件系统(HDFS)是一种分布式文件系统,可以在商用机器上存储大量非结构化数据。 HDFS 充当数据湖,因此通常用于存储非结构化数据,例如日志文件、图像/视频内容、ML 数据集、应用程序二进制文件或基本上任何其他数据。

GFS的一些设计目标(HDFS 也从中汲取了灵感) 是

  • 高度可扩展 – 您应该能够轻松添加存储节点以增加存储空间。 文件应分割成小“块”并分布在许多服务器上,以便您可以有效地存储任意大小的文件。

  • 成本效益 – GFS 集群中的服务器应该是廉价的商品硬件。 您不应该在专用硬件上花费大量资金。

  • 容错 – 这些机器是商品硬件(即蹩脚)因此应该预料到会发生故障,并且集群应该自动处理它们。 如果存储服务器在凌晨 3 点发生故障,工程师不应该醒来。

HDFS 架构由两个主要组件组成: 名称节点数据节点

DataNodes 是负责存储实际数据的工作节点。 HDFS会将文件分割成大块(默认为 128 兆字节)并分发这些块(也称为块)跨数据节点。 每个块都会在多个 DataNode 之间复制,因此如果机器出现故障,您不会丢失数据。

NameNode 负责 HDFS 集群中的协调。 他们跟踪所有文件以及哪些文件块存储在哪些数据节点上。 如果 DataNode 发生故障,NameNode 将检测到该情况并将数据块复制到其他健康的 DataNode 上。 NameNode 还将跟踪文件系统元数据,例如权限、目录结构等。

HDFS Balancer 是生态系统中的一项重要工具。 这有助于您在 HDFS 集群中的所有 DataNode 之间平衡数据。 您将希望每个 DataNode 处理相似的负载量并避免任何热/冷 DataNode。

不幸的是,Uber 在 HDFS Balancer 方面遇到了问题。 我们将深入研究导致这些问题的原因以及他们如何解决这些问题。

Uber 的 HDFS 问题

HDFS Balancer 旨在将负载均匀分布到集群中的所有 DataNode 上。 然而,它在 Uber 的规模上并不奏效(他们最大的 HDFS 集群存储了数十 PB 的数据

与其他 DataNode 相比,一些 DataNode 变得倾斜并存储更多的数据。 数千个节点的磁盘利用率接近 95%,但新添加的节点利用率不足。

发生这种情况有两个原因

  1. 突发写入流量 – 当数据写入突然激增时,HDFS Balancer 没有足够的时间来有效平衡数据分布。 这导致某些节点接收到不成比例的数据量。

  2. 坏节点退役 – Uber 频繁执行节点退役以进行硬件维护、软件升级、集群重新平衡等。 当DataNode退役时,其数据将被复制并移动到其他可用节点,以确保数据可用性和冗余。 然而,这种复制并没有有效地实现,并且它增加了数据节点之间的数据偏差。

这种数据偏差给 Uber 带来了严重问题。 高利用率的节点正在经历增加的 I/O 负载,这导致速度缓慢和更高的故障风险。 这意味着集群中健康节点的减少以及整体性能问题。

Uber 通过三种主要方式解决了这个问题:

  1. 更改 HDFS 配置属性

  2. 优化HDFS Balancer算法

  3. 增加可观察性

我们将讨论这三个方面。

HDFS 配置属性更改

Uber 团队修改了一些 DataNode 和 HDFS Balancer 配置属性,以帮助减少倾斜问题。

他们改变的一些属性是:

  • dfs.datanode.balance.max.concurrent.moves – 这决定了平衡过程中每个 DataNode 允许的并发块移动的最大数量。 Uber 增加了这一点,以便大量使用的 DataNode 可以同时将更多数据块传输到其他节点。

  • dfs.datanode.balance.bandwidthPerSec – 这设置每个 DataNode 可用于平衡的最大带宽(以字节/秒为单位)。 Uber 再次增加了这一点,以便 DataNode 在平衡过程中如果不堪重负,可以更快地传输块。

  • dfs.balancer.moverThreads – 这允许平衡器生成更多线程用于块移动,从而增强并行性和吞吐量。

优化HDFS Balancer算法

HDFS Balancer定期检查每个DataNode的存储利用率,并将数据块从使用率较高的节点移动到使用率较低的节点。

Uber 团队对其 HDFS 平衡器进行了一些算法改进,以减少集群中的数据倾斜。

一些改进是

  • 使用百分位数代替固定阈值 – 在寻找利用率较低的节点时,HDFS Balancer 使用固定阈值(例如,使用不到 30% 的磁盘空间。)问题在于,它没有找到足够的低利用率节点来满足此阈值。 Uber 团队对此进行了更改,使用百分位而不是固定阈值(磁盘使用率处于第 35% 的节点

  • 优先移动到占用较少的数据节点 – 原始的平衡算法平等地对待所有未充分利用的DataNode,而不考虑它们的相对利用率水平。 Uber 修改了算法,优先将数据移动到利用率最低的 DataNode

可观测性

Uber 还引入了新的指标和仪表板,以更好地了解优化后的 HDFS 平衡器的性能。 他们添加了 10 多个指标来帮助他们了解 HDFS Balancer 的工作原理并检查是否需要任何校准。

结果

通过 HDFS 平衡器的优化,Uber 能够将集群利用率从 65% 提高到 85%。 所有 DataNode 的使用率均保持在 90% 以下,并且平衡算法的吞吐量提高了 5 倍以上。

有了法学硕士和实时网络搜索,就有了 巨大的 您可以在周末启动许多新的应用程序可能性。

您可以构建一个旅行优惠查找器,在不同的航空公司和酒店中搜索最后一刻的优惠。 或者,您可以创建一个人工智能研究助理,扫描网络搜索结果并为您提供关键发现和方法。 您可以构建无数的副项目和应用程序。

Brave Search API 是一种通过快速 API 访问整个网络并在应用程序中使用搜索结果的简单方法。

  • 价格实惠 – 与其他大型科技选项相比,它更便宜且更容易设置。 因此,它非常适合从小型项目到大型应用程序的所有内容。

  • 高质量 – Brave 的索引包含真实人物的网站 实际上 访问。 没有垃圾或标题诱饵农场,没有 SEO 垃圾邮件,并且有更多的人类数据集。

  • 便于使用 – 设置快速且简单。 数据经过结构化处理,可在从 NLP 到复杂分析的各种应用程序中轻松实现。

  • 它很快 – API 针对低延迟进行了优化,因此非常适合响应式搜索或聊天机器人等实时应用程序。

您每月可以免费使用该 API 最多 2,000 次查询。

订阅 Quastor Pro,获取有关系统设计和后端工程概念的长篇文章。

往期文章内容包括

  • 衡量可用性

  • API网关

  • 数据库复制

  • 负载均衡

  • API范式

  • 数据库分片

  • 缓存策略

  • 事件驱动系统

  • 数据库一致性

  • 混沌工程

  • 分布式共识

  • 雷迪斯

  • Postgres

  • 卡夫卡

  • 动态数据库

  • 远程过程调用

  • 阿帕奇火花

  • HTTP协议

  • 域名系统

  • B 树和 LSM 树

  • 联机分析处理数据库

  • 数据库引擎

订阅时,您还将获得间隔重复 (Anki) 抽认卡,用于回顾过去 Quastor 文章中讨论的所有主要概念

《原子习惯》是一本关于通过微小改变来改变行为的精彩书籍。 如果你能改变每天的小习惯(例如,去健身房而不是看Netflix),那么这将在数月和数年内带来巨大的变化。

这本书依赖于行为改变的四个法则。

  1. 使其显而易见

    • 使用明显的线索来触发你想要的习惯 – 在您的环境中放置视觉提示,以提醒您要养成的习惯。 如果您想弹吉他,请将吉他放在桌子旁边。

    • 使用实施意图 – 准确计划何时执行新习惯。 请明确点。 不要只是说:“我会加强锻炼。” 相反,你可以说:“我每周一、周三和周五下午 6 点都会去公园跑步 30 分钟。”

    • 习惯叠加 – 将你的新习惯附加到现有习惯上。 如果你每天早上去星巴克喝咖啡,那么你可能会说:“我每天都会在星巴克花30分钟一边喝咖啡一边读一本技术书。”

  2. 让它有吸引力

    • 将你的习惯与积极的结果联系起来 – 关注新习惯的好处。 如果您想开始吃得更健康,那么请关注您将拥有多少能量以及您会感觉如何。

  3. 让它变得简单

    • 通过消除障碍来简化习惯 – 减少开始新习惯所带来的任何摩擦。 如果您想吃得更健康,请确保手边始终有足够的水果和蔬菜。

    • 使用“两分钟规则”开始 – 从一个只需不到两分钟即可完成的习惯开始。 如果您想开始阅读更多技术书籍,那么从每天阅读一页的初始目标开始。 慢慢积累更多。

  4. 让它令人满意

    • 奖励自己完成这个习惯 – 完成习惯后给自己一个小奖励。 这可能是一份小零食或额外的休闲时间。 积极的强化会让你更有可能重复这个习惯。

    • 利用社会责任来保持动力 – 找到一个致力于实现相似目标的责任合作伙伴,并与他们分享进展。

这些规则的伟大之处在于它们在以下方面也很有效: 停止不良习惯。 您所要做的就是反转它们。

如果你想停止某种行为,那么你应该

  1. 使其不可见

  2. 让它失去吸引力

    • 重新调整你的心态,强调避免这种行为的好处 – 如果您想戒烟,请关注不吸烟对健康的好处(提高运动表现、使皮肤更健康等)。

  3. 让它变得困难

    • 增加你和行为之间的步数 – 如果您想减少使用社交媒体的时间,请从手机中删除所有应用程序。 必须重新下载应用程序的额外麻烦有助于限制使用。

  4. 让它不令人满意

    • 建立习惯契约 – 与朋友签订正式协议,其中包括参与不良行为的后果。 如果您想戒烟,那么您可以同意每次吸烟时向您不支持的事业捐赠一定金额。

这些是《原子习惯》中的一些技巧。 如果您想了解更多信息,我强烈建议您查看这本书。

Leave a Reply

Your email address will not be published. Required fields are marked *

近期新闻​

编辑精选​