[ 首页 ] [ 渗透测试 ] [ 黑客接单 ] [ 黑客技术 ] [ 黑客论坛 ] [ 黑客松 ]



标题 : Uber账号被锁定如何解除封号限制
日期 : 2023-04-28

Uber账号被锁定(封号)怎么办?如果您正在遭受Uber账号被封禁的问题,请联系我们黑客团队,我们可以为您解决它!下面是我们分析的Uber服务器的核心技术和原理!

优步致力于在我们的全球市场提供更安全、更可靠的交通服务。为实现这一目标,优步严重依赖于在各个层面做出数据驱动的决策,从预测高流量事件期间的乘客需求到识别和解决我们的司机合作伙伴注册过程中的瓶颈。随着时间的推移,对更多洞察力的需求导致超过 100 PB 的分析数据需要通过我们基于 Apache Hadoop ® 的大数据平台进行清理、存储和服务,并以最小的延迟提供服务。自 2014 年以来,我们一直致力于开发可确保数据可靠性、可扩展性和易用性的大数据解决方案,目前正专注于提高我们平台的速度和效率。  

在本文中,我们深入探讨了 Uber 的 Hadoop 平台之旅,并讨论了我们下一步要构建什么来扩展这个丰富而复杂的生态系统。

第一代:优步大数据的开端

在 2014 年之前,我们有限的数据量可以装入一些传统的在线事务处理 (OLTP) 数据库(在我们的例子中是 MySQL 和 PostgreSQL)。为了利用这些数据,我们的工程师必须单独访问每个数据库或表,如果用户需要组合来自不同数据库的数据,则留给用户编写自己的代码。那时,我们没有全球访问权限或所有存储数据的全球视图。事实上,我们的数据分散在不同的 OLTP 数据库中,总数据量大约为几 TB,访问这些数据的延迟非常快(通常是不到一分钟)。下面的图 1 概述了 2014 年之前的数据架构:

随着 Uber 的业务呈指数级增长(无论是我们运营的城市/国家的数量还是每个城市使用该服务的乘客/司机的数量),传入数据量也随之增加,访问和分析所有数据的需求也随之增加。一个地方的数据要求我们构建第一代分析数据仓库。为了让 Uber 尽可能以数据为驱动,我们需要确保分析师可以访问分析数据,所有这些都集中在一个地方。为实现这一目标,我们首先将数据用户分为三大类:

  1. 城市运营团队(数千名用户):这些实地工作人员管理和扩展优步在每个市场的交通网络。随着我们的业务扩展到新的城市,成千上万的城市运营团队定期访问这些数据以响应司机和乘客的特定问题。
  2. 数据科学家和分析师(数百名用户):这些是分布在不同职能部门的分析师和科学家,他们需要数据来帮助为我们的用户提供最佳的运输和交付体验,例如,在预测乘客需求以确保我们的未来无忧时服务。
  3. 工程团队(数百名用户):整个公司的工程师专注于构建自动化数据应用程序,例如我们的欺诈检测和驾驶员入职平台。

我们的第一代分析数据仓库专注于将 Uber 的所有数据集中在一个地方,并简化数据访问。对于前者,我们决定使用Vertica作为我们的数据仓库软件,因为它具有快速、可扩展和面向列的设计。我们还开发了多个临时 ETL(提取、转换和加载)作业,将数据从不同来源(即 AWS S3、OLTP 数据库、服务日志等)复制到 Vertica。为了实现后者,我们将 SQL 标准化为我们解决方案的接口,并构建了一个在线查询服务来接受用户查询并将它们提交给底层查询引擎。下面的图 2 描述了这个分析数据仓库:

我们第一个数据仓库服务的发布对整个公司的工程师来说是一个巨大的成功。用户第一次有了全局视图,可以在一个地方访问所有数据。这导致大量新团队使用数据分析作为其技术和产品决策的基础。在几个月内,我们的分析数据规模增长到数十 TB,用户数量增加到数百人。

使用 SQL 作为简单的标准接口使城市运营商能够在不了解底层技术的情况下轻松地与数据进行交互。此外,不同的工程团队开始根据这些数据(即 uberPool、预付费用等)的信息为用户需求量身定制服务和产品,并组建了新团队以更好地使用和服务这些数据(即我们的机器学习和实验组)。

限制

另一方面,我们的数据仓库和传入数据的广泛使用揭示了一些局限性。由于数据是通过临时 ETL 作业获取的,而且我们缺乏正式的模式通信机制,因此数据可靠性成为一个问题。我们的大部分源数据都是JSON 格式,摄取作业无法适应生产者代码的变化。

