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系列之三——分布式部署

上一篇:OSS问题排除之抓包


下一篇:Java语言中:运算符优先级表