无需彻底替换即可从 Hadoop 迁移

Migrating from Hadoop without Rip and Replace

我们仍然对众多寻求从 HDFS 迁移到现代对象存储(如 MinIO)的客户数量感到惊讶。我们曾以为现在每个人都已经完成了迁移,但每周我们都会与一些大型、技术先进的组织进行沟通,他们决定进行迁移。

在这些讨论中,很多时候,他们基础设施中的某些部分希望在迁移后继续保留。有一些框架和软件诞生于 HDFS 生态系统,它们获得了大量开发人员的支持,并且在现代数据栈中仍然占有一席之地。事实上,我们经常说 HDFS 生态系统带来了很多好处。根本问题在于存储和计算的紧密耦合,而不是来自大数据时代的工具和服务。

这篇博文将重点介绍如何在不完全移除和替换有价值的工具和服务的情况下进行迁移。现实情况是,如果不现代化您的基础设施,就无法实现组织所需的 AI/ML 方面的进步,但您不必为了实现这一点而丢弃所有东西。

使用 Spark 和 Hive 解耦存储和计算

我们已经讨论了一些彻底移除和替换迁移的策略,在某些情况下,这是前进的道路。但是,让我们看看另一种现代化 HDFS 实现的方法。

这种架构涉及 Kubernetes 管理用于数据处理的Apache Spark 和 Apache Hive 容器;Spark 与 MinIO 本地集成,而 Hive 使用 YARN。MinIO 在有状态容器中处理对象存储,并且在这种架构中依赖于多租户配置以实现数据隔离。

架构概述

  • 计算节点:Kubernetes 在计算节点上高效地管理无状态的 Apache Spark 和 Apache Hive 容器,确保最佳的资源利用率和动态扩展。
  • 存储层:MinIO 擦除编码 和 BitRot 保护意味着您可以丢失多达一半的驱动器,而仍然可以恢复数据,所有这些都不需要维护 Hadoop 所需的每个数据块的三份副本。
  • 访问层:所有对 MinIO 对象存储的访问都通过 S3 API 统一,为与存储数据交互提供了一个无缝的接口。
  • 安全层:数据安全至关重要。MinIO 使用每个对象的密钥加密所有数据,确保防止未经授权访问的可靠保护。
  • 身份管理:MinIO Enterprise 完全集成身份提供商,例如 WSO2、Keycloak、Okta、Ping Identity,以允许应用程序或用户进行身份验证。

Hadoop 的一个完全现代化的替代方案,它允许您的组织保留 Hive、YARN 和任何其他可以与对象存储集成的 Hadoop 生态系统数据产品,这几乎是现代数据栈中的所有产品。

访问层中的互操作性

S3a 是寻求从 Hadoop 迁移的应用程序的重要端点,它与 Hadoop 生态系统中的各种应用程序兼容。自 2006 年以来,S3 兼容的对象存储后端已作为默认功能无缝集成到 Hadoop 生态系统中的众多数据平台中。这种集成可以追溯到新兴技术中 S3 客户端实现的整合。

在所有与 Hadoop 相关的平台中,hadoop-aws 模块和 aws-java-sdk-bundle 的采用是标准实践,确保对 S3 API 的强大支持。这种标准化方法促进了应用程序从 HDFS 和 S3 存储后端的平滑过渡。开发人员只需指定适当的协议,就可以轻松地将应用程序从 Hadoop 切换到现代对象存储。S3 的协议方案由 s3a:// 表示,而 HDFS 的协议方案则表示为 hdfs://。

迁移的好处

可以详细讨论从 Hadoop 迁移到现代对象存储的好处。如果您正在阅读本文,那么您已经大体了解到,如果不从 Hadoop 等遗留平台迁移,AI 和其他现代数据产品的进步可能会被搁置。其原因归结为性能和规模。