随着我们公司的发展,扩展我们的数据仓库变得越来越昂贵。为了降低成本,我们开始删除旧的、过时的数据,为新数据腾出空间。最重要的是,我们的大部分大数据平台都不能水平扩展,因为主要目标是解除对集中数据访问或查看的关键业务需求,而且根本没有足够的时间来确保所有部分都可以水平扩展。我们的数据仓库被有效地用作数据湖,堆积所有原始数据以及执行所有数据建模和服务数据。

此外,由于生产数据的服务与下游数据消费者之间缺乏正式合同,将数据引入数据仓库的 ETL 作业也非常脆弱(灵活的 JSON 格式的使用导致缺乏架构实施)源数据)。如果不同的用户在摄取期间执行不同的转换,则可能会多次摄取相同的数据。这给我们的上游数据源(即在线数据存储)带来了额外压力,并影响了它们的服务质量。此外,这导致我们的仓库中存储了几乎相同数据的多个副本,进一步增加了存储成本。在数据质量问题的情况下,回填非常耗时耗力,因为 ETL 作业是临时的并且依赖于源,数据预测和转换是在摄取过程中进行的。由于我们的摄取工作缺乏标准化,也很难摄取任何新的数据集和类型。

第二代:Hadoop 的到来

为了解决这些限制,我们围绕 Hadoop 生态系统重新设计了我们的大数据平台。更具体地说,我们引入了一个 Hadoop 数据湖,其中所有原始数据仅从不同的在线数据存储中提取一次,并且在提取期间没有进行任何转换。这种设计转变显着降低了我们在线数据存储的压力,并使我们能够从临时摄取作业过渡到可扩展的摄取平台。为了让用户访问 Hadoop 中的数据,我们引入了Presto以启用交互式即席用户查询,引入了Apache Spark以促进对原始数据(SQL 和非 SQL 格式)的编程访问,以及Apache Hive充当超大查询的主力。这些不同的查询引擎允许用户使用最能满足他们需求的工具,从而使我们的平台更加灵活和易于访问。

为了保持平台的可扩展性,我们确保所有数据建模和转换仅在 Hadoop 中进行,从而在出现问题时实现快速回填和恢复。只有最关键的建模表(即城市运营商实时利用的那些表来运行纯粹、快速的 SQL 查询)被传输到我们的数据仓库。这显着降低了运行大型数据仓库的运营成本,同时还将用户引导至基于 Hadoop 的查询引擎,这些引擎是根据他们的特定需求而设计的。

我们还利用了Apache Parquet的标准列式文件格式,在提供分析查询服务的列式访问的情况下,由于压缩率提高和计算资源增加,从而节省了存储空间。此外,Parquet 与 Apache Spark 的无缝集成使该解决方案成为访问 Hadoop 数据的热门选择。下面的图 3 总结了我们第二代大数据平台的架构:

除了整合Hadoop数据湖,我们还让这个生态系统中的所有数据服务都可以水平扩展,从而提高我们大数据平台的效率和稳定性。特别是,拥有这种通用的水平可扩展性来满足即时业务需求,使我们能够将精力集中在构建下一代数据平台上,而不是解决临时问题。

与数据管道易受上游数据格式更改影响的第一代平台不同,我们的第二次迭代允许我们对所有数据进行模式化,从 JSON 过渡到 Parquet 以将模式和数据存储在一起。为实现这一点,我们构建了一个中央模式服务来收集、存储和服务模式,以及不同的客户端库以将不同的服务与这个中央模式服务集成。脆弱的、临时的数据摄取作业被一个标准平台所取代,以将所有源数据以其原始的嵌套格式传输到 Hadoop 数据湖中。通过 Hadoop 中的水平可扩展批处理作业摄取后,对数据进行的任何必要操作和转换都会发生。

随着 Uber 的业务继续以光速扩展,我们很快就拥有了数十 PB 的数据。每天都有数十 TB 的新数据添加到我们的数据湖中,我们的大数据平台增长到超过 10,000 个 vcores,每天运行的批处理作业超过 100,000 个。这导致我们的 Hadoop 数据湖成为所有分析 Uber 数据的集中真实来源。

限制

随着公司规模不断扩大,我们的生态系统中存储了数十 PB 的数据,我们面临着一系列新的挑战。

