OceaBase开发者大会落地上海!4月20日共同探索数据库前沿趋势!报名戳 了解详情
写点什么

成功从 Hadoop 迁移到 Lakehouse 架构的 5 个关键步骤

  • 2021-10-08
  • 本文字数:5870 字

    阅读完需:约 19 分钟

成功从 Hadoop 迁移到 Lakehouse 架构的 5 个关键步骤

从 Hadoop 迁移到基于云的现代架构(比如 Lakehouse 架构)的决定是业务决策,而非技术决策。我们在之前的文章中探讨了每一个组织都必须重新评估他们与 Hadoop 的关系的原因。当来自技术、数据和业务的利害关系方决定将企业从 Hadoop 转移出去之后,在开始真正的转变之前,需要考虑https://databricks.com/blog/2021/07/22/top-considerations-when-migrating-off-of-hadoop.html。本文中,我们将特别关注实际的迁移过程本身。你将学习成功迁移的关键步骤,以及 Lakehouse 架构在激发下一轮数据驱动创新中所扮演的角色。

迁移步骤


坦白的说吧,迁移从来不是一件简单的事情。不过,可以对迁移进行结构化,从而最大限度地减少不利影响,确保业务连续性,并有效地管理成本。为此,我们建议将你从 Hadoop 的迁移分解成以下五个关键步骤:


  • 管理

  • 数据迁移

  • 数据处理

  • 安全及管治

  • SQL 和 BI 层

第一步:管理


让我们从管理的角度回顾一下 Hadoop 中的一些基本概念,以及它们与 Databricks 的对比。



Hadoop 本质上是一个单体分布式存储和计算平台。它由多个节点和服务器组成,每个节点都有自己的存储、CPU 和内存。任务被分配到所有这些节点。通过 YARN 来实现资源管理,它力图确保工作负载能够获得其计算份额。


Hadoop 也包括元数据信息。有一个 Hive 元存储,它包含了存储在 HDFS 中的资产的结构化信息。你可以使用 Sentry 或 Ranger 来控制对数据的访问。从数据访问的角度来看,用户和应用程序可以直接通过 HDFS(或相应的 CLI/API)或通过 SQL 类型的接口访问数据。另外,SQL 接口可以通过 JDBC/ODBC 连接,使用 Hive 来执行通用 SQL(或在某些情况下使用 ETL 脚本),或者在 Impala 或 Tez 上使用 Hive 进行交互式查询。Hadoop 还提供了一个 HBase API 和相关的数据源服务。有关 Hadoop 生态系统的更多信息,请点击这里


接下来,我们来讨论如何在 Databricks Lakehouse 平台中映射或处理这些服务。在 Databricks 中,首先要注意的一个区别是,你在 Databricks 环境中看到的是多个集群。每个集群可以用于特定的用例、特定的项目、业务部门、团队或开发小组。更重要的是,这些集群都是短暂的。对于作业集群来说,集群的存在时间可以在工作流程的持续期间保持。这将执行工作流程,并且在完成后,环境将自动拆毁。同样,如果你考虑一个交互式用例,即你有一个可供开发者共享的计算环境,这样的环境可以在工作日开始,并且开发者全天运行他们的代码。在非活动期间,Databricks 会通过平台内置的(可配置的)自动终止功能自动关闭它。


不同于 Hadoop,Databricks 并不提供诸如 HBase 或 SOLR 那样的数据存储服务。你的数据驻留在对象存储中的文件存储。许多类似 HBase 或 SOLR 这样的服务都可以在云中找到与之相当的替代品。这可以是云原生或 ISV 解决方案。



从上图可以看出,Databricks 中的每个集群节点都对应于 Spark 驱动或工作器。关键在于,不同的 Databricks 集群彼此完全隔离,这样,你就可以确保在特定的项目和用例中符合严格的 SLA。你可以将流媒体或实时用例与其他以批处理为导向的工作负载隔离,并且你不必担心手工隔离可能会占用集群资源的长期运行作业。你只需要为不同的用例派生新的集群作为计算。Databricks 还将存储与计算解耦,使你能够利用现有的云存储,如 AWS S3、Azure Blob Storage 和 Azure Data Lake Store(ADLS)。


