paint-brush
无需拆除和替换即可从 Hadoop 迁移 — 方法如下经过@minio
3,811 讀數
3,811 讀數

无需拆除和替换即可从 Hadoop 迁移 — 方法如下

经过 MinIO7m2024/05/31
Read on Terminal Reader

太長; 讀書

MinIO 是 Hadoop 的现代版本,可与 Spark 和 Hive 集成。MinIO 使用每个对象密钥加密所有数据,确保提供强大的保护以防止未经授权的访问。对于寻求从 Hado.op 过渡的应用程序来说,S3a 是必不可少的端点,可与各种应用程序兼容。
featured image - 无需拆除和替换即可从 Hadoop 迁移 — 方法如下
MinIO HackerNoon profile picture
0-item
1-item


我们仍然对来找我们寻求从 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 Protection 意味着您可能会丢失多达一半的驱动器并且仍然可以恢复,而无需维护 Hadoop 所需的每个数据块的三个副本。


  • 访问层:所有对MinIO对象存储的访问都通过S3 API统一,提供了与存储数据交互的无缝接口。


  • 安全层:数据安全至关重要。MinIO 使用每个对象密钥加密所有数据,确保对未经授权的访问提供强大的保护。


  • 身份管理: MinIO Enterprise 与 WSO2、Keycloak、Okta、Ping Identity 等身份提供商完全集成,以允许应用程序或用户进行身份验证。


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

接入层的互操作性

对于寻求从 Hadoop 过渡的应用程序来说,S3a 是一个必不可少的端点,它与 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 :根据您的环境,您可以选择两种安装方法: Kubernetes或者Helm Chart


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



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



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



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


从这里开始,您的配置将取决于您的基础架构。但是,以下内容可以代表core-site.xml配置 S3a 的方法,该 S3a 带有在 12 个节点和 1.2TiB 内存上运行的 MinIO。


 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 的文档这里这里


当您对配置满意时,请重新启动全部。



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



向下滚动到Custom spark-defaults并添加以下属性以使用 MinIO 进行配置:



 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


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



导航到 Hive 面板完成配置。



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




 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


您可以找到更多微调配置信息这里. 配置更改完成后重新启动全部。



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

自行探索

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


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


欢迎随时联系我们,获取更详细的讨论或具体指导,了解如何定制此迁移策略以满足贵组织的独特需求。无论是通过电子邮件 [email protected] 还是通过我们的社区松弛渠道,我们将帮助您充分利用数据基础设施投资。