首先,存储在我们 HDFS 中的大量小文件(由于更多数据被摄取以及更多用户编写临时批处理作业产生更多输出数据)开始给 HDFS NameNode 增加额外压力。最重要的是,数据延迟仍然远远不能满足我们的业务需求。用户每 24 小时只能访问一次新数据,这对于做出实时决策来说太慢了。虽然将 ETL 和建模转移到 Hadoop 中使这个过程更具可扩展性,但这些步骤仍然是瓶颈,因为这些 ETL 作业必须在每次运行时重新创建整个建模表。雪上加霜的是,新数据的摄取和相关派生表的建模都基于创建整个数据集的新快照并交换旧表和新表,以便为用户提供对新数据的访问。摄取作业必须返回源数据存储,创建新快照,并在每次运行期间摄取或将整个数据集转换为可使用的柱状 Parquet 文件。随着我们的数据存储的增长,这些作业可能需要 20 多个小时才能运行 1,000 多个 Spark 执行程序。

每项工作的很大一部分涉及从最新快照转换历史数据和新数据。虽然每天只为每个表添加超过 100 GB 的新数据,但每次运行摄取作业都必须为该特定表转换整个超过 100 TB 的数据集。对于在每次运行时重新创建新派生表的 ETL 和建模作业也是如此。由于历史数据的更新率很高,这些作业必须依赖基于快照的源数据摄取。从本质上讲,我们的数据包含大量更新操作(即,乘客和司机评级或支持在完成行程后几小时甚至几天调整票价)。由于 HDFS 和 Parquet 不支持数据更新,所有摄取作业都需要从更新的源数据创建新快照,将新快照摄取到 Hadoop 中,将其转换为 Parquet 格式,然后交换输出表以查看新数据。下面的图 4 总结了这些基于快照的数据摄取如何通过我们的大数据平台移动:

第三代:长期重建我们的大数据平台

到 2017 年初,我们的大数据平台已被全公司的工程和运营团队使用,使他们能够在一个地方访问所有新数据和历史数据。用户可以轻松地访问 Hive、Presto、Spark、Vertica、Notebook和更多仓库选项中的数据,所有这些都通过根据他们的需求量身定制的单个 UI 门户。HDFS 中有超过 100 PB 的数据,我们的计算集群中有 100,000 个虚拟核心,每天有 100,000 个 Presto 查询,每天有 10,000 个 Spark 作业,每天有 20,000 个 Hive 查询,我们的 Hadoop 分析架构遇到了可扩展性限制,许多服务受到高数据延迟。

幸运的是,由于我们的底层基础架构可以横向扩展以满足即时业务需求,因此我们有足够的时间研究我们的数据内容、数据访问模式和用户特定需求,以便在构建下一代之前确定最紧迫的问题。我们的研究揭示了四个主要痛点:

  1. HDFS 可扩展性限制:许多依赖 HDFS 扩展其大数据基础设施的公司都面临这个问题。按照设计,HDFS 受到其 NameNode 容量的瓶颈,因此存储大量小文件会显着影响性能。这种限制通常发生在数据大小超过 10 PB 并且超过 50-100 PB 时成为真正的问题。幸运的是,有相对简单的解决方案可以将 HDFS 从几十 PB 扩展到几百 PB,例如利用 ViewFS 和使用 HDFS NameNode Federation。通过控制小文件的数量并将我们数据的不同部分移动到单独的集群(例如,HBase 和 Yarn 应用程序日志移动到单独的 HDFS 集群),我们能够减轻这种 HDFS 限制。
  2. Hadoop 中更快的数据:优步的业务实时运作,因此,我们的服务需要访问尽可能新鲜的数据。因此,24 小时数据延迟对于许多用例来说太慢了,而且对更快的数据传输有巨大的需求。我们的第二代大数据平台基于快照的摄取方法效率低下,使我们无法以较低的延迟摄取数据。为了加快数据交付速度,我们不得不重新设计我们的管道,以便仅增量摄取更新的和新的数据。
  3. 支持 Hadoop 和 Parquet 中的更新和删除:Uber 的数据包含很多更新,从过去几天的年龄(例如,骑手或司机伙伴调整最近的旅行票价)到几周(例如,骑手在他们下次乘坐时对他们上次旅行的评分)新行程)甚至几个月(例如,由于业务需要回填或调整过去的数据)。通过基于快照的数据摄取,我们每 24 小时摄取一次源数据的新副本。换句话说,我们一次摄取所有更新,每天一次。然而,随着对更新数据和增量摄取的需求,我们的解决方案必须能够支持对现有数据的更新和删除操作。但是,由于我们的Big Data是存储在HDFS和Parquet中的,无法直接支持对已有数据的更新操作。另一方面,我们的数据包含非常宽的表格(大约 1,每个表 000 列)具有五层或更多层的嵌套,而用户查询通常只涉及其中的几列,这使我们无法以经济高效的方式使用非列格式。为了让我们的大数据平台为长期增长做好准备,我们必须找到一种方法来解决我们 HDFS 文件系统中的这一限制,以便我们也可以支持更新/删除操作。
  4. 更快的 ETL 和建模:与原始数据摄取类似,ETL 和建模作业是基于快照的,需要我们的平台在每次运行时重建派生表。为了减少建模表的数据延迟,ETL 作业也需要成为增量的。这要求 ETL 作业以增量方式仅从原始源表中提取更改的数据并更新先前派生的输出表,而不是每隔几个小时重建整个输出表。