毫无疑问,现代工作负载需要出色的性能才能与正在处理的数据量和现在所需的任务复杂性相匹配。当性能不仅仅是虚荣的基准测试,而是一个硬性要求时,Hadoop 替代品的竞争者范围急剧下降

推动迁移的另一个因素是云原生规模。当云的概念不再是物理位置,而更多的是运营模式时,就可以做一些事情,例如从单个 .yaml 文件中在几分钟内部署整个数据栈。如此迅速的实现将使任何 Hadoop 工程师都感到震惊。

这一概念的组成部分是摆脱供应商锁定带来的经济效益,这使组织能够为特定工作负载选择最佳选项。更不用说,摆脱维护数据的三份独立副本以保护它,这在使用主动-主动复制和擦除编码后已经成为过去。投资面向未来的技术通常也意味着更容易找到和招聘有才华的专业人员来维护您的基础设施。人们希望从事推动业务发展的工作,而几乎没有什么比数据做得更好。这些因素共同促成了一个数据栈,它不仅更快、更便宜,而且更适合当今和未来的数据驱动需求。

入门

在深入研究我们架构的细节之前,您需要启动并运行一些组件。要从 Hadoop 迁移,您显然必须首先安装它。如果您想模拟此体验,您可以通过设置 Hortonworks 发行版 Hadoop此处来开始本教程。

否则,您可以从以下安装步骤开始

  1. 设置 Ambari:接下来,安装 Ambari,它将通过自动为您配置 YARN 来简化服务的管理。Ambari 提供了一个用户友好的仪表板来管理 Hadoop 生态系统中的服务,并确保一切顺利运行。
  2. 安装 Apache Spark:Spark 对于处理大规模数据至关重要。按照标准安装过程来启动并运行 Spark。
  3. 安装 MinIO:根据您的环境,您可以选择两种安装方法之一:KubernetesHelm Chart

成功安装这些组件后,您可以将 Spark 和 Hive 配置为使用 MinIO 而不是 HDFS。导航到 Ambari UI http://<ambari-server>:8080/ 并使用默认凭据登录:用户名:admin,密码:admin

ambari-login

在 Ambari 中,导航到服务,然后是 HDFS,然后导航到 Configs 面板,如下面的屏幕截图所示。在此部分中,您正在将 Ambari 配置为使用 S3a 与 MinIO 而不是 HDFS。

hdfs-configs

向下滚动并导航到 Custom core-site。这是您配置 S3a 的位置。

s3a-config
sudo pip install yq
alias kv-pairify='yq ".configuration[]" | jq ".[]" | jq -r ".name + \"=\" + .value"'

从这里开始,您的配置将取决于您的基础设施。但是,以下内容可能代表了一种使用在 12 个节点上运行且具有 1.2TiB 内存的 MinIO 配置 S3a 的方法。

cat ${HADOOP_CONF_DIR}/core-site.xml | kv-pairify | grep "mapred"

mapred.maxthreads.generate.mapoutput=2 # Num threads to write map outputs
mapred.maxthreads.partition.closer=0 # Asynchronous map flushers
mapreduce.fileoutputcommitter.algorithm.version=2 # Use the latest committer version
mapreduce.job.reduce.slowstart.completedmaps=0.99 # 99% map, then reduce
mapreduce.reduce.shuffle.input.buffer.percent=0.9 # Min % buffer in RAM
mapreduce.reduce.shuffle.merge.percent=0.9 # Minimum % merges in RAM
mapreduce.reduce.speculative=false # Disable speculation for reducing
mapreduce.task.io.sort.factor=999 # Threshold before writing to drive
mapreduce.task.sort.spill.percent=0.9 # Minimum % before spilling to drive

通过查看有关此迁移模式的文档此处,以及 Hadoop 中有关 S3 的文档此处此处,可以探索一些优化。

当您对配置满意时,请重新启动所有内容。

hdfs-services

您还需要导航到 Spark2 配置面板。

spark-config

向下滚动到 Custom spark-defaults 并添加以下属性以配置 MinIO

