版本
当前版本:2.1.7
下载地址:KS3 Import
用户系统需要具备jdk 1.8 环境,建议使用Oracle版本JDK。
Windows安装jdk:
安装完成后,在命令提示符下,执行java -version,来确认是否安装成功
如下所示,即安装成功
Linux安装jdk:
安装完成后,在终端下执行java -version,来确认是否安装成功
如下所示,即安装成功
假设work_dir=/your_dir/ 配置文件中请填写绝对路径
unzip KS3-import-XXXXXXXX.zip -d ${work_dir}
2.1 字段说明
根据${work_dir}下解压后的sample.conf,创建用户自己新的任务配置文件xxx.conf
所有的配置参数项前后都不允许有空格。
配置文件中,字段具体含义如下。
字段 | 说明 | 是否必填 |
---|---|---|
taskName | 迁移任务名称 | 否 |
threadsNum | 并发上传的线程数 (1) 配置的数目不能<=0 (2) 根据实际情况填写,更大的值可能会需要更大的运行内存,并且需要调整java运行的参数 |
是 |
srcType | 同步源类型,不能为空 (1) 目前只支持选项:local/url/ks3/oss/cos/bos/qiniu/aws/upyun/azure |
是 |
srcAccessKey | 数据源的AccessKey (1) 如果srcType是local或url,则忽略此选项 |
否 |
srcSecretKey | 数据源的SecretKey (1) 如果srcType是local或url,则忽略此选项 |
否 |
srcDomain | 数据源bucket所在区域对应域名,不同区域对应的域名不同。 (1) 请参照 https://docs.ksyun.com/documents/6761 (2) 如果srcType是local,则忽略此选项 |
否 |
srcBucket | 源bucket (1) 如果srcType是local,则忽略此选项 (多桶迁移模式可不填写,填写则提示警告并忽略) |
否 |
srcPrefix | 源前缀, 匹配源前缀的文件会被迁移 (1) 如果srcType=local,则填写本地待同步目录或文件,请注意您需要填写完整的目录或文件路径(linux下路径分隔符为“/”, win下路径分隔符为“/”或“\\”),路径不能有中文字符 (2) 如果srcPrefix指定的是一个文件,则上传后的objectKey是dstPrefix + “/” + absoluteFileName (3) 如果srcType=url,则填写url列表的绝对路径,url列表应当为一个文本文件,并逐行列出需要上传的url地址(支持http和https协议) (4) 如果srcType=其他云厂商,会迁移srcBucket/srcPrefix/下的文件。若srcPrefix为空则迁移所有文件 |
否 |
dstAccessKey | KS3 AccessKey | 是 |
dstSecretKey | KS3 SecretKey | 是 |
dstDomain | bucket所在区域对应域名,不同区域对应的域名不同。 (1) 请参照 https://docs.ksyun.com/documents/6761 |
是 |
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 | 文件权限配置 (1)可选项private/publicread (2) private私密 (3)publicread公开 |
是 |
storageType | 选择上传文件存储类型 (1)可选项STANDARD/STANDARD_IA (2) STANDARD标准 (3)STANDARD_IA低频 |
是 |
filterEnable | 过滤器开关 true-打开 false-关闭;过滤器可根据文件名和文件修改时间过滤文件 | 否 |
urlRangeDownload | url文件是否使用range下载 true-打开 false-关闭 | 否 |
fileNameInclude | 文件名称白名单,多个用英文逗号分隔 "filterEnable=true"时配置有效 |
否 |
fileNameExclude | 文件名称黑名单,多个用英文逗号分隔,可用于过滤前缀相同的文件 "filterEnable=true"时配置有效 |
否 |
modifyTimeRange | 文件修改时间范围,以#分割,时间格式为yyyy-MM-dd HH:mm:ss,如2005-01-12 00:00:00#2016-01-12 00:00:00 1、不限制开始时间#2016-01-12 00:00:00 2、不限制结束时间2005-01-12 00:00:00# 3、"filterEnable=true"时配置有效 |
否 |
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 默认为false。配置为true,会将源KS3对象的ACL复制到目标对象上,且cannedAcl选项将会被忽略。(目前qiniu,aws类型的迁移暂不支持,使用默认的private类型存储,其余追随源对象Acl类型) |
否 |
incrementalModeCount | 增量迁移若干次数后结束迁移任务,取值范围为1-30,默认为1 | 否 |
useHttps | 是否开启HTTPS传输,true为开启 false为关闭,默认值为false | 否 |
skipDstExistFile | 含义:数据迁移时是否跳过目标桶已经存在的文件,为int类型。 0- 最后修改时间:首先判断lastModified,源文件小则跳过;源文件大则覆盖重传;相等则判断文件Size,存在不一致则重传覆盖 1-条件覆盖:lastModified,Size ,Type有一个不相等则会覆盖重传 2-全覆盖:已存在文件不做处理 全部覆盖重传 3-不覆盖:全部跳过已存在文件 |
否 |
conciseModel | 控制台打印输出模式 简洁模式true 详细模式false(不影响log) | 否 |
useMultiBucketMode | 是否开启多桶迁移模式:填写值:true|false。目前仅仅支持Azure迁移类型 | 否 |
multiMode | 设置多桶迁移模式: 填写值:LEVEL、COPY,分别对应两种多桶迁移类型。 COPY: 复制源桶名称和文件到目标region,目标region没有同名桶则新建桶,有同名桶则直接上传文件。 LEVEL: 在dstBucket桶中,根据源桶名创建对应文件夹(前缀), 文件夹名为源桶名。 目前仅仅支持Azure迁移类型 |
否 |
multiInclude | 在多桶迁移模式下,桶名过滤白名单 (若过滤多项桶则使用逗号分割)。目前仅仅支持Azure迁移类型 | 否 |
multiExclude | 在多桶迁移模式下,桶名过滤黑名单(若过滤多项桶则使用逗号分割)。目前仅仅支持Azure迁移类型 | 否 |
retryCount | 结束时的重试次数,默认为三次 | 否 |
useLocalDBCheck | 是否优先使用本地DB判断文件是否已经上传过,默认为true,设置成false将不使用本地DB做判断直接拉取目标桶判断是否需要上传 | 否 |
logLevel | 表示日志的分级,取值off、low、mid、high、all。默认为low | 否 |
2.2 配置文件示例
迁移类型 | 配置文件 | 说明 |
---|---|---|
从本地迁移到KS3 | local.conf | 适合从自建IDC迁移。 本地迁移时不需要填写srcAccessKey,srcSecretKey, srcDomain, srcBucket。 srcPrefix填写文件绝对路径。 |
从url迁移到KS3 | url.conf | 当客户为CDN客户,且数据量级较大的情况下,可以使用url方式进行迁移。 不需要填写srcAccessKey,srcSecretKey, srcDomain, srcBucket。 srcPrefix填写列表文件绝对路径,该txt文件包含所有要上传的url,每个url占据新的一行。 |
从百度云迁移到KS3 | bos.conf | srcDomain为去除桶名后的官方域名。例如: 官方域名为: mybucket.bj.bcebos.com, srcDomain应填写: bj.bcebos.com |
从腾讯云迁移到KS3 | cos.conf | 1. srcAccessKey内填写cos用户的SecretId 2. srcDomain填写所属区域英文名称,如 ap-nanjing 3. 桶名须保持完整,携带后方编号,如mybucet-00001 |
从七牛云迁移到KS3 | qiniu.conf | srcDomain填写目标桶的外链域名 |
从KS3迁移到KS3 | ks3.conf | |
从阿里云迁移到KS3 | oss.conf | |
从AWS S3迁移到KS3 | aws.conf |
遍历列表文件中的每个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
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
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
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
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
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
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
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
会在${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. 客户端时间以北京时间为准,否则会导致权限错误。
文档内容是否对您有帮助?
评价建议不能为空
非常感谢您的反馈,我们会继续努力做到更好!