【Hadoop-CosDistcp-Distcp】通过命令方式将Cos中的数据迁移至HDFS,再将HDFS数据迁移至S3

【Hadoop-CosDistcp-Distcp】通过命令方式将Cos中的数据迁移至HDFS,再将HDFS数据迁移至S3

  • 1)Shell 脚本
  • 2)参数说明

1)Shell 脚本

注意:此 Shell 脚本内置了按照 sample_date 循环并发执行的功能,实际使用根据需求调整并发或去除并发即可。

cosDbName=${cosDbName}
x8vDbName=${x8vDbName}
x5lTableName=${x5lTableName}
x8vTableName=${x8vTableName}
sampleDateFile=${sampleDateFile}
parallelism=${parallelism}
start_time=`date +%s`              #定义脚本运行的开始时间

[ -e /tmp/fd1 ] || mkfifo /tmp/fd1 #创建有名管道
exec 3<>/tmp/fd1                   #创建文件描述符,以可读(<)可写(>)的方式关联管道文件,这时候文件描述符3就有了有名管道文件的所有特性
rm -rf /tmp/fd1                    #关联后的文件描述符拥有管道文件的所有特性,所以这时候管道文件可以删除,我们留下文件描述符来用就可以了
for ((i=1;i<=${parallelism};i++))
do
        echo >&3                   #&3代表引用文件描述符3,这条命令代表往管道里面放入了一个"令牌"
done

for date in `cat /opt/corns/${sampleDateFile}`
do

read -u3

{
kinit -kt /opt/conf/x9e.keytab [email protected]

yarn jar /opt/corns/cos-distcp-1.12-3.1.0.jar -libjars /opt/corns/cos_api-bundle-5.6.69.jar,/opt/corns/hadoop-cos-3.1.0-8.1.7.jar \
-Dfs.cosn.credentials.provider=org.apache.hadoop.fs.auth.SimpleCredentialProvider \
-Dfs.cosn.userinfo.secretId=******************************** \
-Dfs.cosn.userinfo.secretKey=******************************** \
-Dfs.cosn.bucket.region=ap-guangzhou \
-Dfs.cosn.impl=org.apache.hadoop.fs.CosFileSystem \
-Dfs.AbstractFileSystem.cosn.impl=org.apache.hadoop.fs.CosN \
-Dmapred.job.queue.name=*** \
--bandWidth=50 \
--taskNumber=10 \
--workerNumber=1 \
--jobName=cos2hdfs-${x5lTableName}-${date} \
--skipMode=length \
--checkMode=length \
--src cosn://buckets-name/user/x5l/hive/${cosDbName}/${x5lTableName}/sample_date=${date}/ \
--dest hdfs://prdns/warehouse/tablespace/external/hive/${x8vDbName}.db/${x8vTableName}/sample_date=${date}/

hadoop distcp \
-D mapred.task.timeout=60000000 \
-D mapreduce.job.name=hdfs2s3-${x8vTableName}-${date} \
-Dmapred.job.queue.name=x9e \
-Dfs.s3a.access.key=******************* \
-Dfs.s3a.secret.key=************************************** \
-Dfs.s3a.endpoint=test01obs.gaccloud.com.cn \
-Dfs.s3a.connection.ssl.enabled=true \
-Dfs.s3a.signing-algorithm=S3SignerType \
-Dfs.s3a.ssl.channel.mode=default_jsse_with_gcm \
-direct \
-bandwidth=150 \
-m=20 \
-numListstatusThreads=40 \
hdfs://prdns/warehouse/tablespace/external/hive/${x8vDbName}.db/${x8vTableName}/sample_date=${date}/* \
s3a://buckets-name/prd/data/${x8vDbName}/${x8vTableName}/sample_date=${date}/

if [ $? -eq 0 ]; then
    echo ${date}": succeed"
   else
    break
fi

echo >&3
} &
done
wait

stop_time=`date +%s`  #定义脚本运行的结束时间

echo "TIME:`expr $stop_time - $start_time`"
exec 3<&-                       #关闭文件描述符的读
exec 3>&-                       #关闭文件描述符的写

2)参数说明

Cos2HDFS:

  • -Dmapred.job.queue.name:任务在 Yarn 中的队列名称
  • --bandWidth:带宽
  • --taskNumber:相当于map数量
  • --workerNumber:并行执行的worker数量
  • --jobName:任务名称
  • --skipMode:数据校验方式
  • --checkMode:数据校验方式
  • --src:源路径
  • --dest:目标路径

详细说明请参考:【Hadoop-CosDistcp】通过CosDistcp的方式迁移Cos中的数据至HDFS

HDFS2S3:

  • -Dmapred.job.queue.name:任务在 Yarn 中的队列名称
  • -direct:用于构建文件清单的线程数(最多40个),当文件目录结构复杂时应该适当增大该值
  • -bandwidth:以MB/second为单位指定每个map的带宽
  • -m:限制同步启动的map数,默认每个文件对应一个map,每台机器最多启动20个map

详细说明请参考:【Hadoop-Distcp】工具简介及参数说明

你可能感兴趣的:(Hadoop,hadoop,hdfs,大数据)