hadoop jar cos-distcp-${version}.jar \\-libjars cos_api-bundle-${version}.jar,hadoop-cos-${version}.jar \\-Dfs.cosn.credentials.provider=org.apache.hadoop.fs.auth.SimpleCredentialProvider \\-Dfs.cosn.userinfo.secretId=COS_SECRETID \\-Dfs.cosn.userinfo.secretKey=COS_SECRETKEY \\-Dfs.cosn.bucket.region=ap-guangzhou \\-Dfs.cosn.impl=org.apache.hadoop.fs.CosFileSystem \\-Dfs.AbstractFileSystem.cosn.impl=org.apache.hadoop.fs.CosN \\--src /data/warehouse \\--dest cosn://examplebucket-1250000000/warehouse
hadoop jar cos-distcp-${version}.jar --help
查看 COSDistCp 支持的参数选项,其中${version}
为版本号,以下为当前版本 COSDistCp 的参数说明:属性键 | 说明 | 默认值 | 是否必填 |
--help | 输出 COSDistCp 支持的参数选项 示例:--help | 无 | 否 |
--src=LOCATION | 指定拷贝的源目录,可以是 HDFS 或者 COS 路径 示例:--src=hdfs://user/logs/ | 无 | 是 |
--dest=LOCATION | 指定拷贝的目标目录,可以是 HDFS 或者 COS 路径 示例:--dest=cosn://examplebucket-1250000000/user/logs | 无 | 是 |
--srcPattern=PATTERN | 指定正则表达式对源目录中的文件进行过滤 示例: --srcPattern='.*\\.log$' 注意:您需要将参数使用单引号包围,以避免符号 * 被 shell 解释 | 无 | 否 |
--taskNumber=VALUE | 指定拷贝进程数,示例:--taskNumber=10 | 10 | 否 |
--workerNumber=VALUE | 指定拷贝线程数,COSDistCp 在每个拷贝进程中创建该参数大小的拷贝线程池 示例:--workerNumber=4 | 4 | 否 |
--filesPerMapper=VALUE | 指定每个 Mapper 输入文件的行数 示例:--filesPerMapper=10000 | 500000 | 否 |
--groupBy=PATTERN | 指定正则表达式对文本文件进行聚合 示例:--groupBy='.*group-input/(\\d+)-(\\d+).*' | 无 | 否 |
--targetSize=VALUE | 指定目标文件的大小,单位:MB,与 --groupBy 一起使用 示例:--targetSize=10 | 无 | 否 |
--outputCodec=VALUE | 指定输出文件的压缩方式,可选 gzip、lzo、snappy、none 和 keep,其中: 1. keep 保持原有文件的压缩方式 1. none 则根据文件后缀对文件进行解压, 示例:--outputCodec=gzip 注意:如果存在文件 /dir/test.gzip 和 /dir/test.gz,指定输出格式为 lzo,最终只会保留一个文件 /dir/test.lzo | keep | 否 |
--deleteOnSuccess | 指定源文件拷贝到目标目录成功时,立即删除源文件 示例:--deleteOnSuccess, 注意:1.7 及以上版本不再提供该参数,建议数据迁移成功并使用 --diffMode 校验后,再删除源文件系统的数据 | false | 否 |
--multipartUploadChunkSize=VALUE | 指定 Hadoop-COS 插件传输文件到 COS 时分块的大小,COS 支持的最大分块数为 10000,您可根据文件大小,调整分块大小,单位:MB,默认为8MB 示例:--multipartUploadChunkSize=20 | 8MB | 否 |
--cosServerSideEncryption | 指定文件上传到 COS 时,使用 SSE-COS 作为加解密算法 示例:--cosServerSideEncryption | false | 否 |
--outputManifest=VALUE | 指定拷贝完成的时候,在目标目录下生成本次拷贝的目标文件信息列表(GZIP 压缩) 示例:--outputManifest=manifest.gz | 无 | 否 |
--requirePreviousManifest | 要求指定 --previousManifest=VALUE 参数,以进行增量拷贝 示例:--requirePreviousManifest | false | 否 |
--previousManifest=LOCATION | 前一次拷贝生成的目标文件信息 示例:--previousManifest=cosn://examplebucket-1250000000/big-data/manifest.gz | 无 | 否 |
--copyFromManifest | 和 --previousManifest=LOCATION 一起使用,可将 --previousManifest 中的文件,拷贝到目标文件系统 示例:--copyFromManifest | false | 否 |
--storageClass=VALUE | 指定对象存储类型,可选值为 STANDARD、STANDARD_IA、ARCHIVE、DEEP_ARCHIVE、INTELLIGENT_TIERING,关于更多支持的存储类型和介绍,请参见 存储类型概述 | 无 | 否 |
--srcPrefixesFile=LOCATION | 指定本地文件,该文件中每行包含一个需要拷贝的源目录 示例:--srcPrefixesFile=file:///data/migrate-folders.txt | 无 | 否 |
--skipMode=MODE | 拷贝文件前,校验源文件和目标文件是否相同,相同则跳过,可选 none(不校验)、length (长度)、checksum(CRC值)、length-mtime(长度+mtime值)和 length-checksum(长度 + CRC 值) 示例:--skipMode=length | length-checksum | 否 |
--checkMode=MODE | 当文件拷贝完成的时候,校验源文件和目标文件是否相同,可选 none(不校验)、 length (长度)、checksum(CRC值)、length-mtime(长度+mtime值)和 length-checksum(长度 + CRC 值) 示例:--checkMode=length-checksum | length-checksum | 否 |
--diffMode=MODE | 指定获取源和目的目录的差异文件列表,可选 length (长度)、checksum(CRC 值)、length-mtime(长度+mtime值)和 length-checksum(长度 + CRC 值) 示例:--diffMode=length-checksum | 无 | 否 |
--diffOutput=LOCATION | 指定 diffMode 的 HDFS 输出目录,该输出目录必须为空 示例:--diffOutput=/diff-output | 无 | 否 |
--cosChecksumType=TYPE | 指定 Hadoop-COS 插件使用的 CRC 算法,可选值为 CRC32C 和 CRC64 示例:--cosChecksumType=CRC32C | CRC32C | 否 |
--preserveStatus=VALUE | 指定是否将源文件的 user、group、permission、xattr 和 timestamps 元信息拷贝到目标文件,可选值为 ugpxt(即为 user、group、permission、xattr 和 timestamps 的英文首字母) 示例:--preserveStatus=ugpt | 无 | 否 |
--ignoreSrcMiss | 忽略存在于文件清单中,但拷贝时不存在的文件 | false | 否 |
--promGatewayAddress=VALUE | 指定 MapReduce 任务运行的 Counter 数据推送到的 Prometheus PushGateway 的地址和端口 | 无 | 否 |
--promGatewayDeleteOnFinish=VALUE | 指定任务完成时,删除 Prometheus PushGateway 中 JobName 的指标集合 示例:--promGatewayDeleteOnFinish=true | true | 否 |
--promGatewayJobName=VALUE | 指定上报给 Prometheus PushGateway 的 JobName 示例:--promGatewayJobName=cos-distcp-hive-backup | 无 | 否 |
--promCollectInterval=VALUE | 指定收集 MapReduce 任务 Counter 信息的间隔,单位:ms 示例:--promCollectInterval=5000 | 5000 | 否 |
--promPort=VALUE | 指定将 Prometheus 指标暴露给外部的 Server 端口 示例:--promPort=9028 | 无 | 否 |
--enableDynamicStrategy | 指定开启任务动态分配策略,使迁移速度快的任务迁移更多的文件。 注意:该模式存在一定局限性,例如任务计数器在进程异常的情况下计数不准确,请迁移完成后用 --diffMode 进行数据校验 示例:--enableDynamicStrategy | false | 否 |
--splitRatio=VALUE | 指定 Dynamic Strategy 的切分比例,splitRatio 值越大,则任务粒度越小 示例:--splitRatio=8 | 8 | 否 |
--localTemp=VALUE | 指定 Dynamic Strategy 生成的任务信息文件所在的本地文件夹 示例:--localTemp=/tmp | /tmp | 否 |
--taskFilesCopyThreadNum=VALUE | 指定 Dynamic Strategy 任务信息文件拷贝到 HDFS 上的并发度 示例:--taskFilesCopyThreadNum=32 | 32 | 否 |
--statsRange=VALUE | 指定统计的区间范围 示例:---statsRange=0,1mb,10mb,100mb,1gb,10gb,inf | 0,1mb,10mb,100mb,1gb,10gb,inf | 否 |
--printStatsOnly | 只统计待迁移文件大小的分布信息,不迁移数据 示例:--printStatsOnly | 无 | 否 |
--bandWidth | 限制读取每个迁移文件的带宽,单位为:MB/s,默认-1,不限制读取带宽。 示例:--bandWidth=10 | 无 | 否 |
--jobName | 指定迁移任务的名称。 示例:--jobName=cosdistcp-to-warehouse | 无 | 否 |
--compareWithCompatibleSuffix | 使用 --skipMode 和 --diffMode 参数时,是否将源文件的后缀 gzip 转换为 gz,lzop 文件后缀转换为 lzo,进行判断。 示例:--compareWithCompatibleSuffix | 无 | 否 |
--delete | 保证源目录和目标目录文件的一致性,将源目录中没有而目标目录中有的文件,移动到独立的 trash 目录下,同时生成文件清单。 注意:不能同时使用 --diffMode 参数 | 无 | 否 |
--deleteOutput | 指定 delete 的 HDFS 输出目录,该目录必须为空 示例: --deleteOutput=/dele-output | 无 | 否 |
--help
执行命令,查看 COSDistCp 支持的参数,示例如下:hadoop jar cos-distcp-${version}.jar --help
${version}
为 COSDistCp 版本号,例如 1.0 版本的 COSDistCp jar 包名为 cos-distcp-1.0.jar。--printStatsOnly
和 --statsRange=VALUE
执行命令,输出待迁移文件的大小分布信息:hadoop jar cos-distcp-${version}.jar --src /wookie/data --dest cosn://examplebucket-1250000000/wookie/data --printStatsOnly --statsRange=0,1mb,10mb,100mb,1gb,10gb,infCopy File Distribution Statistics:Total File Count: 4Total File Size: 1190133760| SizeRange | TotalCount | TotalSize || 0MB ~ 1MB | 0(0.00%) | 0(0.00%) || 1MB ~ 10MB | 1(25.00%) | 1048576(0.09%) || 10MB ~ 100MB | 1(25.00%) | 10485760(0.88%) || 100MB ~ 1024MB | 1(25.00%) | 104857600(8.81%) || 1024MB ~ 10240MB | 1(25.00%) | 1073741824(90.22%) || 10240MB ~ LONG_MAX| 0(0.00%) | 0(0.00%) |
--src
和 --dest
执行命令,示例如下:hadoop jar cos-distcp-${version}.jar --src /data/warehouse --dest cosn://examplebucket-1250000000/data/warehouse
yarn logs -applicationId application_1610615435237_0021 > application_1610615435237_0021.log
CosDistCp CountersBYTES_EXPECTED=10198247BYTES_SKIPPED=10196880FILES_COPIED=1FILES_EXPECTED=7FILES_FAILED=1FILES_SKIPPED=5
统计项 | 说明 |
BYTES_EXPECTED | 根据源目录统计的需拷贝的文件总大小,单位:字节 |
FILES_EXPECTED | 根据源目录统计的需拷贝文件数,包含目录文件 |
BYTES_SKIPPED | 长度或校验和值相等,不拷贝的文件总大小,单位:字节 |
FILES_SKIPPED | 长度或校验和值相等,不拷贝的源文件数 |
FILES_COPIED | 拷贝成功的源文件数 |
FILES_FAILED | 拷贝失败的源文件数 |
FOLDERS_COPIED | 拷贝成功的目录数 |
FOLDERS_SKIPPED | 跳过的目录数 |
--taskNumber
和 --workersNumber
执行命令,COSDistCp 采用多进程+多线程的拷贝架构,您可以:--taskNumber
指定拷贝进程数目--workerNumber
指定每个拷贝进程内的拷贝线程数hadoop jar cos-distcp-${version}.jar --src /data/warehouse/ --dest cosn://examplebucket-1250000000/data/warehouse --taskNumber=10 --workerNumber=5
--skipMode
执行命令。跳过源和目标具有相同长度和校验和文件的拷贝,默认值 length-checksum:hadoop jar cos-distcp-${version}.jar --src /data/warehouse --dest cosn://examplebucket-1250000000/data/warehouse --skipMode=length-checksum
--skipMode
选项用于在拷贝文件前,校验源文件和目标文件是否相同,若相同则跳过,可选 none(不校验)、length(长度)、checksum(CRC 值)和 length-checksum(长度 + CRC 值)。hadoop fs -Ddfs.checksum.combine.mode=COMPOSITE_CRC -checksum /data/test.txt/data/test.txt COMPOSITE-CRC32C 6a732798
--diffMode
和 --diffOutput
执行命令:--diffMode
可选值为 length 和 length-checksum。--diffMode=length
表示根据文件大小是否相同,获取差异文件列表。--diffMode=length-checksum
,根据文件大小和 CRC 检验和是否相同,获取差异文件列表。--diffOutput
指定 diff 操作的输出目录。
如果目标文件系统为 COS,且源文件系统的 CRC 算法与之不同,则 COSDistCp 会拉取源文件计算目的文件系统的 CRC,以进行相同 CRC 算法值的对比。以下示例中,在迁移完成后,使用 --diffMode 参数,根据文件大小和 CRC 值,校验源和目标文件是否相同:hadoop jar cos-distcp-${version}.jar --src /data/warehouse --dest cosn://examplebucket-1250000000/data/warehouse/ --diffMode=length-checksum --diffOutput=/tmp/diff-output
/tmp/diff-output/failed
目录下(1.0.5 及之前版本为 /tmp/diff-output),生成差异文件列表,您可以通过如下命令,获取除 SRC_MISS 以外的差异文件列表:hadoop fs -getmerge /tmp/diff-output/failed diff-manifestgrep -v '"comment":"SRC_MISS"' diff-manifest |gzip > diff-manifest.gz
hadoop jar cos-distcp-${version}.jar --taskNumber=20 --src /data/warehouse --dest cosn://examplebucket-1250000000/data/warehouse/ --previousManifest=file:///usr/local/service/hadoop/diff-manifest.gz --copyFromManifest
--checkMode
执行命令,文件拷贝完成时,校验源文件和目标文件长度及校验和是否一致,默认值 length-checksum。hadoop jar cos-distcp-${version}.jar --src /data/warehouse --dest cosn://examplebucket-1250000000/data/warehouse --checkMode=length-checksum
--bandWidth
执行命令,数值单位为MB。限制每个迁移文件的读取带宽为10MB/s,示例如下:hadoop jar cos-distcp-${version}.jar --src /data/warehouse --dest cosn://examplebucket-1250000000/data/warehouse --bandWidth=10
cat srcPrefixes.txt/data/warehouse/20181121//data/warehouse/20181122/
--srcPrefixesFile
参数指定该文件,执行迁移命令:hadoop jar cos-distcp-${version}.jar --src /data/warehouse --srcPrefixesFile file:///usr/local/service/hadoop/srcPrefixes.txt --dest cosn://examplebucket-1250000000/data/warehouse/ --taskNumber=20
--srcPattern
执行命令,只同步 /data/warehouse/
目录下,以 .log 结尾的日志文件,示例如下:hadoop jar cos-distcp-${version}.jar --src /data/warehouse/ --dest cosn://examplebucket-1250000000/data/warehouse --srcPattern='.*\\.log$'
hadoop jar cos-distcp-${version}.jar --src /data/warehouse/ --dest cosn://examplebucket-1250000000/data/warehouse/ --srcPattern='.*(?<!\\.temp|\\.tmp)$'
--cosChecksumType
执行命令,默认 CRC32C,可选 CRC32C 和 CRC64。hadoop jar cos-distcp-${version}.jar --src /data/warehouse --dest cosn://examplebucket-1250000000/data/warehouse --cosChecksumType=CRC32C
--storageClass
执行命令,示例如下:hadoop jar cos-distcp-${version}.jar --src /data/warehouse --dest cosn://examplebucket-1250000000/data/warehouse/ --outputManifest=manifest-2020-01-10.gz --storageClass=STANDARD_IA
--outputCodec
执行命令,您可通过该参数,将 HDFS 中的数据实时压缩备份到 COS,节省存储成本。参数可选值为:keep、none、gzip、lzop、snappy,none 选项保存的目标文件为未压缩状态,keep 保持原来文件的压缩状态。示例如下:hadoop jar cos-distcp-${version}.jar --src /data/warehouse/logs --dest cosn://examplebucket-1250000000/data/warehouse/logs-gzip --outputCodec=gzip
--deleteOnSuccess
执行命令,将 /data/warehouse
目录下文件从 HDFS 同步到 COS 后,立即删除源目录中的对应文件:hadoop jar cos-distcp-${version}.jar --src /data/warehouse --dest cosn://examplebucket-1250000000/data/warehouse --deleteOnSuccess
--outputManifest
和--previousManifest
执行命令。--outputManifest
该选项首先会在本地生成一个 gzip 压缩的 manifest.gz,并在迁移成功时,移动到 --dest
所指定的目录下。--previousManifest
指定上一次 --outputManifest
输出文件,COSDistCp 会跳过相同长度大小的文件:hadoop jar cos-distcp-${version}.jar --src /data/warehouse --dest cosn://examplebucket-1250000000/data/warehouse/ --outputManifest=manifest.gz --previousManifest= cosn://examplebucket-1250000000/data/warehouse/manifest-2020-01-10.gz
--enableDynamicStrategy
开启任务动态分配策略,使执行速度快的任务,迁移更多的文件,从而减少任务的执行时间:hadoop jar cos-distcp-${version}.jar --src /data/warehouse --dest cosn://examplebucket-1250000000/data/warehouse --enableDynamicStrategy
hadoop jar cos-distcp-${version}.jar --src /data/warehouse --dest cosn://examplebucket-1250000000/data/warehouse/ --diffMode=length-checksum --diffOutput=/tmp/diff-output
--preserveStatus
执行命令,将源文件或源目录的 user、group、permission 和 timestamps(modification time 和 access time)拷贝到目标文件或目标目录,该参数在将文件从 HDFS 拷贝到 CHDFS 时生效。
示例如下:hadoop jar cos-distcp-${version}.jar --src /data/warehouse --dest cosn://examplebucket-1250000000/data/warehouse/ --preserveStatus=ugpt
- job_name: 'cos-distcp-hive-backup'static_configs:- targets: ['172.16.16.139:9028']
--promPort=VALUE
执行命令,将当前 MapReduce 任务的计数器暴露到外部:hadoop jar cos-distcp-${version}.jar --src /data/warehouse --dest cosn://examplebucket-1250000000/data/warehouse --promPort=9028
--completionCallbackClass
指定回调类路径执行命令,COSDistCp 会在拷贝任务完成的时候, 将收集的任务信息作为参数执行回调函数。用户自定义的回调函数,需要实现如下接口,前往 下载回调示例代码:package com.qcloud.cos.distcp;import java.util.Map;public interface TaskCompletionCallback {/*** @description: When the task is completed, the callback function is executed* @param jobType Copy or Diff* @param jobStartTime the job start time* @param errorMsg the exception error msg* @param applicationId the MapReduce application id* @param: cosDistCpCounters the job*/void doTaskCompletionCallback(String jobType, long jobStartTime, String errorMsg, String applicationId, Map<String, Long> cosDistCpCounters);/*** @description: init callback config before execute*/void init() throws Exception;}
export alarmSecretId=SECRET-IDexport alarmSecretKey=SECRET-KEYexport alarmRegion=ap-guangzhouexport alarmModule=moduleexport alarmPolicyId=cm-xxxhadoop jar cos-distcp-1.4-2.8.5.jar \\-Dfs.cosn.credentials.provider=org.apache.hadoop.fs.auth.SimpleCredentialProvider \\-Dfs.cosn.userinfo.secretId=SECRET-ID \\-Dfs.cosn.userinfo.secretKey=SECRET-KEY \\-Dfs.cosn.bucket.region=ap-guangzhou \\-Dfs.cosn.impl=org.apache.hadoop.fs.CosFileSystem \\-Dfs.AbstractFileSystem.cosn.impl=org.apache.hadoop.fs.CosN \\--src /data/warehouse \\--dest cosn://examplebucket-1250000000/data/warehouse/ \\--checkMode=checksum \\--completionCallbackClass=com.qcloud.cos.distcp.DefaultTaskCompletionCallback
hadoop jar cos-distcp-${version}.jar --src /data/warehouse --dest cosn://examplebucket-1250000000/data/warehouse --taskNumber=20
hadoop jar cos-distcp-${version}.jar --src /data/warehouse --dest cosn://examplebucket-1250000000/data/warehouse/ --diffMode=length-checksum --diffOutput=/tmp/diff-output
hadoop jar cos-distcp-${version}.jar \\-Dfs.cosn.credentials.provider=org.apache.hadoop.fs.auth.SimpleCredentialProvider \\-Dfs.cosn.userinfo.secretId=COS_SECRETID \\-Dfs.cosn.userinfo.secretKey=COS_SECRETKEY \\-Dfs.cosn.bucket.region=ap-guangzhou \\-Dfs.cosn.impl=org.apache.hadoop.fs.CosFileSystem \\-Dfs.AbstractFileSystem.cosn.impl=org.apache.hadoop.fs.CosN \\--src /data/warehouse \\--dest cosn://examplebucket-1250000000/warehouse
/tmp/${randomUUID}/output/failed/
目录下,其中,${randomUUID} 为随机字符串。常见的拷贝失败原因包括:hadoop fs -getmerge /tmp/${randomUUID}/output/failed/ failed-manifestgrep -v '"comment":"SRC_MISS"' failed-manifest |gzip > failed-manifest.gz
/tmp/${randomUUID}/output/logs/
目录下的异常日志信息和拉取应用日志诊断原因,例如拉取 yarn 应用的日志,可使用如下命令:yarn logs -applicationId application_1610615435237_0021 > application_1610615435237_0021.log
hadoop jar cos-distcp-${version}.jar -Dmapreduce.task.timeout=18000 -Dmapreduce.reduce.memory.mb=8192 --src /data/warehouse --dest cosn://examplebucket-1250000000/data/warehouse
本页内容是否解决了您的问题?