介绍胡迪

考虑到上述要求,我们构建了Hadoop Upserts and Decremental (Hudi),这是一个开源 Spark 库,它在 HDFS 和 Parquet 之上提供了一个抽象层,以支持所需的更新和删除操作。Hudi 可用于任何 Spark 作业,可水平扩展,并且仅依赖 HDFS 运行。因此,任何需要支持历史数据更新/删除操作的大数据平台都可以利用 Hudi。

Hudi 使我们能够更新、插入和删除 Hadoop 中现有的 Parquet 数据。此外,Hudi 允许数据用户仅增量拉取变化的数据,显着提高查询效率并允许增量更新派生建模表。

我们的 Hadoop 生态系统中的原始数据根据时间进行分区,任何旧分区都可能在以后接收更新。因此,对于依赖这些原始源数据表的数据用户或 ETL 作业,了解哪个日期分区包含更新数据的唯一方法是扫描整个源表并根据一些已知的时间概念过滤掉记录。这会导致计算量大的查询需要全源表扫描,并阻止 ETL 作业非常频繁地运行。

使用 Hudi,用户可以简单地传递他们的最后一个检查点时间戳并检索此后更新的所有记录,无论这些更新是添加到最近日期分区的新记录还是对旧数据的更新(例如,今天发生的新旅行与6 个月前的更新行程),而无需运行扫描整个源表的昂贵查询。

使用 Hudi 库,我们能够从基于快照的原始数据摄取转变为增量摄取模型,使我们能够将数据延迟从 24 小时减少到不到一小时。下面的图 5 描述了 Hudi 合并后我们的大数据平台:  

通用数据摄取

Hudi 并不是我们第三代大数据平台的唯一补充。我们还通过 Apache Kafka 在存储和大数据团队之间正式移交了上游数据存储更改。上游数据存储事件(以及来自不同应用程序和服务的经典日志消息)使用统一的 Avro 编码流入 Kafka,包括附加的标准全局元数据标头(即时间戳、行键、版本、数据中心信息和原始主机)。Streaming 和 Big Data 团队都使用这些存储更改日志事件作为他们的源输入数据以进行进一步处理。

我们的数据摄取平台Marmaray以小批量运行并从 Kafka 获取上游存储更改日志,使用Hudi将它们应用到 Hadoop 中的现有数据之上图书馆。如前所述,Hudi支持upsert操作,允许用户添加新记录和更新或删除历史数据。Ingestion Spark 作业每 10-15 分钟运行一次,在 Hadoop 中提供 30 分钟的原始数据延迟(具有 1-2 次摄取作业失败或重试的余量)。为了避免将相同的源数据多次摄取到 Hadoop 中导致效率低下,我们的设置不允许在原始数据摄取期间进行任何转换,因此我们决定将我们的原始数据摄取框架作为 EL 平台而不是传统的 ETL 平台。在这种模式下,鼓励用户在上游数据以其原始嵌套格式登陆后,在 Hadoop 中以批处理模式执行所需的转换操作。

自从对我们的大数据平台实施这些更改以来,我们通过避免不必要或低效的摄取操作节省了大量计算资源。我们的原始数据的可靠性也得到了显着提高,因为我们现在可以避免在摄取过程中容易出错的转换。现在,用户可以使用任何大数据处理引擎在原始源数据之上运行他们的转换。此外,如果出现任何问题,用户可以再次重新运行他们的转换,并通过使用更多的计算资源和更高的并行度来更快地完成批量转换作业,从而仍然满足他们的 SLA。  

