当前位置: 首页 > news >正文

从 HDFS 迁移到 MinIO 企业对象存储

云原生、面向 Kubernetes 、基于微服务的架构推动了对 MinIO 等网络存储的需求。在云原生环境中,对象存储的优势很多 - 它允许独立于存储硬件对计算硬件进行弹性扩展。它使应用程序无状态,因为状态是通过网络存储的,并且通过降低操作复杂性,使应用程序能够实现比以往更高的规模。从网络对象存储系统写入和读取数据的最突出标准是 S3。MinIO 是一种完全符合 S3 标准、高性能、混合和多云就绪的对象存储解决方案。与将数据引入计算的传统方法相比,通过网络存储计算工作负载数据的模式是现代分解架构的缩影。这种方法的好处是多方面的:节省成本、可扩展性和性能。我们的一个客户,一家领先的金融集团,使用 MinIO 而不是 HDFS,节省了 60%+ 的成本性能提升。这种节省绝非非凡。在可扩展性方面,Hadoop 在处理小文件方面的低效率及其对数据局部性的需求限制了其可扩展性,而 MinIO 擅长处理从 KB 到 TB 的各种对象大小。至于性能,大多数老练的 Hadoop 管理员都知道,高性能对象存储后端已成为现代实施的默认存储架构。本文详细介绍了如何通过更改存储协议、数据迁移和性能调整,将对象存储的优势引入 Hadoop。在以下部分中,我们将介绍从 HDFS 迁移到 MinIO E

hdfs:// to s3a://

默认情况下,Hadoop 生态系统中的任何大数据平台都支持与 S3 兼容的对象存储后端。这种支持可以追溯到 2006 年,当时新兴技术嵌入了 S3 客户端实现。所有 Hadoop 相关平台都使用 hadoop-aws 模块和 aws-java-sdk-bundle 来为 S3 API 提供支持。通过指定适当的协议,应用程序可以在 HDFS 和 S3 存储后端之间无缝切换。对于 S3,协议方案为 s3a://,对于 HDFS,方案为 hdfs://。

Hadoop SDK 中的 S3 客户端实现多年来不断发展,每个协议方案都有不同的协议方案名称,例如 s3://、s3n:// 和 s3a://。目前 s3:// 表示 Amazon 的 EMR 客户端。Hadoop 生态系统中可用的最突出的 S3 客户端是 s3a://,它适用于所有其他 S3 后端。

注意:s3n:// 已失效,不再受任何主要 Hadoop 供应商支持。

迁移的第一步是将 Hadoop 用于与后端存储通信的协议从 hdfs:// 更改为 s3a://。在平台的 core-site.xml 文件中,更改以下参数 Hadoop.defaultFS 以指向 s3 后端。

<property>

 <name>fs.default.name</name>

 <value>hdfs://192.168.1.2:9000/</value>

</property>

<property>

 <name>fs.default.name</name>

 <value>s3a://minio:9000/</value>

</property>

有几种方法可以迁移到 MinIOAIstore。您可以将旧数据保留在 HDFS 中供 Hadoop 访问,而新数据保存在 MinIO 中,以供 Apache Spark 等云原生应用程序访问。您可以将所有内容移动到 MinIO,以便 Hadoop 和云原生应用程序访问它。或者,您可以选择执行部分迁移。您必须为您的组织选择最好的。我将在下面介绍如何进行完整迁移,并在以后的博客文章中更深入地了解如何规划迁移。

将数据从 HDFS 迁移到 S3

可以使用名为 distcp 的 Hadoop 原生工具在不同的存储后端之间迁移数据,distcp 代表分布式复制。它需要两个参数:source 和 destination。源和目标可以是 Hadoop 支持的任何存储后端。在此示例中,为了将数据从 HDFS 移动到 s3,必须将源设置为 hdfs://192.168.1.2:9000 ,目标为 s3a://minio:9000 。

>_ # configure the source and destination
>_ export src=hdfs://192.168.1.2:9000>_ export dest=s3a://minio:9000>_
>_ # perform the copy
>_ Hadoop distcp $src $dest