spark-config
spark.hadoop.fs.s3a.access.key minio
spark.hadoop.fs.s3a.secret.key minio123
spark.hadoop.fs.s3a.path.style.access true
spark.hadoop.fs.s3a.block.size 512M
spark.hadoop.fs.s3a.buffer.dir ${hadoop.tmp.dir}/s3a
spark.hadoop.fs.s3a.committer.magic.enabled false
spark.hadoop.fs.s3a.committer.name directory
spark.hadoop.fs.s3a.committer.staging.abort.pending.uploads true
spark.hadoop.fs.s3a.committer.staging.conflict-mode append
spark.hadoop.fs.s3a.committer.staging.tmp.path /tmp/staging
spark.hadoop.fs.s3a.committer.staging.unique-filenames true
spark.hadoop.fs.s3a.committer.threads 2048 # number of threads writing to MinIO
spark.hadoop.fs.s3a.connection.establish.timeout 5000
spark.hadoop.fs.s3a.connection.maximum 8192 # maximum number of concurrent conns
spark.hadoop.fs.s3a.connection.ssl.enabled false
spark.hadoop.fs.s3a.connection.timeout 200000
spark.hadoop.fs.s3a.endpoint http://minio:9000
spark.hadoop.fs.s3a.fast.upload.active.blocks 2048 # number of parallel uploads
spark.hadoop.fs.s3a.fast.upload.buffer disk # use disk as the buffer for uploads
spark.hadoop.fs.s3a.fast.upload true # turn on fast upload mode
spark.hadoop.fs.s3a.impl org.apache.hadoop.spark.hadoop.fs.s3a.S3AFileSystem
spark.hadoop.fs.s3a.max.total.tasks 2048 # maximum number of parallel tasks
spark.hadoop.fs.s3a.multipart.size 512M # size of each multipart chunk
spark.hadoop.fs.s3a.multipart.threshold 512M # size before using multipart uploads
spark.hadoop.fs.s3a.socket.recv.buffer 65536 # read socket buffer hint
spark.hadoop.fs.s3a.socket.send.buffer 65536 # write socket buffer hint
spark.hadoop.fs.s3a.threads.max 2048 # maximum number of threads for S3A

应用配置更改后,请重新启动所有内容。

spark-config

导航到 Hive 面板以完成配置。

hive-config

向下滚动到 Custom hive-site 并添加以下属性

hive-config
hive.blobstore.use.blobstore.as.scratchdir=true
hive.exec.input.listing.max.threads=50
hive.load.dynamic.partitions.thread=25
hive.metastore.fshandler.threads=50
hive.mv.files.threads=40
mapreduce.input.fileinputformat.list-status.num-threads=50

您可以在此处找到更多微调配置信息。进行配置更改后,请重新启动所有内容。

hive-config

就是这样,您现在可以测试您的集成。

自行探索

这篇博文概述了一种从 Hadoop 迁移的现代方法,无需完全改造现有系统。通过利用 Kubernetes 管理 Apache Spark 和 Apache Hive,并集成 MinIO 用于有状态对象存储,组织可以实现支持动态扩展和高效资源利用的平衡架构。这种设置不仅保留了数据处理环境的功能,还增强了这些功能,使其更加健壮和面向未来。

使用 MinIO,您可以受益于一种存储解决方案,该解决方案可在商品硬件上提供高性能,通过擦除编码降低成本(消除 Hadoop 数据复制的冗余),并绕过供应商锁定和对基于 Cassandra 的元数据存储的需求等限制。对于希望利用高级 AI/ML 工作负载而又不舍弃其现有数据系统核心元素的组织来说,这些优势至关重要。

欢迎随时联系我们,以获取有关如何调整此迁移策略以满足您组织独特需求的更详细的讨论或具体指导。无论通过 hello@min.io 电子邮件还是通过我们的社区 Slack 频道,我们都乐于助您充分利用您的数据基础设施投资。