Marmaray 正在参加 2021 年度 OSC 中国开源项目评选,请投票支持!
Marmaray 在 2021 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
2021 年度 OSC 中国开源项目评选 正在火热进行中,快来投票支持你喜欢的开源项目!
2021 年度 OSC 中国开源项目评选 >>> 中场回顾
Marmaray 获得 2021 年度 OSC 中国开源项目评选「最佳人气项目」 !
授权协议 MIT
开发语言 Java
操作系统 跨平台
软件类型 开源软件
开源组织 Uber
地区 不详
投 递 者 红薯
适用人群 未知
收录时间 2019-05-12

软件简介

Marmaray 是 Uber 开源的 Apache Hadoop 数据提取和分散框架。Marmaray 由我们的 Hadoop 平台团队设计和开发,是一个建立在 Hadoop 生态系统之上的基于插件的框架。用户可以新增插件以便从任何来源摄取数据,并利用 Apache Spark 将数据分散到接收器上。Marmaray 这个名字源于土耳其的一条连接欧洲和亚洲的隧道,在 Uber 内部,我们将 Marmaray 设想为根据客户偏好将数据从任何来源连接到任何接收器的管道。数据湖的数据通常在质量方面存在很大差异。Marmaray 可以确保所有摄取的原始数据都符合适当的源模式,保持高质量水平,从而带来可靠的分析结果。数据科学家可以将时间花在从这些数据中提取有用的见解上,而不是用来处理数据质量问题。

在 Uber,Marmaray 以聚合的方式连接各种系统和服务:

  • 通过我们的模式管理库和服务生成高质量的模式化数据。
  • 通过 Marmaray 的摄取组件将多个数据存储中的数据摄取到我们的 Hadoop 数据湖中。
  • 使用 Uber 的内部工作流程编排服务来构建管道,用以处理摄取的数据,以及根据这些数据保存和计算业务指标。
  • 将处理的结果提供给在线数据存储,内部客户可以通过 Marmaray 查询数据并获得近乎实时的结果。

图 1:Marmaray 将数据摄取到 Hadoop 数据湖中,并分散到数据存储中。

虽然 Marmaray 实现了任意数据源到任意数据槽的连接,但我们还需要构建一个自助服务平台,为来自不同背景、团队和技术专业知识的用户提供无缝的使用体验。

大规模数据摄入的挑战

Uber 的业务生成大量的原始数据,并将它们存储在各种数据源中,例如 Kafka、Schemaless 和 MySQL。我们需要将这些数据摄取到 Hadoop 数据湖中,以进行业务分析。随着 Uber 业务的垂直增长,数据摄取的规模呈现出指数级的增长。面对大规模数据可靠性的需求,我们不得不重新构建我们的摄取平台,以确保能够跟上公司增长的步伐。

图 2:随着 Uber 继续扩展全球业务,存储在 Hadoop 数据湖中的原始数据呈指数级增长。

之前的数据架构需要运行和维护多个数据管道,每个管道对应不同的生产代码库,随着数据量的增加,这些管道变得越来越繁琐。MySQL、Kafka 和 Schemaless 等数据源包含需要被摄取到 Hive 中的原始数据,以支持整个公司团队的各种分析需求。每个数据源都有自己的代码库和相关的复杂性,以及一组独有的配置、图表和警报。添加新的摄取源迫在眉睫,维护的开销要求我们的大数据生态系统支持所有这些系统。轮班待命的负担十分繁重,有时每周会收到 200 多个警报。

图 3:Hadoop 平台团队的轮班待命警报图表,可见维护系统需要多大的开销。

随着 Marmaray 的推出,我们将摄取管道整合到一个与源无关的管道和代码库中,以此来提高可维护性和资源利用率。

无论源数据存储是什么,单一摄取管道都将执行相同的有向非循环图作业(DAG)。在运行时,摄取行为将根据特定源(类似于策略设计模式)而有所变化,以协调摄取过程,并使用一种通用的灵活配置来适应未来不同的需求和用例。

Uber 的数据分散需求

我们的很多内部数据用户,例如 Uber Eats 和 Michelangelo 机器学习平台团队,他们使用 Hadoop 与其他工具来构建和训练机器学习模型,以生成有价值的衍生数据集,从而提高效率并改善用户体验。为了最大化这些衍生数据集的价值,需要将这些数据分散到在线数据存储中,这些数据存储通常要求比 Hadoop 生态系统低得多的延迟。

在引入 Marmaray 之前,每个团队都需要构建自己的临时扩散系统。这些重复性工作和不具有通用性的功能通常导致工程资源的极度浪费。Marmaray 于 2017 年底发布,以满足对灵活的通用分散平台的需求,它将 Hadoop 数据传输到任何一个在线数据存储,以此来完善 Hadoop 生态系统。