Databricks 也有一个默认的管理型 Hive 元存储,用于存储驻留在云存储中的数据资产的结构化信息。同时,它也支持外部元存储,比如 AWS Glue、Azure SQL Server 或 Azure Purview。你还可以在 Databricks 内指定安全控制,如表 ACL,以及对象存储权限。


当涉及到数据访问时,Databricks 提供了类似于 Hadoop 的功能,它可以处理用户如何处理数据。你可以通过 Databricks 环境中多种路径访问存储在云存储的数据。使用 SQL Endpoints 和 Databricks SQL,用户可以进行交互式查询和分析。他们也可以使用 Databricks 笔记本对存储在云存储中的数据进行数据工程和机器学习功能。Hadoop 中的 HBase 映射到 Azure CosmosDB,或 AWS DynamoDB/Keyspaces,可以作为下游应用的服务层加以利用。

第二步:数据迁移


在 Hadoop 的背景下,我认为大部分读者已经对 HDFS 很熟悉。HDFS 是存储文件系统,用于 Hadoop 部署,它利用了 Hadoop 集群节点上的磁盘。所以,当你扩展 HDFS 时,你需要增加整个集群的容量(也就是说,你需要同时扩展计算和存储)。若要购买和安装额外的软件,可能要花费很多时间和精力。


在云中,你拥有几乎无限的存储容量,比如 AWS S3、Azure 数据湖存储或 Blob 存储或谷歌存储等形式的云存储。无需维护或健康检查,从部署开始,它就提供了内置的冗余和高水平的持久性和可用性。我们建议使用原生云服务来迁移你的数据,为了方便迁移,有几个合作伙伴/ISVs。


那么,你该如何开始呢?最常见的推荐路线是从双摄取策略开始(也就是,在你的内部环境之外,添加一个源来上传数据到云存储)。这样你就可以在不影响你现有设置的情况下开始使用云中的新用例(利用新数据)。如果你在组织中寻求其他团队的支持,你可以将其作为一项备份策略。因为 HDFS 的庞大规模和相关的工作,传统上对备份提出了挑战,所以把数据备份到云端是一种有效的举措。


在大多数情况下,你可以利用现有的数据交付工具来复刻(fork)Feed,不仅写到 Hadoop,也写到云存储。举例来说,如果你正在使用 Informatica 和 Talend 这样的工具/框架处理数据并向 Hadoop 写入数据,那么可以轻松地添加一些附加步骤,以便将数据写入云存储。一旦数据在云中,就有许多办法来处理数据。


就数据方向而言,数据要么从内部拉取到云端,要么从内部推送到云端。可用于将数据推送到云端的工具有云原生解决方案(Azure Data Box、AWS Snow Family 等)、DistCP(一种 Hadoop 工具)、其他第三方工具以及任何内部框架。推送选项通常更容易得到安全团队的必要批准。


对于将数据拉取到云端,你可以使用 Spark/Kafka Streaming 或 Batch 从云端触发摄取管道。对于批处理,你可以直接摄取文件,或者通过 JDBC 连接器连接到相关的上游技术平台,并提取数据。当然,还有一些第三方工具可以实现这一目的。在这两个选项中,推送选项是一个被广泛接受和理解的选择,因此,让我们来深入研究一下拉取方法。


你首先要做的是在你的企业内部环境与云端之间建立连接。可通过互联网连接和网关来实现。你还可以使用 AWS Direct Connect、Azure ExpressRoute 等专用连接选项。有些情况下,如果你的组织对云计算并不陌生,那么这些设置已经就绪,因此你可以为你的 Hadoop 迁移项目重新使用它。


要考虑的另一个问题是 Hadoop 环境中的安全性。若为 Kerberized 环境,则可以从 Databricks 方面进行调整。你可以配置 Databricks 初始化脚本在集群启动时运行,安装并配置必要的 kerberos 客户端,访问存储在云存储位置的 krb5.conf 和 keytab 文件,并最终执行 kinit() 函数,从而允许 Databricks 集群与你的 Hadoop 环境直接交互。


最后,你还需要一个外部共享的元存储。尽管 Databricks 的确有一个默认部署的元存储服务,但是它也支持一个外部的。Hadoop 和 Databricks 将共享外部元存储,并可以部署到企业内(在 Hadoop 环境中)或云中。举例来说,如果你在 Hadoop 中运行已有 ETL 流程,但你无法将它们迁移到 Databricks,则可以利用此设置和现有的企业内部元存储,让 Databricks 使用 Hadoop 的最终规划数据集。