根据数据的大小和传输速度,distcp 本身可以扩展,并且可以使用大规模并行基础设施迁移数据。映射器的数量,即复制数据的并行任务的数量,可以使用 -m 标志进行配置。一个好的经验法则是将其设置为基础设施中所有节点的可用 CPU 内核数。例如,如果您有 8 个空闲节点,每个节点有 8 个内核,则 CPU 内核的数量将为 64。

>_ # configure the number of mappers
>_ export num_cpu_cores=64>_
>_ # perform the copy with higher parallelism for large datasets
>_ Hadoop distcp -m $num_cpu_cores $src $dest

注意:映射器的数量应对应于基础设施中的可用内核数量,而不是整个集群中的内核总数。这是为了确保其他工作负载具有可用于其操作的资源。

优化性能

Hadoop 和 MinIO 之间的数据访问模式大不相同。根据设计,对象存储系统不支持编辑。这在其实现数 PB 规模的能力中起着关键作用。其次,在对象存储系统中将数据从一个位置复制到另一个位置的成本很高,因为该操作会产生服务器端副本。某些对象存储系统并不严格一致,这可能会使 Hadoop 感到困惑,因为文件可能不会显示,或者如果最终一致,则已删除的文件可能会在列出操作期间显示。

注意:MinIO 没有一致性缺点,因为它是严格一致的。

考虑到这些因素,很容易调整您的应用程序以成为 Object Storage 原生应用程序。为了帮助加快这一旅程,已经付出了巨大的努力,那就是将 S3 提交程序引入 Hadoop。顾名思义,S3 提交程序承诺向 S3 提供一致、可靠和高性能的数据承诺。提交者更改 S3 中数据的读/写访问模式。首先,它们避免了服务器端副本,否则 Hadoop 应用程序会广泛使用服务器端副本,以允许多个 Hadoop 工作线程原子写入数据。一些提交者甚至使用本地驱动器作为缓存,并且只将最终输出写入 MinIO以提高性能。有三个提交程序,每个提交程序都有不同的权衡来处理各种用例。他们是:

  • 目录提交者

  • 分区 Committer

  • 提交者

为了在应用程序中启用 committer,请在 core-site.xml 文件中设置以下配置:


<property><name>mapreduce.outputcommitter.factory.scheme.s3a</name><value>org.apache.Hadoop.fs.s3a.commit.S3ACommitterFactory</value><description>The committer factory to use when writing data to S3A filesystems.</description></property>

目录提交者

此提交程序首先更改访问模式以在本地 (缓存驱动器) 写入数据,一旦收集到要写入的数据的最终版本,就会执行写入。这种编写风格更适合分布式计算和 MinIO通过快速网络连接,并通过防止服务器端副本大大提高性能。要选择此提交程序,请将以下参数 fs.s3a.committer.name 设置为 directory。


<property><name>fs.s3a.committer.name</name><value>directory</value></property>

分区 Committer

此提交程序类似于目录提交程序,不同之处在于它处理冲突的方式。目录提交程序通过考虑整个目录结构来处理写入同一文件的不同 Hadoop 工作程序的冲突。对于分区的提交程序,冲突是逐个分区处理的。如果目录结构是深度嵌套的或通常非常大,则与目录提交程序相比,此提交程序提供更高的性能。仅建议将其用于 Apache Spark 工作负载。


<property><name>fs.s3a.committer.name</name><value>partitioned</value></property>

Magic 提交者

这个 committer 的内部工作原理不太为人所知,因此命名为 Magic committer。它会自动选择最佳策略以实现尽可能高的性能。它仅适用于严格一致的 S3 存储。由于 MinIO 是严格一致的,因此可以安全地使用 Magic committer。建议在您的工作负载中尝试此提交程序,以将性能与其他提交程序进行比较。

<property><name>fs.s3a.committer.name</name><value>magic</value></property>

