【无标题】

利用腾讯COS清单功能迁移最近三个月的数据至华为云

背景

客户大数据场景,经业务调研,将每日的数据以日期前缀的方式命名并存在对象存储中,因业务需求只需要迁移最近3个月的数据即可 之前的数据可丢弃。同时客户文件夹管理混乱无规则,发现客户文件层级达到7级,且每一级都有几百+的文件夹,导致路径+前缀困难较大,且数据丢失风险较高。

解决办法

梳理文件目录前缀的方式无发实现迁移,整体迁移又浪费时间和成本,且带宽有限。目前oms只有4种迁移方式

  • 选择文件/文件夹
  • 指定对象列表
  • 输入对象前缀 (a:根目录下直接添加 b:非根目录,添加对象文件所在的目录路径)
  • 指定URL列表

因客户文件夹路径较多,梳理困难。4种方式中只能选择指定URL列表的方式迁移。URL梳理方式如下:

  • 虚机安装cos插件COSCMD工具,然后利用-l 参数输出每一层级的路径,递归。该过程可以使用脚本实现。 COSCOM工具使用见:https://cloud.tencent.com/document/product/436/10976
  • 利用cos清单功能导出最近三个月修改的数据,然后利用脚本对导出的CSV进行全路径拼接,然后写入到txt文件。RDA迁移时选择指定URL方式将txt导入完成迁移。(本文针对该方法进行步骤描述)

操作步骤

步骤1:

登陆腾讯云控制台 --> 选择存储桶列表 --> 点击要迁移的桶

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cMfdh5i1-1665836751402)(media/16642494579149/16642445305772.jpg)]

步骤2: 
点击基础配置 --> 选择清单设置 --> 添加清单 --> 导出清单
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nhGq7syk-1665836751403)(media/16642494579149/16642449097258.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gDD5Zf3N-1665836751404)(media/16642494579149/16642449662783.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nVub7WJT-1665836751404)(media/16642494579149/16642450233899.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ds8mtixn-1665836751405)(media/16642494579149/16642450698102.jpg)]

下载清单 (data路径存放修改信息的csv, 20220927为数据汇总信息)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3jhM4mls-1665836751406)(media/16642494579149/16642452398302.jpg)]
清单功能详细见:https://cloud.tencent.com/document/product/436/33703

步骤3: 
下载清单,提取csv的路径写入到txt。然后将txt上传至迁移的桶,迁移方式选择列表迁移并选择上传的列表(OMS/RDA迁移比较简单本文不做详细描述 详见:)
注:

  • txt的大小不能超过1g,超1g需要分批次写入
  • url全路从桶根路径下开始(不带桶名 否则迁移失败)
    CSV处理代码如下(python更优,java比较笨重,但笔者不太熟悉):
import com.csvreader.CsvReader;
import java.io.File;
import java.io.FileOutputStream;
import java.nio.charset.Charset;

public class getObjectList {

    public static final String SOURCE_FILE_PATH = "/Users/zjw/Desktop/cosCSV0927.csv";
    public static final String TARGET_FILE_PATH = "/Users/zjw/Desktop/test.txt";

    // 桶路径写入函数
    public static void writeCosTxt(String txtPath,String content){
        FileOutputStream fileOutputStream = null;
        File file = new File(txtPath);
        try {
            if(file.exists()){
                file.createNewFile();
            }
            fileOutputStream = new FileOutputStream(file, true);
            fileOutputStream.write(content.getBytes());
            fileOutputStream.flush();
            fileOutputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    //读取cvs
    public static void readCosCSV(Character separator, String filePath) {
        CsvReader reader = null;
        try {
            reader = new CsvReader(filePath, separator, Charset.forName("GBK"));
            reader.readHeaders();
            int i = 0;
            while (reader.readRecord()) {
                // 对象大小为0忽略,该记录是桶路径。
                if (reader.get(3).toString().equals("0")) {
                    continue;
                }
                //关键列: 第0列:uuid, 第1列 桶名, 第2列 对象url全路径, 第3列:对象大小,第4列:修改时间, 第6列:对象类型
                System.out.println(reader.get(2));
                writeCosTxt(TARGET_FILE_PATH,reader.get(2) + "\n");
                i ++;
                System.out.println("完成" + i + "行写入");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (null != reader) {
                reader.close();
            }
        }
    }
    public static void main(String[] args) {
        //执行读取cvs函数
        readCosCSV(',', SOURCE_FILE_PATH);
    }
}

maven配置

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>QCloudCosImmigrate</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
    <!-- 腾讯SDK maven地址 -->
        <dependency>
            <groupId>com.qcloud</groupId>
            <artifactId>cos_api</artifactId>
            <version>5.6.89</version>
        </dependency>
        
    <!-- CSV表格处理-->
        <dependency>
            <groupId>net.sourceforge.javacsv</groupId>
            <artifactId>javacsv</artifactId>
            <version>2.0</version>
        </dependency>

    </dependencies>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

</project>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dN7497vh-1665836751406)(media/16642494579149/16642473554055.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-55Q0E9XS-1665836751407)(media/16642494579149/16642473763001.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-asYqX8pC-1665836751407)(media/16642494579149/16642485861365.jpg)]

迁移完成

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值