增量数据建模

考虑到需要摄取到 Hadoop 中的大量上游数据存储(截至 2017 年超过 3,000 个原始 Hadoop 表),我们还构建了一个通用摄取平台,以统一和可配置的方式促进将原始数据摄取到 Hadoop 中。现在,我们的大数据平台以 10-15 分钟的数据延迟增量更新原始 Hadoop 表,允许快速访问源数据。然而,为了确保建模表也可以低延迟使用,我们也必须避免建模 ETL 作业中的低效率(即,完全派生表重新创建或完整源原始表扫描)。事实上,Hudi 允许 ETL 作业仅从源表中获取更改的数据。

在 ETL 作业期间使用 Hudi writer 使我们能够更新派生建模表中的旧分区,而无需重新创建整个分区或表。因此,我们的建模 ETL 作业使用 Hudi 读取器以增量方式仅从源表中获取更改的数据,并使用 Hudi 写入器以增量方式更新派生的输出表。现在,ETL 作业也在不到 30 分钟内完成,为 Hadoop 中的所有派生表提供了不到一小时的端到端延迟。

为了给 Hadoop 表的数据用户提供访问所有数据或只访问新数据或更新数据的不同选择,使用 Hudi 存储格式的 Hadoop 原始表提供了两种不同的读取模式:

  1. 最新模式视图。提供当时整个 Hadoop 表的整体视图。此视图包括所有记录的最新合并值以及表中的所有现有记录。
  2. 增量模式视图。根据给定时间戳仅从特定 Hadoop 表中获取新记录和更新记录。此视图仅返回最近插入或自最新检查点以来更新的行。此外,如果特定行自上一个检查点以来更新了不止一次,此模式将返回所有这些中间更改的值(而不是仅返回最新的合并值)

下面的图 6 描述了以 Hudi 文件格式存储的所有 Hadoop 表的这两个读取视图:

用户通常根据需要在这两种表视图之间进行切换。当他们运行临时查询以根据最新状态分析数据时,他们使用表的最新模式视图(例如,获取美国每个城市每周的总出行次数)。另一方面,当用户有一个迭代作业或查询需要只获取自最近一次执行以来更改的或新的记录时,他们使用增量模式视图。两种视图在任何时候都可用于所有 Hadoop 表,用户可以根据需要在不同模式之间切换。

标准化数据模型

除了提供同一表的不同视图外,我们还标准化了我们的数据模型,为所有原始 Hadoop 数据提供两种类型的表:

  1. 变更日志历史表。包含针对特定上游表收到的所有更改日志的历史记录。该表使用户能够扫描给定表的更改历史记录,并且可以按键合并以提供每行的最新值。
  2. 合并快照表。容纳上游表的最新合并视图。该表包含每个键收到的所有历史变更日志的压缩合并视图。

下面的图 7 描述了如何使用给定的变更日志流为特定的上游源数据存储生成不同的 Hive 原始表:

但是,变更日志流可能包含也可能不包含给定键的整行(所有列)。虽然合并快照表始终提供特定键的所有列,但如果变更日志的上游流仅提供部分行变更日志,则变更日志历史表可能是稀疏的,这是一种通过避免在只有一个或几个时重新发送整行来提高效率的功能有限的列值被更改。如果用户想要从变更日志历史表中获取更改的值并将其与合并的快照表连接起来以创建完整的数据行,我们还将合并快照表中相同键的日期分区包含在变更日志历史表中。

下面的图 8 总结了我们大数据平台不同组件之间的关系:

第 4 代:下一步是什么?

自 2017 年推出第三代大数据平台以来,整个公司的用户都可以快速可靠地访问 Hadoop 中的数据,但始终存在增长空间。下面我们总结了我们为提高数据质量、数据延迟、效率、可扩展性和可靠性而不断增强 Uber 大数据平台的努力。

数据质量

为了提高数据质量,我们确定了两个需要改进的关键领域。首先,当某些上游数据存储在存储前不强制执行或检查数据模式时(例如,存储值为 JSON blob 的键值),我们希望避免不符合模式的数据。这会导致不良数据进入我们的 Hadoop 生态系统,从而影响所有依赖这些数据的下游用户。为防止不良数据涌入,我们正在将所有上游数据存储转变为对数据内容执行强制性模式检查,并在数据存在任何问题(例如,未确认模式)时拒绝数据输入。

