Hadoop HDFS 数据迁移至 COS 方案
前期准备
在进行数据迁移前,需完成以下准备工作:
- COS 存储桶创建:确保已在腾讯云控制台创建目标 COS 桶。
- 元数据加速配置:为提升访问性能,建议开启 COS 桶的元数据加速功能。
- VPC 网络配置:将平台组件及应用所使用的网段添加至 COS 桶绑定的 VPC ID 中,确保网络连通性。
插件部署与安装
为了实现 Hadoop 与 COS 的对接,需要安装 Hadoop-COS 插件及相关依赖包。具体步骤如下:
- 下载以下核心组件:
- Hadoop-COS(COSN):提供 Hadoop 与 COS 的兼容接口。
- chdfs-hadoop-plugin(OFS):支持高性能文件系统访问。
- cos_api-bundle:底层通信支持库。
- 获取地址参考:
- Hadoop-COS 插件下载地址
- chdfs-hadoop-plugin 下载地址
- cos_api-bundle 下载地址
- 将以下 JAR 文件复制到 Hadoop 的公共库目录中:
hadoop-cos-{hadoop.version}-{version}.jar、
cos_api-bundle-{version}.jar、
chdfs-hadoop-plugin-xx.jar
目标路径:$HADOOP_HOME/share/hadoop/common/lib/
Hadoop 配置修改
编辑 Hadoop 配置文件 core-site.xml,添加或更新以下属性设置:
<property> <name>fs.cosn.bucket.region</name> <value>ap-shanghai</value> </property> <!-- 指定存储桶所在地域,格式如 ap-guangzhou --> <property> <name>fs.cosn.trsf.fs.ofs.bucket.region</name> <value>ap-shanghai</value> </property> <property> <name>fs.cosn.tmp.dir</name> <value>/opt/hadoop_cos</value> </property> <!-- 设置本地临时目录,用于运行时生成的中间文件 --> <property> <name>fs.cosn.trsf.fs.AbstractFileSystem.ofs.impl</name> <value>com.qcloud.chdfs.fs.CHDFSDelegateFSAdapter</value> </property> <property> <name>fs.cosn.trsf.fs.ofs.impl</name> <value>com.qcloud.chdfs.fs.CHDFSHadoopFileSystemAdapter</value> </property> <!-- 配置 OFS 文件系统的具体实现类 --> <property> <name>fs.cosn.trsf.fs.ofs.tmp.cache.dir</name> <value>/opt/chdfs_jar</value> </property> <!-- 当内存缓存不足时,数据将写入该本地磁盘路径,路径不存在会自动创建 --> <property> <name>fs.cosn.trsf.fs.ofs.user.appid</name> <value>xxx</value> </property> <!-- 可通过登录腾讯云开发者页面 (https://console.cloud.tencent.com/developer) 查看 AppID --> <property> <name>fs.ofs.tmp.disk.cache.dir</name> <value>/opt/chdfs_tmp_cache</value> </property>
$HADOOP_HOME/etc/hadoop/core-site.xml
完成配置后,将更新后的 Hadoop-COS 插件和 core-site.xml 文件同步分发至所有 Hadoop 客户端节点对应目录。
验证连接与功能
执行基本命令测试 COS 连接与读写能力,确认配置生效且数据可正常交互。
hdfs dfs -ls cosn://bg-etl-prd-cos-az-xx/
Hive 集成配置
若使用 Hive,需调整其元数据仓库路径指向 COS:
- 修改
hive-site.xml文件中的以下配置项:
<property> <name>hive.metastore.warehouse.dir</name> <value>cosn://bg-etl-prd-cos-az-xx/user/hive/warehouse</value> </property>
配置完成后,重启 HiveServer2(HS2)和 Hive Metastore(HM)服务以使更改生效。
Presto 支持说明
当前环境基于 Presto 333 版本,可通过适配器方式对接 COSN 路径,查询存储于 COS 上的数据表。确保 Presto 配置中已正确识别 Hadoop 配置路径,并能解析 cosn 协议。
部署 Hadoop 客户端时,需将 Hadoop-COS 插件及相关配置文件 core-site.xml 分发至所有客户端节点的指定目录中,确保各节点均可正常访问 COS 存储服务。
$HADOOP_HOME/etc/hadoop/core-site.xml
对于 Presto 集群,需完成以下操作以支持与 COS 的集成:
- 将依赖包 gson-2.2.4.jar 和 commons-io-2.11.0.jar 放置到 xx/presto/plugin/hive-hadoop2/ 目录下;
- 完成插件部署后,重启整个 Presto 集群,使配置生效。
在 StarRocks 中配置 Broker 服务时,原 broker1 用于 HDFS 数据导入任务。现新增 broker2,并从 broker/conf 目录中移除 hdfs-site.xml 与 core-site.xml 文件,避免 HDFS 与 COS 配置产生冲突。
执行如下命令进行 Broker 实例的替换:
ALTER SYSTEM DROP BROKER broker1 "xx:8000";
ALTER SYSTEM ADD BROKER broker2 "xx:8000";
hdfs dfs -ls cosn://bg-etl-prd-cos-az-xx/
在提交 Broker Load 导入任务时,需使用新添加的 broker2 并配置相应的 COS 访问参数:
WITH BROKER 'broker2'
(
"fs.ofs.user.appid" = "XX",
"fs.cosn.userinfo.secretId" = "XX",
"fs.ofs.bucket.region" = "ap-shanghai",
"fs.cosn.bucket.endpoint_suffix" = "cos.ap-shanghai.myqcloud.com",
"fs.ofs.tmp.cache.dir" = "/opt/chdfs_jar",
"fs.cosn.userinfo.secretKey" = "XX"
)
PROPERTIES (
"max_filter_ratio" = "0",
"timeout" = "36000");
上述各组件运行过程中均需要使用本地临时目录来缓存数据或日志信息,因此需提前创建相关路径并设置权限:
mkdir -p /opt/{hadoop_cos,chdfs_jar,chdfs_tmp_cache} && chmod -R 777 /opt/{hadoop_cos,chdfs_jar,chdfs_tmp_cache}
数据迁移阶段采用 cosdistcp 工具实现从 HDFS 到 COS 的高效复制:
hadoop jar /opt/ansible/cos-distcp-1.13.16-3.1.0.jar \
-Dmapreduce.task.timeout=18000 -Dmapreduce.reduce.memory.mb=4096 \
-Dmapreduce.job.name=${JOB_NAME} -Dmapreduce.job.queuename=${QUEUE_NAME} \
--src ${HDFS_PREFIX}/user/hive/warehouse/${dbname}.db/${tabname} \
--dest ${COS_PREFIX}/user/hive/warehouse/${dbname}.db/${tabname} \
--delete --deleteOutput=/tmp/cons --taskNumber=10
[此处为图片3]
完成物理数据迁移后,需同步更新 Hive 元数据库中的存储路径信息。
首先可通过以下 SQL 查询当前库、表及分区的实际存储位置:
-- 查询库location
SELECT
d.NAME,
d.DB_LOCATION_URI AS old_location
FROM dbs d
WHERE 1=1;
-- 查询表location
SELECT
concat(d.NAME,'.',t.TBL_NAME) as tab,
s.LOCATION AS old_location
FROM SDS s
JOIN TBLS t ON s.SD_ID = t.SD_ID
JOIN DBS d ON t.DB_ID = d.DB_ID
WHERE 1=1
AND s.LOCATION LIKE 'cosn://bg-etl-prd-cos-az-xx/user/hive/warehouse%';
-- 查询表分区location
SELECT concat(d.NAME,'.',t.TBL_NAME) as tab, s.LOCATION
FROM SDS s
JOIN PARTITIONS p ON s.SD_ID = p.SD_ID
JOIN TBLS t ON p.TBL_ID = t.TBL_ID
JOIN DBS d ON t.DB_ID = d.DB_ID
WHERE 1=1
AND s.LOCATION LIKE 'cosn://bg-etl-prd-cos-az-xx/user/hive/warehouse%';
确认无误后,执行更新操作修改数据库级别的存储路径:
-- 更新库 location
UPDATE dbs d
SET d.DB_LOCATION_URI = REPLACE(
d.DB_LOCATION_URI,
-- Hadoop 文件系统与 COS 之间的数据迁移 使用 COSDistCp 工具实现高效的数据迁移任务,适用于大规模数据从 HDFS 到腾讯云对象存储(COS)的同步。 -- CDH 环境挂载元数据加速桶 在 CDH 集群环境中配置并挂载元数据加速桶,以提升访问 COS 上数据时的性能表现和读取效率。-- 数据大小验证 为确保迁移前后数据完整性一致,执行以下命令对比源路径与目标路径的数据总量: hdfs dfs -du -s hdfs://bigbigworld/user/hive/warehouse/xx.db/xx hdfs dfs -du -s cosn://bg-etl-prd-cos-az-xx/user/hive/warehouse/xx.db/xx 通过比对输出结果中的字节数,确认是否完全匹配,从而判断迁移是否成功且无数据丢失。 -- 刷新表分区信息 为使 Hive 元数据感知到新的分区结构,需执行修复命令重新加载分区: MSCK REPAIR TABLE xx; MSCK REPAIR TABLE xx; 该操作将扫描表路径下所有分区,并将其注册至元数据库中。$HADOOP_HOME/etc/hadoop/core-site.xml-- 更新表分区 location 当表分区存储路径发生变更时,需更新元数据中对应的物理位置信息。执行如下 SQL 更新符合条件的分区路径: UPDATE SDS s JOIN PARTITIONS p ON s.SD_ID = p.SD_ID JOIN TBLS t ON p.TBL_ID = t.TBL_ID JOIN DBS d ON t.DB_ID = d.DB_ID SET s.LOCATION = REPLACE( s.LOCATION, 'hdfs://bigbigworld/user/hive/warehouse', 'cosn://bg-etl-prd-cos-az-xx/user/hive/warehouse' ) WHERE 1=1 AND s.LOCATION LIKE 'hdfs://bigbigworld/user/hive/warehouse%' AND (d.NAME, t.TBL_NAME) IN ( ('db1', 'xx'), ('db2', 'xx') ); -- 更新指定表 location 针对非分区表或表级别路径的更新,使用以下语句修改其默认存储位置: UPDATE SDS s JOIN TBLS t ON s.SD_ID = t.SD_ID JOIN DBS d ON t.DB_ID = d.DB_ID SET s.LOCATION = REPLACE( s.LOCATION, 'hdfs://bigbigworld/user/hive/warehouse', 'cosn://bg-etl-prd-cos-az-xx/user/hive/warehouse' ) WHERE 1=1 AND s.LOCATION LIKE 'hdfs://bigbigworld/user/hive/warehouse%' AND (d.NAME, t.TBL_NAME) IN ( ('db1', 'xx'), ('db2', 'xx') );hdfs dfs -ls cosn://bg-etl-prd-cos-az-xx/


雷达卡


京公网安备 11010802022788号