第三步:数据处理


首先要记住的是,从数据处理的角度来看,Databricks 的一切都在利用 Apache Spark。所有的 Hadoop 编程语言,如 MapReduce、Pig、Hive QL 和 Java,都可以转换为在 Spark 上运行,无论是通过 Pyspark、Scala、Spark SQL 甚至 R。在代码和 IDE 方面,Apache Zeppelin 和 Jupyter 笔记本都可以转换为 Databricks 笔记本,但是导入 Jupyter 笔记本要简单一些。导入之前,Zeppelin 笔记本需要转换为 Jupyter 或 Ipython。如果你的数据科学团队希望继续使用 Zeppelin 或 Jupyter 进行编码,则可以使用 Databricks Connect,这样你能够在 Databricks 上运行本地 IDE(Jupyter、Zeppelin 甚至 IntelliJ、VScode、RStudio 等)来运行代码。


当涉及到迁移 Apache Spark™ 作业时,需要考虑的主要问题是 Spark 版本。你的内部 Hadoop 集群可能运行的是较老版本的 Spark,你可以使用 Spark 迁移指南确定所做的更改,以查看对代码的影响。要考虑的另一个方面是将 RDD 转换为数据框(DataFrame)。RDD 通常用于 Spark 的 2.x 版本,尽管它们仍可用于 Spark 3.x,但是这样做会妨碍你充分利用 Spark 优化器的功能。我们建议你将 RDD 转换为数据框。


最后但并非最不重要的是,在迁移过程中,我们和客户一起遇到的一个常见问题就是本地 Hadoop 环境的硬编码引用。当然,这些都需要更新,否则代码将在新的设置中出现中断。


接下来,让我们看看转换非 Spark 工作负载的问题,在大多数情况下,这涉及重写代码。对 MapReduce 来说,在某些情况下,如果你以 Java 库的形式使用共享逻辑,那么这些代码就可以被 Spark 利用。然而,你可能仍然需要重写代码的某些部分,以便在 Spark 环境中运行,而不是 MapReduce。Sqoop 的迁移相对容易一些,因为在新的环境中,你使用 JDBC 源运行一组 Spark 命令(相对于 MapReduce 命令)。如同在 Sqoop 中指定参数一样,你可以在 Spark 代码中指定参数。在 Flume 中,我们看到的大部分用例都是围绕着从 Kafka 消耗数据并写入 HDFS。使用 Spark 流媒体可以很容易地完成这个任务。在 Spark 中迁移 Flume 的主要任务是将一个基于配置文件的方法转换成 Spark 中更多的程序化方法。最后,我们有 Nifi,它主要用于 Hadoop 之外,主要用作拖放、自我服务的摄取工具。Nifi 也可以用于云,但是我们看到很多客户正在利用迁移到云中的机会,用云中的其他较新的工具取代 Nifi。


迁移 HiveQL 可能是最简单的任务。Hive 和 Spark SQL 之间具有高度兼容性,并且大多数查询都可以在 Spark SQL 上正常运行。在 HiveQL 和 Spark SQL 之间,DDL 有一些微小的变化,例如 Spark SQL 使用 “USING”子句,HiveQL 使用 “FORMAT” 子句。我们建议对代码进行修改,使其使用 Spark SQL 格式,因为它允许优化器为你的代码在 Databricks 中准备最佳的执行计划。你仍可以利用 Hive Serdes 和 UDF 的优势,使你在将 HiveQL 迁移到 Databricks 时更加容易。


对于工作流编排,你必须考虑可能改变提交作业的方式。你可以继续利用 Spark 提交语义,但是还有其他更快、更无缝集成的选择。你可以使用 Databricks 作业和 Delta Live Tables 进行无代码 ETL,以取代 Oozie 作业,并在 Databricks 内定义端到端的数据管道。为了实现自动化/调度,对于涉及外部处理依赖的工作流,你必须在 Apache Airflow、Azure Data Factory 等技术中创建相应的工作流/管道。利用 Databricks 的 REST API,可以使用 Databricks 集成并配置所有的调度平台。


