OssImport系列之一——架构

本文涉及的产品
对象存储 OSS,OSS 加速器 50 GB 1个月
简介: 从整体上介绍数据迁移工具OssImport的架构、部署、配置等。

相关文章:OssImport系列之二——单机部署
相关文章:OssImport系列之三——分布式部署

概述

OssImport工具可以将本地、其它云存储的数据迁移到OSS,它有以下特点:

  • 支持的丰富的数据源,有本地、七牛、百度BOS、AWS S3、Azure Blob、又拍云、腾讯云COS、金山KS3、HTTP、OSS等,并可根据需要扩展;
  • 支持断点续传;
  • 支持流量控制;
  • 支持迁移指定时间后的文件、特定前缀的文件;
  • 支持并行数据下载、上传;
  • 支持单机模式和分布式模式,单机模式部署简单使用方便,分布式模式适合大规模数据迁移。

架构

OssImport是基于 master-worker 的分布式架构,如下图:

Master --------- Job --------- Console
    |
    |
   TaskTracker
    |_____________________
    |Task     | Task      | Task
    |         |           |
Worker      Worker      Worker

其中:

  • Job:用户通过提交的数据迁移任务,对用户来说一个任务对应一个配置文件job.cfg
  • Task:Job按照 数据大小文件个数 可以分成多个 Task ,每个 Task 迁移部分文件。Job切分成Task的最小单位是文件,同一个文件不会切分到多个Task中。

OssImport各模块说明,如下表:

角色 说明
Master 负责Job切分成Task,按照数据大小和文件个数分解成Task,数据大小/文件个数是可配置的 sys.properties 中配置。 Job切分成Task详细过程是:Master先从 本地/其它云存储 中遍历出完整的待迁移的文件列表,然后 按 照 数据大小文件个数 把完整的文件列表切分成Task,每个Task负责部分文件的迁移或校验。
Worker 负责Task的文件迁移和数据校验,从数据源上拉取指定文件,并上传到OSS的指定目录,迁移的数据源和OSS的配置在job.cfglocal_job.cfg中指定;Worker数据迁移支持限流、指定Task并发数,在sys.properties 配置。
TaskTracker 简称Tracker,负责Task的分发、Task状态跟踪。
Console 负责与用户交互,接受命令显示结果,支持的系统管理命令 deploy/start/stop ,Job管理命令 submit/retry/clean

部署方式

OssImport有 单机模式分布式模式 两种部署方式。对于小于 30TB 的小规模数据数据迁移,单机模式即可完成。对于大规模的数据迁移,请使用分布式模式。

单机

Master、Worker、Tracker、Console运行在一个机器上,系统中有且只有一个Worker。我们对单机模式的部署和执行进行了封装优化,单机部署和执行都很简单。点击模式下Master、Worker、TaskTracker、Console四个模块统一打包成ossimport2.jar

单机模式下文件结构如下:

ossimport
├── bin
│   └── ossimport2.jar  # 包括Master、Worker、Tracker、Console四个模块的总jar
├── conf
│   ├── local_job.cfg   # 单机Job配置文件
│   └── sys.properties  # 系统运行参数配置文件
├── console.bat         # Windows命令行,可以分布执行调入任务
├── console.sh          # Linux命令行,可以分布执行调入任务
├── import.bat          # Windows一键导入,执行配置文件为conf/local_job.cfg配置的数据迁移任务,包括启动、迁移、校验、重试
├── import.sh           # Linux一键导入,执行配置文件为conf/local_job.cfg配置的数据迁移任务,包括启动、迁移、校验、重试
├── logs                # 日志目录
└── README.md           # 说明文档,强烈建议使用前仔细阅读