跟踪端到端数据传输

我们的很多内部用户需要保证将数据源的数据传输到目标接收器,他们还需要完整性指标,包括数据传输到最终接收器的可靠性。从理论上讲,这意味着数据被 100%传输到目的地,但实际上我们的目标是提供 99.99% 到 99.999%的可靠性。当记录数量非常少时,可以直接对源系统和接收器系统运行查询来验证数据是否已送达。

在 Uber,我们每天摄取数 PB 的数据和超过 1000 亿条消息,因此无法通过查询的方式进行数据验证。面对这么大规模的数据,我们需要一个能够跟踪数据传输而不会显著增加延迟的系统。Marmaray 通过自定义 Spark 累加器来桶分化记录,让用户能够以最小的开销监控数据传输。

Marmaray 的架构

下面的架构图说明了 Marmaray 的基本构建块和抽象。我们可以通过这些通用组件向 Marmaray 添加扩展,以便支持新的数据源和接收器。

图 4:Marmaray 的架构,包含各种组件。

DataConverters

摄取和分散作业主要对来自数据源的记录执行转换,以确保在将数据写入目标接收器之前具备所需格式。Marmaray 将多个转换器链接在一起执行多次转换,并且可以写入多个接收器。

DataConverters 的一个关键的作用是在转换时生成错误记录。为了保证分析结果更准确,所有原始数据在被摄入到 Hadoop 数据湖之前必须符合一定的模式。任何包含错误格式、缺少必需字段或被视为有问题的数据都将被过滤掉并写入错误表。

WorkUnitCalculator

Marmaray 按照批次来移动数据,批次大小是可配的。为了计算需要处理的数据量,我们引入了 WorkUnitCalculator 的概念。WorkUnitCalculator 将检查输入源的类型和之前的检查点,然后计算下一个工作单元或批次。工作单元可以是 Kafka 的偏移范围或 Hive/HDFS 的 HDFS 文件集合。

在计算下一批数据时,WorkUnitCalculator 还可以应用限流信息,例如,要读取的最大数据量或要从 Kafka 读取的消息数。这些限流信息可根据具体用例进行灵活配置,从而确保工作单元的大小不会压垮源系统或接收系统。

Metadata Manager

图 5:Marmaray 的 Metadata Manager 用于存储运行中作业的相关元数据。

所有 Marmaray 作业都需要一个持久存储(我们称之为 Metadata Manager)来缓存作业的元数据信息。作业可以在执行期间更新状态,并在作业执行成功后替换旧状态,否则将无法修改状态。在 Uber,我们使用 Metadata Manager 存储检查点信息(或 Kafka 的分区偏移量)、平均记录大小和平均消息数等元数据。元数据存储是通用的,可以存储任何相关的度量指标,这些度量指标可用于根据用例和用户需求跟踪、描述或收集作业的状态。

ForkOperator 和 ForkFunction

ForkOperator 使用 ForkFunction 将输入的记录流拆分为多个输出流,并验证符合模式的记录和错误的记录,然后可以单独处理这些记录。

图 6:ForkOperator 和 ForkFunction 用于将原始数据记录拆分为符合模式的记录和错误的记录。

ISource 和 ISink

ISource 包含工作单元所需的源数据信息,ISink 包含有关如何写入接收器的必要信息。例如,Cassandra 接收器可能需要包含集群、表、分区键和集群键的信息。Kafka 源需要包含主题名称、要读取的最大消息数、群集信息和偏移量初始化策略以及其他元数据信息。

数据模型和工作流

AvroPayload 是 Marmaray 架构的核心组件,它是 Avro GenericRecord 二进制编码格式的包装器,包含了需要处理的数据的元数据信息。

图 7:AvroPayload 使用元数据包装 GenericRecord。

Avro 数据(GenericRecord)的主要优点是它在内存存储和网络传输方面都很高效,与 JSON 相比,二进制编码数据通过线路发送需要更小的模式开销。在 Spark 架构之上使用 Avro 数据意味着我们还可以利用 Spark 的数据压缩和加密功能。这些优势有助于我们的 Spark 作业更有效地处理大规模数据。

为了支持连接任何数据源和任意接收器的架构,我们要求所有摄取源将转换器定义为从自己的格式到 Avro,所有分散接收器将转换器定义为从 Avro 到本地数据模型(对于 Cassandra 来说就是 ByteBuffers)。

