最近更新时间:2024-03-27 18:52:58
下载地址:KS3 Import
支持将本地目录内文件、url列表文件或公有云文件同步到指定KS3 Bucket上,目前支持将金山云KS3、阿里云OSS、腾讯云COS、百度云、七牛云、Azure和 AWS S3 设置为迁移源
支持增量上传:a. 不在成功列表中;b. 在成功列表中,但最后更新时间不同
支持大文件断点续传
支持流量控制
并发上传
迁移进度查询
海量文件迁移,部分失败情况,重新全量上传即可,已经成功上传的文件会自动跳过(勿删除log)
支持选择存储类型,标准或低频
用户系统需要具备JDK 1.8 环境,建议使用Oracle版本JDK。
Windows安装JDK方法参考文档:WIN7下JDK安装与配置。
安装完成后,在命令提示符下,执行java -version,来确认是否安装成功。
如下所示,即安装成功
Linux安装JDK方法参考文档:Linux下JDK安装与配置。
安装完成后,在终端下执行java -version,来确认是否安装成功。
如下所示,即安装成功
假设work_dir=/your_dir/ 配置文件中请填写绝对路径
unzip KS3-import-XXXXXXXX.zip -d ${work_dir}
根据${work_dir}下解压后的sample.conf,创建用户自己新的任务配置文件xxx.conf。
所有的配置参数项前后都不允许有空格。
配置文件中,字段具体含义如下。
字段 | 说明 | 是否必填 |
---|---|---|
taskName | 迁移任务名称 | 否 |
threadsNum | 并发上传的线程数 | 是 |
srcType | 同步源类型,不能为空 | 是 |
srcAccessKey | 数据源的AccessKey | 否 |
srcSecretKey | 数据源的SecretKey | 否 |
srcDomain | 数据源bucket所在区域对应域名,不同区域对应的域名不同。 | 否 |
srcBucket | 源bucket | 否 |
srcPrefix | 源前缀,匹配源前缀的文件会被迁移 | 否 |
dstAccessKey | KS3 AccessKey | 是 |
dstSecretKey | KS3 SecretKey | 是 |
dstDomain | bucket所在区域对应域名,不同区域对应的域名不同。 | 是 |
dstBucket | KS3 bucket名称 (多桶迁移COPY类型可不填写,若填写则进行忽略) | 是 |
dstPrefix | KS3中存放迁移数据的目标前缀,被迁移的文件会存放在目标桶里与dstPrefix一致的目录结构内 | 否 |
maxNetThroughput | 单位为KB/s,<=0 表示不设限。例:如果限速为10Mb/s,则对应的以MB为单位的限速是10*0.128MB/s=1.28MB/s,对应的maxNetThroughput=1280KB/s | 是 |
cannedAcl | 文件权限配置 | 是 |
storageType | 选择上传文件存储类型 | 是 |
filterEnable | 过滤器开关 true-打开 false-关闭;过滤器可根据文件名和文件修改时间过滤文件 | 否 |
urlRangeDownload | url文件是否使用range下载 true-打开 false-关闭 | 否 |
fileNameInclude | 文件名称白名单,多个用英文逗号分隔 | 否 |
fileNameExclude | 文件名称黑名单,多个用英文逗号分隔,可用于过滤前缀相同的文件 | 否 |
modifyTimeRange | 文件修改时间范围,以#分割,时间格式为yyyy-MM-dd HH:mm:ss,如2005-01-12 00:00:00#2016-01-12 00:00:00 | 否 |
singleFileSize | 分块上传文件大小阈值,大于该值使用分块上传 ,单位为Byte, 默认200MB | 否 |
partSize | 分块上传块大小 ,单位为Byte, 默认100MB | 否 |
uploadPartPoolSize | 单文件分块传输并发数, 默认10 | 否 |
maxNetThroughputRange | 使用分时限流的流量配置,单位为KB/s,<=0 表示不设限,不在区间可以设置不同的流量如maxNetThroughputRange= 1000#2000#3000;限流区间要与限流时间段一一对应,否则设置无效;执行限速优先级:分时限速>maxNetThroughput>不限速 | 否 |
maxNetThroughputTimeRange | 执行分时限流的时间段,可设置多个限流时段,如maxNetThroughputTimeRange= 11:50:00-15:48:50#15:49:00-15:49:50#15:50:00-15:51:50;限流区间要与限流时间段一一对应,否则设置无效;当时间段有重叠时以第一个时间段的限速为准 | 否 |
incrementalMode | 增量模式下的同步;incrementalMode=true时开启增量模式(URL类型不支持增量模式),false为关闭,默认为false;如果设为true,会每间隔incrementalModeInterval(单位秒)重新扫描一次增量数据,并将增量数据迁移到KS3 | 否 |
incrementalModeInterval | 开启增量时会每间隔incrementalModeInterval(单位秒)重新扫描一次增量数据,并将增量数据迁移到KS3;注意:可配置的最小间隔为900秒,不建议配置成大于3600秒的值,会浪费大量请求,造成额外的系统开销 | 否 |
useSrcAcl | 是否使用数据源文件Acl类型,值:true|false | 否 |
incrementalModeCount | 增量迁移若干次数后结束迁移任务,取值范围为1-30,默认为1 | 否 |
useHttps | 是否开启HTTPS传输,true为开启 false为关闭,默认值为false | 否 |
skipDstExistFile | 含义:数据迁移时是否跳过目标桶已经存在的文件,为int类型。 | 否 |
conciseModel | 控制台打印输出模式 简洁模式true 详细模式false(不影响log) | 否 |
useMultiBucketMode | 是否开启多桶迁移模式:填写值:true|false。目前仅仅支持Azure迁移类型 | 否 |
multiMode | 设置多桶迁移模式: 填写值:LEVEL、COPY,分别对应两种多桶迁移类型。 | 否 |
multiInclude | 在多桶迁移模式下,桶名过滤白名单 (若过滤多项桶则使用逗号分割)。目前仅仅支持Azure迁移类型 | 否 |
multiExclude | 在多桶迁移模式下,桶名过滤黑名单(若过滤多项桶则使用逗号分割)。目前仅仅支持Azure迁移类型 | 否 |
retryCount | 结束时的重试次数,默认为三次 | 否 |
useLocalDBCheck | 是否优先使用本地DB判断文件是否已经上传过,默认为true,设置成false将不使用本地DB做判断直接拉取目标桶判断是否需要上传 | 否 |
logLevel | 表示日志的分级,取值off、low、mid、high、all。默认为low | 否 |
callProgressUrl | 任务进度回调URL,可以在任务运行中和运行结束时向配置的URL上报任务进度 | 否 |
autoMode | 自动调整模式。填写值: true|false,默认值为false,表示关闭该模式。设置为true时会根据当前机器负载和线程池运行情况自动调整线程数 | 否 |
迁移类型 | 配置文件 | 说明 |
---|---|---|
从本地迁移到KS3 | 适合从自建IDC迁移。 | |
从url迁移到KS3 | 当客户为CDN客户,且数据量级较大的情况下,可以使用url方式进行迁移。 | |
从百度云迁移到KS3 | srcDomain为百度云官方所提供的AWS S3兼容域名,例如s3.bj.bcebos.com。详情请参见文档:服务域名。 | |
从腾讯云迁移到KS3 | 1. srcAccessKey内填写cos用户的SecretId | |
从七牛云迁移到KS3 | srcDomain填写目标桶的外链域名 | |
从KS3迁移到KS3 | ||
从阿里云迁移到KS3 | ||
从AWS S3迁移到KS3 |
遍历列表文件中的每个URL链接,对于每个URL链接,执行以下步骤:
首先确定字符串end的值,它表示去掉查询参数后的URL长度。如果URL中不包含问号(即没有查询参数),则end的值为URL的长度。如果包含问号,end的值为问号在URL中的位置。
接下来,截取URL中的相对文件名。首先找到第一个/字符出现的位置(跳过//之后的字符),然后从该位置+1开始,截取直到end位置的字符串,得到相对文件名。
如果dstPrefix为空,objectKey将是相对文件名。如果dstPrefix不为空,那么objectKey将是dstPrefix和相对文件名的组合。
示例:
假设有以下参数值:
dstPrefix: "upload/"
srcType: "URL"
以上示例中,比如URL地址为:“https://example.com/files/data1.txt?abc=123” ,将生成以下objectKey:
upload/files/data1.txt
这是因为end的值为问号在URL中的位置,然后根据给定的代码片段,从URL中截取相对文件名files/data1.txt。最后,使用dstPrefix和相对文件名的组合作为objectKey。
注:如需保持与url地址显示的目录一致,只需将dstPrefix设置为与url目录一致的名称即可。
1. 对于本地文件路径执行以下步骤:
如果srcType是LOCAL,将本地文件路径中的反斜杠(\)替换为斜杠(/)。
检查本地文件路径和srcPrefix,它们必须是绝对路径,且srcPrefix必须以斜杠(/)结束。
确定相对文件名,即从本地文件路径中去除srcPrefix的部分。
2. 根据dstPrefix的值生成objectKey:
如果dstPrefix为空,objectKey将是相对文件名。
如果dstPrefix不为空,那么objectKey将是dstPrefix和相对文件名的组合。
示例:
假设有以下参数值:
srcPrefix: "/Users/user/files/"
dstPrefix: "upload/"
srcType: "LOCAL"
以上示例中,比如srcPrefix目录下有个文件地址为 : “/Users/user/files/data1.txt”,将生成以下objectKey:
upload/data1.txt
这是因为相对文件名为data1.txt(从本地文件路径中去除srcPrefix部分得到),然后使用dstPrefix和相对文件名的组合作为objectKey。
注:如需保持与本地目录一致,只需将dstPrefix设置为与本地目录一致的名称即可。
1. 对于给定的云存储中的对象路径,执行以下步骤:
检查云存储中的对象路径和 srcPrefix。srcPrefix 必须是源云存储中的一个目录路径。
确定相对文件名,即从云存储中的对象路径中去除 srcPrefix 的部分。
2. 根据 dstPrefix 的值生成 objectKey:
如果 dstPrefix 为空,objectKey 将是相对文件名。
如果 dstPrefix 不为空,那么 objectKey 将是 dstPrefix 和相对文件名的组合。
示例:
假设有以下参数值:
srcPrefix: "files/"
dstPrefix: "upload/"
srcType: "ks3"
以上示例中,比如云存储中的某个对象路径为"files/data1.txt",将生成以下objectKey:
upload/data1.txt
这是因为相对文件名为 data1.txt(从云存储中的对象路径中去除 srcPrefix 部分得到),然后使用 dstPrefix 和相对文件名的组合作为 objectKey。
注:如需保持与原目录一致,只需将dstPrefix设置为与原目录一致的名称即可。
下面示例中, 准备迁移D:\example\local\ 目录下的六个文件
请设置srcType=local
srcAccessKey,srcSecretKey,srcDomain,srcBucket为空即可,如果不为空则会被忽略
请设置srcPrefix的值为目标文件的绝对路径并以/或\结尾
srcType=local
srcAccessKey=
srcSecretKey=
srcDomain=
srcBucket=
srcPrefix=D:/localpath/
参考配置文件:local.conf
Windows下:快捷键Windows+R>在弹窗中输入cmd>按下回车
Linux下:Ctril+Alt+T
cd D:\KS3-import-x.x.x-dist
java -jar KS3-import-x.x.x.jar -c xxx.conf start
注意:xxx.conf 配置文件如果不和KS3-import-x.x.x.jar在同一个目录下,-c 需要指明配置文件的正确路径。
linux环境下如果想要后台执行,则用如下命令:
nohup java -jar KS3-import-1.0.0.jar -c xxx.conf start > nohup.out 2>&1 &
其他命令请参考:KS3-import常用指令
创建列表文件xxx.txt如下图所示, 以迁移txt文件中3个url指向的文件。每个url单独一行。
请设置srcType=url
srcAccessKey,srcSecretKey,srcDomain,srcBucket为空即可,如果不为空则会被忽略
请设置srcPrefix的值为列表文件的绝对路径
srcType=url
srcAccessKey=
srcSecretKey=
srcDomain=
srcBucket=
srcPrefix=D:/list.txt
参考配置文件:url.conf
Windows下:快捷键Windows+R>在弹窗中输入cmd>按下回车
Linux下:Ctril+Alt+T
cd D:\KS3-import-x.x.x-dist
java -jar KS3-import-x.x.x.jar -c xxx.conf start
注意:xxx.conf 配置文件如果不和KS3-import-x.x.x.jar在同一个目录下,-c 需要指明配置文件的正确路径。
linux环境下如果想要后台执行,则用如下命令:
nohup java -jar KS3-import-1.0.0.jar -c xxx.conf start > nohup.out 2>&1 &
其他命令请参考:KS3-import常用指令
在本示例中,我们迁移KS3-import桶下的6个文件如下图所示。
请设置
srcType=ks3
srcDomain请填写对应访问方式的Endpoint
参考配置文件:ks3.conf
Windows下:快捷键Windows+R>在弹窗中输入cmd>按下回车
Linux下:Ctril+Alt+T
cd D:\KS3-import-x.x.x-dist
java -jar KS3-import-x.x.x.jar -c xxx.conf start
注意:xxx.conf 配置文件如果不和KS3-import-x.x.x.jar在同一个目录下,-c 需要指明配置文件的正确路径。
linux环境下如果想要后台执行,则用如下命令:
nohup java -jar KS3-import-1.0.0.jar -c xxx.conf start > nohup.out 2>&1 &
其他命令请参考:KS3-import常用指令
在本示例中,我们迁移KS3-import桶下的6个文件如下图所示。
参考配置文件:bos.conf
请设置
srcType=bos
srcDomain请填写桶概览中的官方域名
参考配置文件:bos.conf
Windows下:快捷键Windows+R>在弹窗中输入cmd>按下回车
Linux下:Ctril+Alt+T
cd D:\KS3-import-x.x.x-dist
java -jar KS3-import-x.x.x.jar -c xxx.conf start
注意:xxx.conf 配置文件如果不和KS3-import-x.x.x.jar在同一个目录下,-c 需要指明配置文件的正确路径。
linux环境下如果想要后台执行,则用如下命令:
nohup java -jar KS3-import-1.0.0.jar -c xxx.conf start > nohup.out 2>&1 &
其他命令请参考:KS3-import常用指令
在本示例中,我们迁移cos3-uptool桶下的6个文件如下图所示。
请设置
srcType=cos
srcDomain请填写桶概览中的所属地域英文名
srcBucket请填写完整名称,附带编号
参考配置文件:cos.conf
Windows下:快捷键Windows+R>在弹窗中输入cmd>按下回车
Linux下:Ctril+Alt+T
cd D:\KS3-import-x.x.x-dist
java -jar KS3-import-x.x.x.jar -c xxx.conf start
注意:xxx.conf 配置文件如果不和KS3-import-x.x.x.jar在同一个目录下,-c 需要指明配置文件的正确路径。
linux环境下如果想要后台执行,则用如下命令:
nohup java -jar KS3-import-1.0.0.jar -c xxx.conf start > nohup.out 2>&1 &
其他命令请参考:KS3-import常用指令
注意:迁移时因七牛源站收费标准问题,若使用分块功能,会导致每块为整体资源的费用,故不建议使用分块功能时把分块功能阈值调大
在本示例中,我们迁移qiniu-uptool桶下的6个文件如下图所示。
请设置
srcType=qiniu
srcDomain请填写桶概览中的外链域名
参考配置文件:qiniu.conf
Windows下:快捷键Windows+R>在弹窗中输入cmd>按下回车
Linux下:Ctril+Alt+T
cd D:\KS3-import-x.x.x-dist
java -jar KS3-import-x.x.x.jar -c xxx.conf start
注意:xxx.conf 配置文件如果不和KS3-import-x.x.x.jar在同一个目录下,-c 需要指明配置文件的正确路径。
linux环境下如果想要后台执行,则用如下命令:
nohup java -jar KS3-import-1.0.0.jar -c xxx.conf start > nohup.out 2>&1 &
其他命令请参考:KS3-import常用指令
在本示例中,我们迁移oss-uptool桶下的6个文件如下图所示。
请设置
srcType=oss
srcDomain请填写对应访问方式的Endpoint
参考配置文件oss.conf
Windows下:快捷键Windows+R>在弹窗中输入cmd>按下回车
Linux下:Ctril+Alt+T
cd D:\KS3-import-x.x.x-dist
java -jar KS3-import-x.x.x.jar -c xxx.conf start
注意:xxx.conf 配置文件如果不和KS3-import-x.x.x.jar在同一个目录下,-c 需要指明配置文件的正确路径。
linux环境下如果想要后台执行,则用如下命令:
nohup java -jar KS3-import-1.0.0.jar -c xxx.conf start > nohup.out 2>&1 &
其他命令请参考:KS3-import常用指令
4.1 启动任务
java -jar KS3-import-x.x.x.jar -c xxx.conf start
注意:xxx.conf 配置文件如果不和KS3-import-x.x.x.jar在同一个目录下,-c 需要指明配置文件的正确路径。
linux环境下如果想要后台执行,则用如下命令:
nohup java -jar KS3-import-x.x.x.jar -c xxx.conf start > nohup.out 2>&1 &
注意:srcBucket, srcPrefix, dstBucket, dstPrefix确定任务的唯一性
4.2 查询任务状态
java -jar KS3-import-x.x.x.jar -c xxx.conf stat
4.3 清空任务数据
java -jar KS3-import-x.x.x.jar -c xxx.conf clean
注意:
若任务正在运行,则不能清空
若任务未曾运行过,则会提示任务不存在
使用增量上传功能,需保留任务数据
4.4 导出成功文件列表
java -jar KS3-import-x.x.x.jar -c xxx.conf export_ok_list ${export_file}
注意:只有任务退出,该操作才允许被执行
4.5 导出失败文件列表
java -jar KS3-import-x.x.x.jar -c xxx.conf export_fail_list ${export_file}
注意:只有任务退出,该操作才允许被执行;导出文件为txt格式,每一行都是迁移失败的文件key
4.6 增量上传 以及 失败重传
等待当前任务退出后,重新执行“启动任务”的命令,要注意,任务的配置文件不要做修改
java -jar KS3-import-x.x.x.jar -c xxx.conf start
注意:执行选项start持续运行,所需最小内存为100MB
4.7 扫描任务数据
可在任务执行前通过scan命令确认需要迁移的文件是否正确。scan命令不会真正执行迁移操作
java -jar KS3-import-x.x.x.jar -c xxx.conf scan
会在${work_dir}下创建logs目录,执行情况可关注statistic.log,如有问题请将info.log,warn.log,error.log发给ks3售前(后)咨询
上传成功示例
task started...
[PRODUCER] finish to scan objects from last task unconsumed files | counts:0
local scan finished, will start retryIntoQueue
[Fail:0 / Success:2 / Total:2,Consumer:2 + QueueSize:0] file=D:/test/test02.txt KEY = tests/test02.txt upload ok
[Fail:0 / Success:3 / Total:3,Consumer:0 + QueueSize:0] file=D:/test/test01/test04.txt KEY = tests/test01/test04.txt upload ok
[Fail:0 / Success:2 / Total:2,Consumer:1 + QueueSize:0] file=D:/test/test01/test05.txt KEY = tests/test01/test05.txt upload ok
[Fail:0 / Success:4 / Total:4,Consumer:6 + QueueSize:0] file=D:/test/test03.txt KEY = tests/test03.txt upload ok
end retry task,retry Times = 0
task will exit
上传失败示例
task started...
[PRODUCER] finish to scan objects from last task unconsumed files | counts:0
[PRODUCER] scan object finished
[Fail:2 / Success:0 / Total:2,Consumer:8 + QueueSize:0] file=test/test02.txt KEY = test/test02.txt upload failed, reason=GET_DATA_FAIL
[Fail:2 / Success:0 / Total:2,Consumer:6 + QueueSize:0] file=test/test03.txt KEY = test/test03.txt upload failed, reason=GET_DATA_FAIL
[Fail:3 / Success:0 / Total:3,Consumer:7 + QueueSize:0] file=test/test01/test05.txt KEY = test/test01/test05.txt upload failed, reason=GET_DATA_FAIL
[Fail:4 / Success:0 / Total:4,Consumer:0 + QueueSize:0] file=test/test01/test04.txt KEY = test/test01/test04.txt upload failed, reason=GET_DATA_FAIL
[PRODUCER] finish to scan objects from last task unconsumed files | counts:0
[PRODUCER] start to scan objects from last task failed files
[PRODUCER] finish to scan objects from last task failed files | counts = 4
[Fail:4 / Success:0 / Total:4,Consumer:3 + QueueSize:0] file=test/test01/test04.txt KEY = test/test01/test04.txt upload failed, reason=GET_DATA_FAIL
[Fail:4 / Success:0 / Total:4,Consumer:1 + QueueSize:0] file=test/test03.txt KEY = test/test03.txt upload failed, reason=GET_DATA_FAIL
[Fail:4 / Success:0 / Total:4,Consumer:2 + QueueSize:0] file=test/test02.txt KEY = test/test02.txt upload failed, reason=GET_DATA_FAIL
[Fail:4 / Success:0 / Total:4,Consumer:0 + QueueSize:0] file=test/test01/test05.txt KEY = test/test01/test05.txt upload failed, reason=GET_DATA_FAIL
end retry task,retry Times = 1
task will exit
1. 检查目标空间是否存在,dstDomain设置和目标空间对应关系是否正确
2. 检查dstAccessKey和dstSecretKey是否正确
3. 在windows环境下,srcPrefix目录分隔符用"/“或”\",不能用""
4. 上传时设置 filterEnable=true fileNameExclude=$ 可满足不上传前缀为$的文件,排除其他格式前缀文件同理。
5. 每上传一个文件,都会在工具目录下生成一个后缀为.db的文件,记录上传信息。如果要重复上传此文件(文件最后修改时间都没有变),将会提示already uploaded错误信息,删除对应的.db文件后,可正常上传。建议这种情况下,用户使用SDK或者KS3Util进行覆盖上传。
6. 客户端时间以北京时间为准,否则会导致权限错误。
纯净模式