还有一种叫做 MLens 的自动化工具(由 KnowledgeLens 创建),它可以帮助你将工作负载从 Hadoop 迁移到 Databricks。MLens 可以帮助迁移 PySpark 代码和 HiveQL,包括把一些 Hive 细节转换成 Spark SQL,这样你就可以充分利用 Spark SQL 优化器的功能和性能优势。它们还计划很快支持 Oozie 工作流向 Airflow、Azure Data Factory 等等的迁移。

第四步:安全及管治


让我们来看看安全和管治。在 Hadoop 世界中,我们有用来连接到诸如 Ambari 或 Cloudera Manager 这样的管理控制台的 LDAP 集成,甚至 Impala 或 Solr。Hadoop 还拥有 Kerberos 认证其他服务。在授权方面,Ranger 和 Sentry 是使用最多的工具。


有了 Databricks,单一登录(Single Sign On,SSO)可以集成到任何支持 SAML 2.0 的身份提供器。其中包括 Azure Active Directory、Google Workspace SSO、AWS SSO 和 Microsoft Active Directory。为了进行授权,Databricks 向 Databricks 对象提供 ACL(访问控制列表),允许你设置笔记本、作业、集群等实体的权限。有了数据权限和访问控制,你可以定义表的 ACL 和视图,以限制列和行的访问,并利用类似的凭据传递等方式,Databricks 将你的工作空间登录凭据传递到存储层(S3、ADLS、Blob 存储),以确定你是否获得访问数据的授权。如果你需要基于属性的控制或数据屏蔽等功能,你可以利用 Immuta 和 Privacera 等合作伙伴工具。从企业管治的角度来看,你可以将 Databricks 连接到企业数据目录,如 AWS Glue、Informatica Data Catalog、Alation 和 Collibra。

第五步:SQL 和 BI 层


在 Hadoop 中,正如前面所讨论的,你有 Hive 和 Impala 作为接口来执行 ETL 以及特别的查询和分析。在 Databricks 中,你通过 Databricks SQL 实现类似的功能。Databricks SQL 还通过 Delta 引擎提供了极高的性能,并支持自动扩展集群的高并发使用案例。Delta 引擎也包括了 Photon,这是一种用 C++ 重构的新的 MPP 引擎,并向量化以利用数据级和指令级并行性。


Databricks 提供了与 Tableau、PowerBI、Qlik 和 looker 等 BI 工具的原生集成,以及高度优化的 JDBC/ODBC 连接器,这些工具可以使用。新型 JDBC/ODBC 驱动程序的开销非常小(¼秒),使用 Apache Arrow 的传输率提高了 50%,以及一些元数据操作,可以显著加快元数据的检索操作。Databricks 也支持 PowerBI 的 SSO,对其他 BI/仪表盘工具的 SSO 支持也即将推出。


Databricks 除了上述的笔记本体验外,还具有内置的 SQL 用户体验,为 SQL 用户提供了 SQL 工作台的镜头,还提供了轻量指示板和警报功能。这样就可以对数据湖内的数据进行基于 SQL 的数据转换和探索性分析,而无需将其转移到下游的数据仓库或其他平台。

下一步


在考虑迁移到像 Lakehouse 架构这样的现代云架构时,需要记住以下两件事:


记住要把关键的合作伙伴带到这一过程中来。这既是一个技术决策,也是一个业务决策,你需要你的合作伙伴接受这一过程及其最终状态。另外,请记住,并非只有你一个人,Databricks 和我们的合作伙伴都拥有熟练的资源,他们在构建可重复的最佳实践方面已经做了足够多的工作,节省了企业的时间、金钱资源,并且减少了总体压力。在开始迁移之前,下载 Hadoop 到 Databricks 技术迁移指南Hadoop to Databricks Technical Migration guide),以获得逐步指导、笔记本和代码。


原文链接:


https://databricks.com/blog/2021/08/06/5-key-steps-to-successfully-migrate-from-hadoop-to-the-lakehouse-architecture.html


关联阅读:


Hadoop 怎么了,大数据路在何方


十年 Hadoop 退居幕后,数据云横空出世


现在是采用湖仓一体的好时机吗?

2021-10-08 10:234632

评论 1 条评论