选择 Committer 的一个好的经验法则是从最简单且最可预测的目录 Committer 开始,如果您的应用程序需求不能得到满足,请尝试其他两个 Committer(如果适用)。一旦选择了合适的提交者,您的应用程序就可以接受性能和正确性的测试。

相关文章:

从 HDFS 迁移到 MinIO 企业对象存储

云原生、面向 Kubernetes 、基于微服务的架构推动了对 MinIO 等网络存储的需求。在云原生环境中&#xff0c;对象存储的优势很多 - 它允许独立于存储硬件对计算硬件进行弹性扩展。它使应用程序无状态&#xff0c;因为状态是通过网络存储的&#xff0c;并且通过降低操作复杂性&a…...

Rust 常见问题汇总

问题1&#xff1a; cargo build 一直提示Blocking waiting for file lock on package cache。 在 cargo.toml 文件中添加了依赖之后&#xff0c;运行 cargo build 命令时&#xff0c;如果卡在 blocking waiting for file lock on package cache lock 这里&#xff0c; 后来发…...

java泛型类与泛型方法

Java泛型类和泛型方法是Java泛型编程中的重要组成部分。它们允许开发者编写类型安全且高度复用的代码。下面详细介绍泛型类和泛型方法的概念、用法和示例。 泛型类 泛型类是在类定义中使用类型参数的类&#xff0c;可以指定具体的类型实例化该类。这样可以确保类型安全&#…...

Android String资源文件中,空格、换行以及特殊字符如何表示

空格&#xff1a; 例&#xff1a;<string name"test">test test</string> 换行&#xff1a;\n 例&#xff1a;<string name"test">test \n test</string> tab&#xff1a;\t …...

CUDA及GPU学习资源汇总

CUDA C Programming Guide 的中文翻译版GPU中的SM和warp的关系推荐几个不错的CUDA入门教程CUDA编程入门极简教程...

uniapp vue3 梯形选项卡组件

实现的效果图&#xff1a; 切换选项卡显示不同的内容&#xff0c;把这个选项卡做成了一个组件&#xff0c;需要的自取。 // 组件名为 trapezoidalTab <template> <view class"pd24"><view class"nav"><!-- 左侧 --><view cla…...

如何在微信小程序中实现WebSocket连接

微信小程序作为一种全新的应用形态&#xff0c;凭借其便捷性、易用性受到了广大用户的喜爱。在实际开发过程中&#xff0c;实时通信功能是很多小程序必备的需求。WebSocket作为一种在单个TCP连接上进行全双工通信的协议&#xff0c;能够实现客户端与服务器之间的实时通信。本文…...

二级等保测评中安全物理环境的重要性及高危项分析

当今数字化时代&#xff0c;信息安全至关重要。网络安全等级保护测评是确保信息系统安全稳定运行的重要手段之一&#xff0c;其中二级等保测评对于许多企业和组织来说是必须要达到的安全标准。 而安全物理环境作为等保测评的重要组成部分&#xff0c;其重要性不容忽视。 安全物…...

C++11——lambda

lambda lambda的介绍lambda的使用lambda的细节->捕捉列表 lambda的介绍 lambda是匿名函数&#xff0c;再适合的场景去使用可以提高代码的可读性。 场景&#xff1a; 假设有一个Goods类需要进行按照价格、数量排序 class Goods {string name;size_t _price;//价格int num;/…...

Dubbo3序列化安全问题

序列化安全 在 Dubbo 3.0 中&#xff0c;序列化协议的安全性得到了加强。 1. 序列化安全性升级 Triple 协议: 推荐使用 Triple 协议 的非 Wrapper 模式&#xff0c;该模式在安全性上更为严格。需要开发人员编写 IDL&#xff08;接口描述语言&#xff09;文件&#xff0c;这虽…...

秒懂Linux之共享内存

目录 共享内存概念 模拟实现共享内存 创建key阶段 ​编辑创建共享内存阶段 删除共享内存阶段 查看共享内存属性阶段 挂接共享内存到进程阶段 取消共享内存与进程挂接阶段 进程通信阶段 添加管道改进版 共享内存函数 shmget函数 shmat函数 shmdt函数 shmctl函数 共享内存概念 共…...