提示

  • import.bat/import.sh为一键导入脚本,修改完local_job.cfg后可以直接运行;
  • console.bat/console.sh为命令行工具,可以用于分布执行命令;
  • 脚本或命令时请在ossimport目录下执行,即 *.bat/*.sh 的同级目录。

分布式

分布式模式下可以启动多个Worker执行迁移数据,Task平均分配到Worker上执行,一个Worker执行多个Task。每一个机器上只能启动一个Worker。workers配置的第一个 Worker 上会同时启动 MasterTaskTrackerConsole 也要在该机器上运行。

分布式模式下文件结构如下:

ossimport
├── bin
│   ├── console.jar     # Console模块jar包
│   ├── master.jar      # Master模块jar包
│   ├── tracker.jar     # Tracker模块jar包
│   └── worker.jar      # Worker模块jar包
├── conf
│   ├── job.cfg         # Job配置文件模板
│   ├── sys.properties  # 系统运行参数配置文件
│   └── workers         # Worker列表
├── console.sh          # 命令行工具,目前支持只Linux
├── logs                # 日志目录
└── README.md           # 说明文档,强烈建议使用前仔细阅读

提示

  • 分布式命令行工具 console.sh 目前只支持Linux,Windowns暂不支持。

配置文件

单机模式下有两个配置文件sys.propertieslocal_job.cfg,分布式模式下有三个配置文件sys.propertieslocal_job.cfgworkers。其中local_job.cfgjob.cfg是完全一样的,只是名称不一样,workers是分布式环境先独有的。

sys.properties

系统运行参数。

字段 含义 说明
workingDir 工作目录 工具包解压后的目录。单机模式下请不要修改此选择,分布式模式下每个机器的工作目录必须相同。
workerUser Worker机器的ssh用户名 如果配置了 privateKeyFile ,则优先使用privateKeyFile;如果没有配置privateKeyFile,则使用workerUser/workerPassword。单机模式不需要修改此项。
workerPassword Worker机器的ssh用户密码 单机模式不需要修改此项。
privateKeyFile public key文件路径 如果已经打通了ssh通道,则可以指定public key文件路径,否则为空。如果配置了privateKeyFile,则优先使用privateKeyFile;如果没有配置privateKeyFile,则使用workerUser/workerPassword。 单机模式不需要修改此项。
sshPort ssh端口 默认22,一般情况无需更改 单机模式不需要修改此项。
workerTaskThreadNum Worker执行Task的最大线程数 该参数机器的内存/网络有关,建议值 60 。物理机可以适当加大,比如 150 ,如果网络已经打满,请不要再加大。如果网络较差,请适当降低,比如 30,防止请求竞争网络造成大量请求超时。
workerMaxThroughput(KB/s) worker数据迁移的流量上限 该值能起到限流作用,默认0表示不限流。
dispatcherThreadNum Tracker的Task分发与状态确认的线程数 默认值一般够用,没有特殊需要请不要修改默认值。
workerAbortWhenUncatchedException 表示遇到未知错误时是跳过还是Abort 默认跳过。
workerRecordMd5 在OSS中是否使用元数据 x-oss-meta-md5 记录迁移文件MD5值,默认不记录 主要用于用户使用MD5校验文件数据。

job.cfg

数据迁移任务配置,local_job.cfg和job.cfg的配置项是完全一样的,只是名称不一样。

字段 含义 说明
jobName 任务名字,字符串 任务的唯一标识,命名规则 [a-zA-Z0-9_-]{4,128}, 支持提交多个名字不同的任务。如果重复提交同名任务会提示任务已存在,清理( clean )同名任务前, 无法提交同名任务。
jobType 任务类型,字符串 两类 importaudit ,默认 importimport ,执行数据迁移操作并校验迁移数据的一致性; audit ,仅进行数据一致性校验。
isIncremental 是否打开增量迁移模式,布尔类型 默认值false;如果设为true,会每间隔incrementalModeInterval(单位秒)重新扫描一次增量数据,并将增量数据迁移到OSS。
incrementalModeInterval 增量模式下的同步间隔,整形,单位秒 isIncremental=true时有效。可配置的最小间隔为900秒,不建议配置成小于 3600秒 的值,会浪费大量请求,造成额外的系统开销。
importSince 迁移文件的最后修改时间,整形,单位秒 如果文件的最后修改(LastModified Time)在 importSince 之前(包含)将被迁移,如果文件的最后修改(LastModified Time)在 importSince 之后将不被迁移;importSinceUnix时间戳,即自1970年1月1日UTC零点以来的秒数,通过命令date +%s获取;默认为0,表示迁移全部数据。
srcType 同步源类型,字符串, 请注意大小写 目前支持localossqiniubosks3s3youpaihttpcosazure等十种类型。 local,从本地文件迁移数据到OSS,该选项只需要填写srcPrefix不需要填写srcAccessKey,srcSecretKey,srcDomain,srcBucketoss,从一个 bucket 迁移到另一个 bucketqiniu,从七牛云存储迁移到OSS;bos,从百度的云存储迁移到OSS;ks3,从金山云存储迁移到OSS;s3,从 AWS S3 迁移到OSS;youpai,从又拍云迁移到到OSS;http,通过提供的HTTP链接列表迁移数据到OSS;cos,从腾讯云存储 COS 迁移到OSS;azure,从 Azuer Blob 迁移到OSS。
srcAccessKey 源AccessKey,字符串 如果 srcType 设置为ossqiniubaiduks3s3,填写数据源的 AccessKeylocalhttp,该项不需要填写;youpaiazure则填写用户名AccountName。
srcSecretKey 源SecretKey,字符串 如果 srcType 设置为ossqiniubaiduks3s3,填写数据源的 SecretKeylocalhttp,该项不需要填学;youpai,填写操作员密码;azure,填写AccountKey。
srcDomain 源Endpoint 如果 srcType 设置为localhttp,该配置项不需要填;oss,从控制台获取的域名,非带bucket前缀的二级域名,列表请参看域名列表qiniu,从七牛控制台获取的对应bucket的域名;bos,百度BOS域名,如http://bj.bcebos.comhttp://gz.bcebos.comks3,金山ks3域名,如http://kss.ksyun.comhttp://ks3-cn-beijing.ksyun.comhttp://ks3-us-west-1.ksyun.coms3, AWS S3各 region 的域名请参考S3 Endpointyoupai,又拍云域名,如自动判断最优线路http://v0.api.upyun.com 或电信线路http://v1.api.upyun.com 或联通网通线路http://v2.api.upyun.com 或移动铁通线路http://v3.api.upyun.comcos,腾讯云填写bucket所在的区域,比如华南园区:gz、华北园区:tj、华东园区:sh;azure,Azure Blob连接字符串中的 EndpointSuffix ,如core.chinacloudapi.cn
srcBucket 源bucket名字或container名称 如果 srcType 设置为localhttp,不需要填写;azure,Azure Blob填写container名称,其它填写bucket名称。
srcPrefix 源前缀,字符串,默认为空 如果srcType=local,填写本地目录,需要完整路径,以 / 进行分割并且以 / 结尾,如 c:/example//data/example/srcTypeossqiniubosks3youpais3,则为待同步object的前缀,不包括bucket名称,如data/to/oss/同步所有文件srcPrefix设置为空
destAccessKey 目的AccessKey,字符串 OSS的 AccessKeyID,请到阿里云控制台查看。
destSecretKey 目的SecretKey,字符串 OSS的 AccessKeySecret,请到阿里云控制台查看。
destDomain 目的endpoint,字符串 控制台获取,非带bucket前缀的二级域名,列表请参看域名列表
destBucket 目的bucket,字符串 OSS的bucket名称,不需要以 / 结尾。
destPrefix 目标前缀,字符串,默认为空 目标前缀,默认为空,直接放在目标bucket下;如果要将数据同步到oss的某个目录下,请以 / 结尾,如data/in/oss/;注意oss不支持以 / 作为文件的开头,所以destPrefix请不要配置以 / 做为开头。一个本地文件路径为srcPrefix + relativePath的文件,迁移到oss的路径为destDomain/destBucket/destPrefix + relativePath;一个云端文件路径为 srcDomain/srcBucket/srcPrefix + relativePath的文件,迁移到oss的路径为destDomain/destBucket/destPrefix + relativePath
taskObjectCountLimit 每个 Task 最大的文件数,整型,默认10000 该配置项会影响到任务执行的并行度,一般配置为 总文件数/Worker总数/迁移线程数(workerTaskThreadNum) ,最大值不要超过50000,如果不知道总文件数,请使用默认值。
taskObjectSizeLimit 每个 Task 最大数据量,整型,单位bytes,默认1GB 该配置项会影响到任务执行的并行度,一般配置为 总数据量/Worker总数/迁移线程数(workerTaskThreadNum),如果不知道总数据量,请使用默认值。
scanThreadCount 并行扫描文件的线程数,整型,默认1 该配置项与扫描文件的效率有关,没有特殊需求请不要修改
maxMultiThreadScanDepth 最大允许并行扫描目录的深度,整型,默认1 默认值1表示在顶级目录间并行扫描; 没有特殊需求不要修改,随意配置过大值会导致任务无法正常运行
appId 腾讯云COS的 appId ,整型 srcType=cos时有效。
httpListFilePath HTTP列表文件的绝对路径,字符串 srcType=http时有效,源为HTTP链接地址时,需要提供内容为HTTP链接地址文件的绝对路径,如c:/example/http.list;该文件中的HTTP链接需要划分成两列,以空格分开,分别代表前缀和上传到OSS后的相对路径。例如c:/example/http.list文件内容如下:
http://127.0.0.1/aa/    bb.jpg
http://127.0.0.1/    cc/dd.jpg
两行,迁移到OSS的文件名分别是 destPrefix + bb.jpgdestPrefix + cc/dd.jpg

workers

workers是分布式模式先独有的,每个IP一行,如:

192.168.1.6
192.168.1.7
192.168.1.8

提示:

  • 上述配置情况下,192.168.1.6上会启动 MasterWorkerTaskTrackerConsole 也需要在该机上执行。
  • 多个 Worker 机器的用户名、登录方式、工作目录请确保相同。

运行环境

  • Java 1.7及以上

相关文章:OssImport系列之二——单机部署
相关文章:OssImport系列之三——分布式部署

目录
相关文章
|
4月前
|
运维 Kubernetes NoSQL
【k8s-1.34.2安装部署】九.k8s管理平台xkube安装部署
xkube是一款永久免费、无功能限制的云原生Kubernetes多集群管理工具,支持PC端与APP端,提供集群管理、运维监控、CI/CD发布等功能,助力企业实现跨集群统一管理与自动化运维。
500 3
【k8s-1.34.2安装部署】九.k8s管理平台xkube安装部署
|
机器学习/深度学习 编解码 人工智能
AI短视频制作一本通:文本生成视频、图片生成视频、视频生成视频
AI短视频制作一本通:文本生成视频、图片生成视频、视频生成视频
2998 0
|
11月前
|
人工智能 自然语言处理 算法
AI智能混剪视频大模型开发方案:从文字到视频的自动化生成·优雅草卓伊凡
AI智能混剪视频大模型开发方案:从文字到视频的自动化生成·优雅草卓伊凡
1403 0
AI智能混剪视频大模型开发方案:从文字到视频的自动化生成·优雅草卓伊凡
|
12月前
|
测试技术 API 开发工具
Postman 对比 Swagger:您应该了解的关键区别
本文探讨了 Postman 和 Swagger 的主要特性和局限性,并推荐了为什么 Apifox 是更卓越的 API 文档工具。
|
供应链 监控 数据可视化
探索 Leangoo 在电商新品运营中的创新应用与价值
Leangoo 提供了一套全面高效的电商新品运营解决方案,涵盖项目规划、营销推广、供应链管理及数据分析等方面,通过任务卡、甘特图等工具实现跨部门协作与进度追踪,助力电商企业在竞争中脱颖而出。
探索 Leangoo 在电商新品运营中的创新应用与价值
|
域名解析 弹性计算 网络安全
CEN+私网NAT实现跨地域访问云服务需求-CEN企业版
本文介绍了如何通过企业版云企业网和私网NAT配置,实现ECS内网跨地域访问OSS资源的方法。该方法避免了跨地域配置云服务网段时可能出现的管控异常问题,适用于其他云服务如MQ等。
452 1
|
敏捷开发 Java 测试技术
「架构」模型驱动架构设计方法及其运用
本文探讨了MDA在软件开发中的应用,从需求分析到测试,使用UML建模功能需求,通过PIM设计架构,自动生成代码以减少错误。MDA提升了可维护性、可扩展性和可移植性,通过工具如Enterprise Architect和Eclipse MDT支持自动化转换。虽然有挑战,如模型创建和平台转换,但结合敏捷方法和适当工具能有效解决,从而提高开发效率和软件质量。
1607 0
「架构」模型驱动架构设计方法及其运用
|
SQL 分布式计算 MaxCompute
MaxCompute操作报错合集之通过UDF(用户定义函数)请求外部数据库资源并遇到报错,是什么原因
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
888 0
|
Java 中间件 应用服务中间件
代码层面的读写分离vs使用proxysql
代码层面的读写分离vs使用proxysql
314 0