要求所有转换器将数据转换为 AvroPayload 格式或从 AvroPayload 格式转换为数据为形成了松散耦合的数据模型。在定义了数据源及其相关的转换器后,就可以将数据分散到任何受支持的接收器,因为所有接收器都是源不可知的,它们只关心 AvroPayload 格式的数据。下图描绘了 Marmaray 的数据模型:

图 8:对于摄取和分散,Marmaray 要求将数据转换为 AvroPayload,这是一个基于 Avro 的 GenericRecord 格式的包装器。

下图描绘了 Marmaray 作业是如何独立于特定的数据源或接收器进行编排的。

图 9:Marmaray 独立于数据源或接收器运行摄取和分散作业。

在这个过程中,每个数据源和接收器的属性配置将指向作业的下一个步骤,包括计算需要处理的数据量(即其工作单元)、应用 ForkFunction 将原始数据拆分为“有效”和“错误”记录以确保数据的质量、将数据转换为适当的目标格式、更新元数据并报告指标以便跟踪进度。在 Uber,所有 Marmaray 作业都运行在 Apache Spark 上,并使用 YARN 作为资源管理器。

自助服务平台

由于我们的很多数据平台用户不熟悉我们的技术栈中所使用的语言(如 Python 和 Java),因此我们的团队必须构建一个自助服务平台,用户只需通过鼠标点击就可以建立端到端的管道,确保来自所需源的数据最终能够到达目标接收器,以便进行后续的分析工作和查询。

图 10:我们的自助服务 UI 让数据科学家和其他用户能够将数据从任何源移动到任何接收器,而无需了解特定的数据格式。

在上线之后的七个月时间里,已经有超过 3300 个作业通过我们的自助服务平台加入到我们的系统中。

数据删除

在 Uber,所有的 Kafka 数据都是以追加的方式进行存储,并使用了日期分区。用户数据可以跨越多个日期分区,并且每个分区通常会包含很多 Kafka 记录。如果底层存储没有内置的索引和更新支持,那么扫描和更新这些分区以便进行用户数据的更正、更新或删可能会非常耗费资源。Hadoop 使用的 Parquet 数据存储不支持索引,所以我们根本无法直接更新 Parquet 文件。为了便于索引和更新,Marmaray 使用了 Hadoop Updates 和 Incremental(Hudi),Uber 开发的另一个开源库,用于管理大型分析数据集的存储,将原始数据存储在 Hive 中。

数据生产者使用 Hive 来扫描数据表,识别要删除的记录,并将它们发布到 Kafka 集群。Marmaray 的 Kafka 摄取管道依次从 Kafka 集群中读取它们。然后,Marmaray 使用 Hudi 的批量插入功能摄取新记录,保持较低的摄取延迟,并使用 Hudi 的 upsert 功能处理更新的记录,将 Kafka 的旧记录替换为更新过的数据。

图 11:Marmaray 利用 Hudi 存储格式来支持数据删除。

Marmaray 的下一个篇章

Marmaray 对任意源到任意接收器数据管道的支持适用于 Hadoop 生态系统(主要针对使用了 Hive 的场景)以及数据迁移的各种用例。我们已经向开源社区发布了 Marmary,并期待收到更多反馈,然后不断改进 Marmaray 平台。与此同时,我们正在弃用传统管道,并将我们所有的工作流程迁移到 Marmaray 平台上,以简化我们的整体数据架构,并确保随着数据需求的增长,我们能够轻松地扩展。

介绍内容来自 InfoQ

展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论