【计算机网络】网络层协议解析

网络层的两种服务IPv4分类编址划分子网无分类地址 IPv4地址应用IP数据报的发送和转发过程主机发送IP数据报路由器转发IP数据报 IPv4数据报首部格式ICMP网际控制报文协议虚拟专用网VPN与网络地址转换NAT 网络层主要任务是实现网络互连&#xff0c;进而实现数据包在各网络之间的传…...

sqlist void reverse(SqList A)

#include <stdlib.h> #include <stdio.h> #include <iostream> using namespace std; #define INIT_SIZE 5 #define INCREMENT 10 # define OK 1 # define ERROR 0/* 定义ElemType为int类型 */ typedef int ElemType; void input(ElemType &s); void out…...

聊聊Thread Local Storage

聊聊ThreadLocal 为什么需要Thread Local StorageThread Local Storage的实现PThread库实现操作系统实现GCC __thread关键字实现C11 thread_local实现JAVA ThreadLocal实现 Thread Local Storage 线程局部存储&#xff0c;简称TLS。 为什么需要Thread Local Storage 变量分为全…...

WEB攻防-JS项目Node.js框架安全识别审计验证绕过

知识点&#xff1a; 1、原生JS&开发框架-安全条件 2、常见安全问题-前端验证&未授权 详细点&#xff1a; 1、什么是JS渗透测试&#xff1f; 在JavaScript中也存在变量和函数&#xff0c;当存在可控变量及函数调用即可参数漏洞 2、流行的Js框架有哪些&#xff1f; …...

STM32——SPI

1.SPI简介 SPI&#xff0c;是英语Serial Peripheral Interface的缩写&#xff0c;顾名思义就是串行外围设备接口。SPI&#xff0c;是一种高速的&#xff0c;全双工&#xff0c;同步的通信总线&#xff0c;并且在芯片的管脚上只占用四根线&#xff0c;节约了芯片的管脚&#xf…...

【云安全】云上资产发现与信息收集

一、云基础设施组件 1、定义 在云计算基础架构中&#xff0c;基础设施组件通常包括&#xff1a;计算、存储、网络和安全等方面的资源。例如&#xff0c;计算资源可以是虚拟机、容器或无服务器计算引擎&#xff1b;存储资源可以是对象存储或块存储&#xff1b;网络资源可以是虚拟…...

flask搭建微服务器并训练CNN水果识别模型应用于网页

一. 搭建flask环境 概念 flask:一个轻量级 Web 应用框架&#xff0c;被设计为简单、灵活&#xff0c;能够快速启动一个 Web 项目。CNN:深度学习模型&#xff0c;用于处理具有网格状拓扑结构的数据&#xff0c;如图像&#xff08;2D网格&#xff09;和视频&#xff08;3D网格&a…...

数据篇| 关于Selenium反爬杂谈

友情提示:本章节只做相关技术讨论, 爬虫触犯法律责任与作者无关。 LLM虽然如火如荼进行着, 但是没有数据支撑, 都是纸上谈兵, 人工智能的三辆马车:算法-数据-算力,缺一不可。之前写过关于LLM微调文章《微调入门篇:大模型微调的理论学习》、《微调实操一: 增量预训练(Pretrai…...

MySQL高阶1890-2020年最后一次登录

目录 题目 准备数据 分析数据 题目 编写解决方案以获取在 2020 年登录过的所有用户的本年度 最后一次 登录时间。结果集 不 包含 2020 年没有登录过的用户。 返回的结果集可以按 任意顺序 排列。 准备数据 Create table If Not Exists Logins (user_id int, time_stamp …...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap&#xff08;位图&#xff09;是Android应用内存占用的“头号杀手”。一张1080P&#xff08;1920x1080&#xff09;的图片以ARGB_8888格式加载时&#xff0c;内存占用高达8MB&#xff08;192010804字节&#xff09;。据统计&#xff0c;超过60%的应用OOM崩溃与Bitm…...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时&#xff0c;显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...