好望角:让你的每次点击都有价值:byteclicks.com | 搜索引擎正在被AI污染信息源,中文优质信息越来越少了 |

Yandex开源EB级大数据平台

Yandex 分布式计算技术部门的负责人Maxim Babenko宣布已将YTsaurus平台作为开源软件发布。YTsaurus 是 Yandex 开发的关键基础设施大数据系统之一,以前称为 YT。

GitHub存储库包含 YTsaurus 的服务器代码、使用 k8s 的部署基础设施、系统的 Web 界面以及流行编程语言(如 C++、Java、Go 和 Python)的客户端 SDK。一切都是 Apache 2.0 许可的,这意味着任何人都可以下载和修改它以满足他们的需要。

 YTsaurus 开源版本中可用的主要技术功能,从低级存储到高级计算。

Yandex开源EB级大数据平台

Cypress:可靠高效的数据存储

任何大数据系统的核心都是各种日志、统计、索引等结构化或非结构化数据的存储。YTsaurus 建立在 Cypress 之上,Cypress 是一种基于树的容错存储,其功能可简要描述如下:

  • 以目录、表(结构化或半结构化数据)和文件(非结构化数据)为节点的树状命名空间
  • 将大型表格数据透明分片为块,允许将表格视为单个实体,而无需过多担心物理存储的细节
  • 支持表格数据的列式和行式存储机制
  • 支持使用各种编码编解码器的压缩存储,例如 lz4 和 zstd,具有不同的压缩级别
  • 支持使用具有不同冗余参数和允许丢失类型的不同控制和计算策略的各种擦除编解码器进行擦除编码
  • 支持分层类型和数据排序符号的表达性数据模式化
  • 后台复制和修复已擦除数据,无需人工干预
  • 支持嵌套事务和快照/共享/独占级别锁的事务语义
  • 可以影响许多Cypress对象并无限期持续的事务
  • 灵活的配额核算系统

Cypress 的核心是一个可复制且可水平扩展的主服务器,它存储有关 Cypress 树结构的元数据以及集群上所有表的块副本的组成和位置。主服务器被实现为基于 Hydra的复制状态机,Hydra是一种类似于Raft的专有共识算法。

YT 不仅支持执行 MapReduce 操作,还支持在集群上部署任意用户提供的代码。

在 YT 术语中,运行具有未指定副作用的任意代码是使用“普通”操作实现的。

动态 kv 存储表

MapReduce 范例实际上不适合构建具有亚秒级响应时间的交互式计算管道。问题不仅在于数据的处理方式,还在于数据的存储方式。

YT 的静态表,就像 HDFS 中的一组文件一样,可以作为 MapReduce 计算的输入和输出。但是,它们不能用于交互式场景,因为它们依赖于缓慢的持久存储介质。对于交互式场景,应用程序通常使用键值存储。它们可以水平扩展,同时提供低延迟的读写访问。

在 YT 中,您可以创建一个动态表作为 MapReduce 操作的结果,并将其用于基于键的快速搜索和插入。同时,您可以创建一个后台 MapReduce 进程,该进程处理来自动态表的数据样本并计算有关它的一些统计信息。

  • 在MVCC模型中存储数据。用户可以按键或时间戳查找值
  • 可扩展性:动态表被分成片(按键范围分片),由单独的服务器提供服务
  • 事务性:动态表是 OLTP 存储,可以更改来自不同表的不同分片中的许多行
  • 容错:服务于 tablet 的单个节点发生故障会导致该 tablet 移动到另一个节点而不会丢失数据
  • 隔离:服务于平板电脑的节点被分组到驻留在不同机器上的包中,确保负载隔离
  • 在单个键甚至单个值级别进行冲突检查
  • 来自 RAM 的热数据响应
  • 一种内置的类 SQL 语言,用于查询扫描和分析

除了具有kv存储接口的动态表外,系统还支持实现消息队列抽象的动态表,即主题和流。这些队列也可以被视为表,因为它们由行组成并具有自己的模式。在一个事务中,可以同时修改kv动态表和队列中的行。这使您可以在 YT 的动态表之上构建具有恰好一次语义的流处理。

YQL

YQL是一种基于SQL的查询语言;它是第一个构建在 YT 之上的高级原语。YQL 相对于 YT 的地位与 Hive 相对于 Hadoop 的地位大致相同。该技术允许用户在 SQL 中编写简单的查询,而不是使用自定义代码构建一系列 MapReduce 操作。

如今,许多大数据任务都可以简洁地表述为 SQL 查询。

YQL 的好处包括:

  • 一个强大的图形执行引擎,可以构建具有数百个节点的 MapReduce 管道并在计算期间进行自适应
  • 通过将子查询存储在变量中作为相关查询和事务链,能够使用 SQL 构建复杂的数据处理管道
  • 任何复杂性查询的可预测并行执行
  • 联接、子查询和窗口函数的高效实现,对其拓扑或嵌套没有限制
  • 丰富的函数库
  • 支持 C++、Python 和 JavaScript 中的自定义函数
  • 支持通过 CatBoost 和 TensorFlow 使用机器学习模型
  • 在准备好的计算实例上自动执行小部分查询,绕过 MapReduce 以减少延迟