点击引领话题📣 发布并加入讨论🔥
暂无内容
发表了博客
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
发表了问答
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
FasterXML jackson-databind代码问题漏洞
反序列化
FasterXML Jackson是美国FasterXML公司的一款适用于Java的数据处理工具。jackson-databind是其中的一个具有数据绑定功能的组件。 FasterXML jackson-databind 2.9.10.4之前的2.x版本中存在代码问题漏洞。该漏洞源于网络系统或产品的代码开发过程中存在设计或实现不当的问题。目前没有详细的漏洞细节提供。
CVE-2020-10968 MPS-2020-4658
2022-08-08 19:21
FasterXML jackson-databind 代码问题漏洞
反序列化
2.9.10.8 之前的 FasterXML jackson-databind 2.x 错误处理了与 com.newrelic.agent.deps.ch.qos.logback.core.db.DriverManagerConnectionSource 相关的序列化小工具和类型之间的交互。
CVE-2020-36189 MPS-2021-0212
2022-08-08 19:21
Apache Log4j SQL注入漏洞
SQL注入
根据设计,Log4j 1.2.x 中的 JDBCAppender 接受 SQL 语句作为配置参数,其中要插入的值是来自 PatternLayout 的转换器。消息转换器 %m 可能总是包含在内。这允许攻击者通过将精心制作的字符串输入到记录的应用程序的输入字段或标题中来操纵 SQL,从而允许执行意外的 SQL 查询。请注意,此问题仅在专门配置为使用 JDBCAppender(不是默认设置)时才会影响 Log4j 1.x。从 2.0-beta8 版本开始,重新引入了 JDBCAppender,适当支持参数化 SQL 查询,并进一步自定义写入日志的列。 Apache Log4j 1.2 已于 2015 年 8 月结束生命周期。用户应升级到 Log4j 2,因为它解决了以前版本中的许多其他问题。
CVE-2022-23305 MPS-2022-1444
2022-08-08 19:21
Apache Tomcat 安全特征问题漏洞
Apache Tomcat是美国阿帕奇(Apache)软件基金会的一款轻量级Web应用服务器。该程序实现了对Servlet和JavaServer Page(JSP)的支持。 Apache Tomcat中存在安全特征问题漏洞。攻击者可借助恶意的Web应用程序利用该漏洞绕过安全限制。以下版本受到影响:Apache Tomcat 9.0.0.M1至9.0.0.M9版本,8.5.0至8.5.4版本,8.0.0.RC1至8.0.36版本,7.0.0至7.0.70版本,6.0.0至6.0.45版本。
CVE-2016-5018 MPS-2017-9011
2022-08-08 19:21
FasterXML Jackson-databind服务器端请求伪造漏洞
SSRF
FasterXML Jackson是美国FasterXML公司的一款用于Java的数据处理工具。Jackson-databind是其中的一个具有数据绑定功能的组件。 FasterXML Jackson-databind 2.9.7之前的2.x版本中存在服务器端请求伪造漏洞,远程攻击者可利用该漏洞执行服务器端请求伪造攻击。
CVE-2018-14721 MPS-2019-0021
2022-08-08 19:21
FasterXML jackson-databind反序列化漏洞
反序列化
Fasterxml Jackson是美国 Fasterxml 公司的一款适用于 Java 的数据处理工具。jackson-databind 是其中的一个具有数据绑定功能的组件。 FasterXML jackson-databind存在安全漏洞。该漏洞源于进行了不安全的反序列化。远程攻击者可通过精心构造的恶意载荷通过利用该漏洞在系统上执行任意代码。
CVE-2020-24616 MPS-2020-11987
2022-08-08 19:21
FasterXML jackson-databind代码问题漏洞
反序列化
FasterXML Jackson是美国FasterXML公司的一款适用于Java的数据处理工具。jackson-databind是其中的一个具有数据绑定功能的组件。 FasterXML jackson-databind 2.9.10.5之前的2.x版本中存在安全漏洞。目前没有详细漏洞细节提供。
CVE-2020-14062 MPS-2020-8802
2022-08-08 19:21
Apache Thrift 资源管理错误漏洞
拒绝服务
Apache Thrift是美国阿帕奇(Apache)基金会的一个用于跨平台开发的框架。 该框架存在资源管理错误漏洞,使用 Thrift 的应用程序在收到声明容器大小大于有效负载的消息时不会出错。 因此,恶意 RPC 客户端可能会发送短消息,这将导致大量内存分配,从而可能导致拒绝服务。
CVE-2020-13949 MPS-2021-1609
2022-08-08 19:21
AWS SDK for Java 路径遍历漏洞
路径遍历
AWS SDK for Jav是一款适用于 Java 的 AWS 开发工具包。 AWS SDK for Java v1 的 AWS S3 TransferManager 组件中的downloadDirectory方法中存在部分路径遍历问题。该downloadDirectory方法允许调用者在对象键中传递文件系统对象,但在键名的验证逻辑中包含问题。攻击者可以通过在存储桶键中包含..来绕过验证逻辑。在某些情况下,这可能允许他们从 S3 存储桶中检索一个目录,该目录在其工作目录的文件系统中上一级。
CVE-2022-31159 MPS-2022-11189
2022-08-08 19:21
Apache Ant 信息泄露漏洞
将资源暴露给错误范围
Apache Ant是美国阿帕奇(Apache)基金会的一套用于Java软件开发的自动化工具。该工具主要用于软件的编译、测试和部署等。 Apache Ant 1.1版本至1.9.14版本和1.10.0版本至1.10.7版本中存在信息泄露漏洞。攻击者可利用该漏洞泄漏敏感信息。
CVE-2020-1945 MPS-2020-7418
2022-08-08 19:21
Netty Snappy资源穷尽漏洞
拒绝服务
Netty是Netty社区的一款非阻塞I/O客户端-服务器框架,它主要用于开发Java网络应用程序,如协议服务器和客户端等。 netty存在资源管理错误漏洞,该漏洞源于Snappy frame decoder函数不限制块长度,这可能会导致过度内存使用。
CVE-2021-37137 MPS-2021-28117
2022-08-08 19:21
FasterXML jackson-databind 代码问题漏洞
反序列化
FasterXML jackson-databind是一个基于JAVA可以将XML和JSON等数据格式与JAVA对象进行转换的库。Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json、xml转换成Java对象。 FasterXML jackson-databind 2.9.10.4之前的2.x版本中存在代码问题漏洞。攻击者可借助特制的输入利用该漏洞在系统上执行任意代码。
CVE-2020-11619 MPS-2020-5138
2022-08-08 19:21
FasterXML jackson-databind代码问题漏洞
反序列化
FasterXML Jackson是美国FasterXML公司的一款适用于Java的数据处理工具。jackson-databind是其中的一个具有数据绑定功能的组件。 FasterXML jackson-databind 2.9.10.5之前的2.x版本中存在安全漏洞。目前没有详细漏洞细节提供。
CVE-2020-14060 MPS-2020-8803
2022-08-08 19:21
Jetty输入验证漏洞
密码学问题
Jetty是Eclipse基金会的一个自由和开源项目,是一个基于Java的Web服务器和Java Servlet容器。 Jetty在处理哈希表单张贴和更新哈希表单时,哈希生成函数中存在漏洞。攻击者可利用此漏洞通过在HTTP POST请求中发送特制的表单,造成哈希冲突,导致较高的CPU消耗。
CVE-2011-4461 MPS-2011-4130
2022-08-08 19:21
Apache Hadoop 跨站脚本漏洞
XSS
Apache Hadoop是美国阿帕奇(Apache)软件基金会的一套开源的分布式系统基础架构,它能够对大量数据进行分布式处理,并具有高可靠性、高扩展性、高容错性等特点。 Apache Hadoop 2.7.0之前的版本中的HDFS Web UI中存在跨站脚本漏洞。远程攻击者可利用该漏洞注入任意的Web脚本或HTML。
CVE-2017-3161 MPS-2017-4858
2022-08-08 19:21
Apache Thrift Node.js static web服务器访问控制错误漏洞
文件和路径信息暴露
Apache Thrift是美国阿帕奇(Apache)软件基金会的一个用于跨平台开发的框架。Node.js static web server是其中的一个静态Web服务器。 由于其存在访问控制错误漏洞,远程攻击者可利用该漏洞访问在set webservers docroot路径之外的文件。
CVE-2018-11798 MPS-2019-0103
2022-08-08 19:21
FasterXML Jackson-databind代码问题漏洞
反序列化
FasterXML Jackson是美国FasterXML公司的一款用于Java的数据处理工具。Jackson-databind是其中的一个具有数据绑定功能的组件。 FasterXML Jackson-databind 2.9.8之前的2.x版本中存在安全漏洞。攻击者可利用该漏洞执行代码。
CVE-2018-19362 MPS-2019-0025
2022-08-08 19:21
FasterXML jackson-databind 信息泄露漏洞
反序列化
FasterXML Jackson是美国FasterXML公司的一款适用于Java的数据处理工具。jackson-databind是其中的一个具有数据绑定功能的组件。 FasterXML jackson-databind 2.9.9.2之前的2.x版本中存在安全漏洞。目前尚无此漏洞的相关信息,请随时关注CNNVD或厂商公告。
CVE-2019-14439 MPS-2019-8770
2022-08-08 19:21
Apache Calcite 访问控制错误漏洞
关键功能的认证机制缺失
Apache Calcite是美国阿帕奇(Apache)基金会的一个开源框架,用于构建数据库和数据管理系统。 Apache Calcite 存在访问控制错误漏洞,该漏洞源于网络系统或产品未正确限制来自未授权角色的资源访问。该漏洞允许攻击者进行中间人攻击。
CVE-2020-13955 MPS-2020-14130
2022-08-08 19:21
Logback-core 存在输入验证不恰当漏洞
输入验证不恰当
ch.qos.logback:logback-core 是一个 logback-core 模块。此软件包的受影响版本容易受到主机名验证不足的影响。 X.509 未正确验证。通过通过看似有效的证书欺骗 TLS/SSL 服务器,具有拦截网络流量(例如,MitM、DNS 缓存中毒)能力的攻击者可以泄露和选择性地操纵传输的数据。
MPS-2022-12411
2022-08-08 19:21
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
0 评论
24 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部