Hadoop 文件系统与 COS 之间的数据迁移
Hadoop Distcp(Distributed copy)主要是用于 Hadoop 文件系统内部或之间进行大规模数据复制的工具,它基于 Map/Reduce 实现文件分发、错误处理以及最终的报告生成。由于利用了 Map/Reduce 的并行处理能力,每个 Map 任务负责完成源路径中部分文件的复制,因此它可以充分利用集群资源来快速完成集群或 Hadoop 文件系统之间的大规模数据迁移。
由于 Hadoop-COS 实现了 Hadoop 文件系统的语义,因此利用 Hadoop Distcp 工具可以方便地在 COS 与其他 Hadoop 文件系统之间进行双向的数据迁移,本文就以 HDFS 为例,介绍 Hadoop 文件系统与 COS 之间利用 Hadoop Distcp 工具完成数据迁移的方式。
一、前提条件
1、Hadoop 集群中已经安装 Hadoop-COS 插件,并且正确配置了 COS 的访问密钥等。可使用如下 Hadoop 命令检查 COS 访问是否正常:
hadoop fs -ls cosn://examplebucket-1250000000/
如果能够正确地列出 COS Bucket 中的文件列表,则表示 Hadoop-COS 安装和配置正确,可以进行以下实践步骤。
2、COS 的访问账户必须要具备读写 COS 存储桶中目标路径的权限。
二、实践步骤
1、将 HDFS 中的数据复制到 COS 的存储桶中
通过 Hadoop Distcp 将本地 HDFS 集群中/test
目录下的文件迁移到 COS 的 hdfs-test-1250000000 存储桶中。
1) 执行如下命令启动迁移:
hadoop distcp hdfs://10.0.0.3:9000/test cosn://hdfs-test-1250000000/
Hadoop Distcp 会启动 MapReduce 作业来执行文件复制任务,完成后会输出简单报表信息,如下图所示:
2) 执行 hadoop fs -ls -R cosn://hdfs-test-1250000000/ 命令可以列出刚才已迁移到存储桶 hdfs-test-1250000000 的目录和文件。
2、将 COS 中存储桶的文件复制到本地 HDFS 集群
Hadoop Distcp 是一个支持不同集群和文件系统之间复制数据的工具,因此,将 COS 存储桶中的对象路径作为源路径,HDFS 的文件路径作为目标路径即可将 COS 中的数据文件复制到本地 HDFS:
hadoop distcp cosn://hdfs-test-1250000000/test hdfs://10.0.0.3:9000/
3、指定配置 Distcp 命令行参数进行 HDFS 和 COS 之间的数据迁移
说明:该命令行配置支持双向操作,可支持 HDFS 数据迁移到 COS,也可以将 COS 数据迁移到 HDFS。
用户可直接配置以下命令:
hadoop distcp -Dfs.cosn.impl=org.apache.hadoop.fs.CosFileSystem -Dfs.cosn.bucket.region=ap-XXX -Dfs.cosn.userinfo.secretId=AK**XXX -Dfs.cosn.userinfo.secretKey=XXXX -libjars /home/hadoop/hadoop-cos-2.6.5-shaded.jar cosn://bucketname-appid/test/ hdfs:///test/
参数说明如下:
- Dfs.cosn.impl:始终配置为 org.apache.hadoop.fs.CosFileSystem。
- Dfs.cosn.bucket.region:填写存储桶所在地域,可在 COS 控制台存储桶列表中查看。
- Dfs.cosn.userinfo.secretId:填写存储桶拥有者账号下的 SecretId,可前往访问管理-API 密钥管理中获取。
- Dfs.cosn.userinfo.secretKey:填写存储桶拥有者账号下的 secretKey,可前往访问管理-API 密钥管理中获取。
- libjars:指定 Hadoop-COS jar 包位置。Hadoop-COS jar 包可前往 Github 仓库中的 dep 目录下进行下载。
三、Hadoop distcp 的扩展参数
Hadoop distcp 工具支持丰富的运行参数。例如,可以通过-m来指定最大用于并行复制的 Map 任务数目,-bandwidth来限制每个 map 所使用的最大带宽等。具体可参考 Apache Hadoop distcp 工具的官方文档:DistCp Guide 。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Oracle参数解析(nls_timestamp_format)
- Vue使用uuid-npm快速生成uuid,适用于多种场景
- WPF调用图片或资源(Uri)
- Hexo部署远程仓库(Conding、Gitee、Github)
- Linux下安装nginx
- CSS简笔画logo系列:纯CSS绘制“Adidas” Logo
- Electron + Vue跨平台桌面应用开发实战教程(一)
- java_抽象类、接口、多态的使用
- Electron + Vue跨平台桌面应用开发实战教程(二)
- Oracle参数解析(nls_length_semantics)
- 创建单页
- Electron + Vue跨平台桌面应用开发实战教程(三)
- ES6箭头函数中this指向谁?
- 谈谈HTML中锚点及其使用
- java_数据类型转换、运算符