发布
用户头像
阿哈哈哈哈哈
2021-10-08 17:23
回复
没有更多了
发现更多内容

强大易用的矢量图形设计工具Sketch v96.1最新中文版

Rose

苹果软件下载 Sketch中文版 Sketch V96.1 mac图形设计工具

Mac音频采样器Kontakt 7最新版v7.3.0下载

Rose

mac音频采样器 Kontakt 7激活版 Native Instruments Kontakt 7 mac下载

Java异常Exception详解

timerring

Java 三周年连更

通俗易懂篇:贝叶斯网络和它的应用

Bob

网络 贝叶斯算法

近期Master分支代码编译异常的解决方案

坚果

OpenHarmony OpenHarmony3.2 三周年连更

跨平台应用开发进阶(五十一):HTML5(富文本内容)连续数字、字母不自动换行问题分析及解决

No Silver Bullet

html5 跨平台应用开发 三周年连更 问题分析及解决

Shell在日常工作中的应用实践

京东科技开发者

Linux Shell 服务器 shell脚本编程 企业号 4 月 PK 榜

Lambda 应用介绍及实现原理剖析

架构精进之路

Java 后端 Lamdba表达式 三周年连更

关于软件测试领域的 Happy Path

Jerry Wang

软件测试 测试 自动化测试 测试自动化 三周年连更

基于UDP协议的Socket通信

二哈侠

UDP协议 客户端配置 三周年连更

基于Flutter实现跨平台离线大模型对话应用

轻口味

flutter ios android AI 三周年连更

使用 Amazon SageMaker 构建文本摘要应用

亚马逊云科技 (Amazon Web Services)

基于树莓派设计的音视频播放器(从0开始)

DS小龙哥

三周年连更

好家伙!阿里新产Java性能优化(终极版),涵盖性能优化所有操作

程序员小毕

数据库 性能优化 JVM 多线程 java面试

阿里P8面试官推荐学习的11大专题:java面试精讲框架文档

做梦都在改BUG

Java java面试 框架

Unity 之 查找游戏物体的几种方式汇总解析

陈言必行

Unity 三周年连更

2023年超全前端面试题-背完稳稳拿offer(欢迎补充)

肥晨

三周年连更

SpringBoot如何使用Jetty容器?超级详细,建议收藏

bug菌

springboot jetty 三周年连更

PicConvert for mac:以批处理模式转换,调整大小和重命名图像

Rose

苹果软件资源 图片格式转换 PicConvert mac mac图片编辑

一种面向后端的微服务低代码平台架构设计

京东科技开发者

架构 微服务 低代码 企业号 4 月 PK 榜

从多个数据源中提取数据进行ETL处理并导入数据仓库

海拥(haiyong.site)

三周年连更

浅论分布式训练中的recompute机制

百度Geek说

机器学习 深度学习 分布式 企业号 4 月 PK 榜

告别祈祷式编程|单元测试在项目里的正确落地姿势

浅羽技术

Java 测试 单元测试 JUnit 三周年连更

如何让 Windows 应用程序在 Parallels Desktop 中启动得更快

Rose

pd虚拟机 pd18虚拟机 Parallels Desktop启动

产教融合| 赛意信息·讯方·深信息产教融合交流研讨会暨国产工业软件人才培养战略合作示范基地揭牌仪式圆满举办

科技热闻

中软国际亮相OpenHarmony开发者大会,荣获A类捐赠人授牌认可

科技热闻

vue3学习-Composition API

格斗家不爱在外太空沉思

Vue 3 三周年连更

图计算引擎分析--GridGraph

京东科技开发者

系统 磁盘 图计算引擎 企业号 4 月 PK 榜 GridGraph

企业微信接入系列-扫码绑定/登录

六月的雨在InfoQ

企业微信 三周年连更 企业微信扫码 企业微信接入

Docker容器网络的七种武器

王玉川

Docker 容器 网络 VXLAN 网络虚拟化

PDF编辑软件Acrobat Pro DC 2023 最新版+如何取消Acrobat更新教程

Rose

Acrobat Pro DC 2023 Acrobat Pro DC更新 如何取消Acrobat 自动更新

成功从 Hadoop 迁移到 Lakehouse 架构的 5 个关键步骤_语言 & 开发_Harsh Narula_InfoQ精选文章