CHYT

不用说,大多数读者都听说过 ClickHouse。2016 年,该 DBMS 成为 Yandex 开源技术的先驱,并证明非常成功,以至于在 2021 年成为一家名为 ClickHouse Inc 的独立公司。

如今,ClickHouse 是最流行的分析数据库之一,具有非常高效的基于列的执行引擎以及与 BI 系统的各种集成。ClickHouse 的一个很好的特性是源代码中存储和计算部分的良好分离,这使yandex能够在 2018 年构建 CHYT——ClickHouse 计算引擎与 YTsaurus 的集成作为存储。

在YTsaurus生态中,CHYT提供以下能力

  • 亚秒级延迟的 YT 静态表快速分析查询
  • 重用 YTsaurus 集群中的现有数据,而无需将其复制到单独的 ClickHouse 集群
  • 能够通过 ClickHouse 的本地 ODBC 和 JDBC 驱动程序集成(例如与第三方可视化系统)

充分利用 YTsaurus 和 ClickHouse 的全部潜力,即:

  • 支持读取静态和动态表
  • 部分支持 YTsaurus 事务模型
  • 支持分布式插入
  • 将柱状数据从内部 YTsaurus 格式高效转换为内存中的 ClickHouse 表示
  • 积极的数据缓存,在某些情况下允许只从实例内存中读取查询执行数据

ClickHouse 服务器代码在上述普通操作中运行,使用可用于 MapReduce 计算的相同计算资源。从这个意义上说,YTsaurus 集群相对于其中的 CHYT 集群充当计算云。

这使得不同的用户或用户团队可以在一个 YT 集群上运行多个 CHYT 集群,彼此完全隔离,以类云的方式解决资源分离的问题。

SPYT

2019 年,Yandex 推出了 SPYT,这是一个集成 Apache Spark 作为 YT 中存储数据的计算引擎的系统。与 CHYT 类似,vanilla YTsaurus 操作为 Spark 集群提供计算资源。Apache Spark 的设计初衷是为了方便连接第三方存储作为数据源。

SPYT 在 YTsaurus 生态系统中也很成熟。由于其与第三方系统的丰富集成能力,它是编写 ETL 流程的主要方式之一。在引擎盖下,Spark 使用灵活的分布式计算优化器,最大化中间数据的内存存储,并可以实现具有多个连接的计算管道。

YTsaurus 的技术方面

大多数服务器端代码是用 C++ 编写的。 服务器端代码是使用 clang 编译器和 CMake 构建系统构建的。

系统的各个部分是用 Go、Python 和 Java 编写的。还有一个 API 用于开发使用上述四种编程语言的 YTsaurus 的应用程序。

代码库自动与内部存储库同步。因此,外部始终可以获得最新版本的 YTsaurus。

YTsaurus 在 x86–64 Linux 上运行。

部署和管理

在 Yandex 中,安装了 20 多个 YTsaurus。它们的大小和配置差异很大,单个集群中有 5 到 20,000 台以上的主机。YTsaurus 还集成了多个内部 Yandex 系统,包括身份验证、访问控制、审计、监控、硬件管理和容器编排。所有这些系统使我们能够以最小的努力管理集群。

YTsaurus 是一个计算平台,因此隐含了用户代码的执行。为了运行和隔离不受信任的代码,YTsaurus 使用了由 Yandex 开发的容器化系统Porto 。对于多租户集群中的完全用户隔离,建议将 Porto 安装为Kubernetes CRI。这将打开 YTsaurus 的全部功能,用于作业隔离和在不同操作中使用自定义环境。

当然,如果没有可观察性工具——日志记录、定量监控和跟踪,大型分布式系统的运行是不可能的。YTsaurus 编写用于审计和监控用户操作的结构化日志,以及用于更深入的问题诊断的详细调试日志。此外,系统支持Prometheus格式的metric导出和Jaeger gRPC协议的trace传递。

在 YTsaurus 之上可以构建什么?

让我们看一下系统在 Yandex 上的使用情况。

YTsaurus 最具启发性和典型的用例之一是创建 DWH。例如,来自 Yandex Taxi、Yandex Eats、Yandex Deli 和 Yandex Delivery 的订单以原始格式在 YTsaurus 动态表中接收,延迟极小。数据量达到每月数百 TB。

然后使用各种工具处理订单:例如,大多数分析数据集市都是使用 YQL 和 SPYT 准备的。总数据量超过6PB。CHYT 用于临时分析,各种可视化在 Yandex DataLens 中创建。Yandex Market、Yandex Music 和 Yandex Travel 等其他 Yandex 服务也存在类似的用例。

还有非常具体的用例。例如,所有三台Yandex 超级计算机都由 YTsaurus 调度程序管理。许多具有不同类型 GPU 的节点都连接到 YT,并分布在不同的池树中。这允许用户明确指定所需的 GPU 模型并使用 YTsaurus 中存储的数据。

目前,YTsaurus 中的动态表存储着 PB 级的数据,大量的交互服务建立在它们之上。

上一篇:

下一篇:


标签