我们发现的第二个问题是实际数据内容的质量。虽然使用模式可确保数据包含正确的数据类型,但它们不会检查实际数据值(例如,整数而不是 [0,150] 之间的正数)。为了提高数据质量,我们正在扩展我们的模式服务以支持语义检查。这些语义检查(换句话说,Uber 特定的数据类型)允许我们在基本结构类型检查之外对实际数据内容添加额外的约束。

数据延迟

我们的目标是将 Hadoop 中的原始数据延迟减少到五分钟,将建模表的数据延迟减少到十分钟。这将允许更多用例从流处理转移到使用 Hudi 增量数据拉取的更高效的小批量处理。

我们还在扩展我们的 Hudi 项目以支持额外的视图模式,这将包括现有的读取优化视图,以及一个新的实时视图,它显示数据的延迟只有几分钟。这种实时视图依赖于我们称为Merge-On-Read或 Hudi 2.0 的开源解决方案(以及 Hudi 的一部分)。

数据效率

为了提高数据效率,我们正在摆脱对任何服务依赖专用硬件的依赖,转向服务码头化。此外,我们正在统一 Hadoop 生态系统内部和跨 Hadoop 生态系统的所有资源调度程序,以弥合整个公司的 Hadoop 和非数据服务之间的差距。这允许所有作业和服务以统一的方式进行调度,而不管它们将在何种介质中执行。随着 Uber 的发展,数据局部性将成为 Hadoop 应用程序的一个大问题,成功的统一资源管理器可以将所有现有的调度程序整合在一起(即 Yarn、Mesos 和 Myriad)。

可扩展性和可靠性

作为我们提高平台可扩展性和可靠性的努力的一部分,我们发现了几个与可能的边缘情况相关的问题。虽然我们的摄取平台是作为一个通用的、可插拔的模型开发的,但上游数据的实际摄取仍然包括大量依赖于源的管道配置,这使得摄取管道变得脆弱,并增加了运行数千个这些管道的维护成本。

为确保无论数据源如何,我们都能统一获取数据,我们与 Uber 的数据存储团队合作启动了一个项目,以统一所有上游数据源的变更日志的内容、格式和元数据,无论其技术构成如何。该项目将确保有关这些特定上游技术的信息仅是添加到实际变更日志值的附加元数据(而不是针对不同数据源具有完全不同的变更日志内容和元数据),并且无论上游来源如何,数据摄取都会发生。

最后,我们的下一个版本的 Hudi 将允许我们在几分钟内为所有数据源默认生成更大的 Parquet 文件(超过 1 GB,而我们目前的 128 兆字节)。它还将消除有关更新与插入比率的任何敏感性。Hudi 1.0 依赖于一种称为写时复制的技术,只要有更新的记录,它就会重写整个源 Parquet 文件。这显着增加了写入放大,尤其是当更新与插入的比率增加时,并阻止在 HDF 中创建更大的 Parquet 文件。新版胡迪旨在通过将更新记录存储在单独的增量文件中并根据给定策略将其与基本 Parquet 文件异步合并(例如,当有足够数量的更新数据来分摊重写大型基本文件的成本时)来克服此限制镶木地板文件)。将 Hadoop 数据存储在更大的 Parquet 文件中以及更可靠的源独立数据摄取平台将使我们的分析数据平台在未来几年随着业务的蓬勃发展而继续增长。

向前进

Uber 的数据组织是数据平台、数据基础、流媒体和实时平台以及大数据团队之间的跨职能协作,以构建支持 Uber 分析数据基础架构所需的库和分布式服务。如果您对挑战规模极限的大数据挑战感兴趣,请考虑申请加入我们位于旧金山和帕洛阿尔托的团队。

如果您有兴趣与我们合作,请将您的简历发送至 lvsebug@gmail.com

Reza Shiftehfar 目前领导 Uber 的 Hadoop 平台团队。他的团队帮助构建和发展优步可靠且可扩展的大数据平台,该平台利用 Apache Hadoop、Apache Hive、Apache Kafka、Apache Spark 和 Presto 等技术为 PB 级数据提供服务。Reza 是 Uber 数据团队的创始工程师之一,帮助将 Uber 的数据平台从几 TB 扩展到超过 100 PB,同时将数据延迟从 24 小时以上减少到几分钟。

Apache®  Apache Hadoop®  Apache Hive 、Apache Spark 、Hadoop®  Hive 和 Spark 是 Apache Software Foundation 在美国和/或其他国家/地区的注册商标或商标。使用这些标志并不意味着 Apache 软件基金会对其背书。