【Hadoop-Cos】存储对象Cos通过Java-SDK获取目录结构

这篇具有很好参考价值的文章主要介绍了【Hadoop-Cos】存储对象Cos通过Java-SDK获取目录结构。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

<dependency>
    <groupId>com.qcloud</groupId>
    <artifactId>cos_api</artifactId>
    <version>5.6.133</version>
</dependency>
package gaei.cn.x5l.x5lhive2cos.utils;

import com.qcloud.cos.COSClient;
import com.qcloud.cos.ClientConfig;
import com.qcloud.cos.auth.BasicCOSCredentials;
import com.qcloud.cos.auth.COSCredentials;
import com.qcloud.cos.exception.CosClientException;
import com.qcloud.cos.exception.CosServiceException;
import com.qcloud.cos.http.HttpProtocol;
import com.qcloud.cos.model.ListObjectsRequest;
import com.qcloud.cos.model.ObjectListing;
import com.qcloud.cos.region.Region;
import org.apache.commons.lang3.SystemUtils;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import static java.util.stream.Collectors.toList;

public class CosSampleDate2Mysql {
    //Mysql连接信息系
    private static String MYSQL_URL = "jdbc:mysql://10.1.1.1:3316/test?useSSL=false";
    private static String MYSQL_USERNAME = "root";
    private static String MYSQL_PASSWORD = "123456";
    //Mysql目标
    private static String MYSQL_TABLE = "`test`.`test`";

    private static Connection conn = null;
    private static ResultSet rs = null;
    private static PreparedStatement ps = null;

    public static void main(String[] args) {
        //Hive库表
        String dbName;
        String tableName;
        if (SystemUtils.IS_OS_WINDOWS_10) {
            //cos中的库名表名
            dbName = "database";
            tableName = "table_name";
        } else {
            dbName = args[0];
            tableName = args[1];
        }
        // 1 初始化用户身份信息(secretId, secretKey)。
        String secretId = "*******************************";
        String secretKey = "*******************************";
        COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);
        // 2 设置 bucket 的地域。
        Region region = new Region("ap-guangzhou");
        ClientConfig clientConfig = new ClientConfig(region);
        // 这里建议设置使用 https 协议(从 5.6.54 版本开始,默认使用了 https)。
        clientConfig.setHttpProtocol(HttpProtocol.https);
        // 3 生成 cos 客户端。
        COSClient cosClient = new COSClient(cred, clientConfig);
        // 遍历 Bucket
//        List<Bucket> buckets = cosClient.listBuckets();
//        for (Bucket bucketElement : buckets) {
//            String bucketName = bucketElement.getName();
//            String bucketLocation = bucketElement.getLocation();
//            System.out.println("bucketName: " + bucketName);
//            System.out.println("bucketLocation: " + bucketLocation);
//        }
        // 4 遍历 bucket 目录
        ListObjectsRequest listObjectsRequest = new ListObjectsRequest();
        // 设置 bucket 名称
        String bucketName = "pro-x5l-1111111111";
        listObjectsRequest.setBucketName(bucketName);
        // prefix 表示列出的 object 的 key 以 prefix 开始(以/user/x5l/hive/ods_x5l/ods_hive_gb_and_bms_gb/开头桶下的所有绝对路径)
        listObjectsRequest.setPrefix("/user/x5l/hive/" + dbName + "/" + tableName + "/");
        // deliter 表示分隔符, 设置为/表示列出当前目录下的 object, 设置为空表示列出所有的 object
        listObjectsRequest.setDelimiter("/");
        // 设置最大遍历出多少个对象, 一次 listobject 最大支持1000
        listObjectsRequest.setMaxKeys(100000000);
        ObjectListing objectListing = null;
        List<String> commonPrefixs = null;
        do {
            try {
                objectListing = cosClient.listObjects(listObjectsRequest);
            } catch (CosServiceException e) {
                e.printStackTrace();
                return;
            } catch (CosClientException e) {
                e.printStackTrace();
                return;
            }
            // common prefix 表示表示被 delimiter 截断的路径, 如 delimter 设置为/, common prefix 则表示所有子目录的路径
            commonPrefixs = objectListing.getCommonPrefixes();
            // object summary 表示所有列出的 object 列表
//            List<COSObjectSummary> cosObjectSummaries = objectListing.getObjectSummaries();
//            for (COSObjectSummary cosObjectSummary : cosObjectSummaries) {
//                // 文件的路径 key
//                String key = cosObjectSummary.getKey();
//                // 文件的 etag
//                String etag = cosObjectSummary.getETag();
//                // 文件的长度
//                long fileSize = cosObjectSummary.getSize();
//                // 文件的存储类型
//                String storageClasses = cosObjectSummary.getStorageClass();
//            }
//            String nextMarker = objectListing.getNextMarker();
//            listObjectsRequest.setMarker(nextMarker);
        } while (objectListing.isTruncated());
        //处理目录结构,获取分区时间目录
        List<String> sampleDates = new ArrayList<>();
        for (String commonPrefix : commonPrefixs) {
            sampleDates.add(commonPrefix.split("/")[5].split("=")[1]);
        }
        //获取mysql中已有分区时间
        List<String> mysqlSampleDates = new ArrayList<>();
        try {
            conn = DBConn.conn(MYSQL_URL, MYSQL_USERNAME, MYSQL_PASSWORD);
            ps = conn.prepareStatement("select sample_date from " + MYSQL_TABLE + " where `database` = '" + dbName + "' and table_name = '" + tableName + "'");
            rs = ps.executeQuery();
            while (rs.next()) {
                String sampleDate = rs.getString("sample_date");
                mysqlSampleDates.add(sampleDate);
//                System.out.println("Mysql中已有的时间分区:" + sampleDate);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        //获取mysql中缺失分区时间
        List<String> allSampleDates = sampleDates.stream().filter(item -> !mysqlSampleDates.contains(item)).collect(toList());
        List<String> result = allSampleDates.stream().filter(item -> item.contains("202302") || item.contains("202303") || item.contains("202304") || item.contains("202305")).collect(toList());
        //解析后的数据日期倒转
        Collections.reverse(result);
        System.out.println("Mysql中需要补充的时间分区:");
        for (String element : result) {
            System.out.println(element);
        }
        if (tableName.contains("dwd_hive_tbox_period_")) {
            dbName = "dwd";
            tableName = tableName.replace("dwd_hive_tbox_period_", "dwd_tsp_tbox_period_");
        }
        int count = 1;
        String sql = "insert into " + MYSQL_TABLE + " (`database`, `table_name`, `sample_date`, `state`, `update_time`) values('" + dbName + "', '" + tableName + "' ,%s ,0 ,now())";
        for (String resultSampleDate : result) {
            try {
                System.out.println("正在写入第" + count++ + "条数据");
                //获取数据源
                ps = conn.prepareStatement(String.format(sql, resultSampleDate));
                ps.executeUpdate();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        System.out.println(tableName + "数据写入完成,成功写入的数据条数为:" + result.size());
        cosClient.shutdown();
    }
}

文章来源地址https://www.toymoban.com/news/detail-534812.html

到了这里,关于【Hadoop-Cos】存储对象Cos通过Java-SDK获取目录结构的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • springboot快速整合腾讯云COS对象存储

    1、导入相关依赖 2、编写配置类,获取配置信息 创建配置类主要需要以下信息 腾讯云账号秘钥 和 密码秘钥: 用于创建COSClient链接对象,识别用户身份信息 存储桶区域 :需要设置客户端所属区域Region 存储桶名称 :创建请求时,需要告知上传到哪个存储桶下 存储桶访问路径

    2024年02月15日
    浏览(38)
  • 什么是对象存储COS?它又有哪些优势?

    对象存储(Cloud Object Storage,COS)是腾讯云提供的一种存储海量文件的分布式存储服务,用户可通过网络随时存储和查看数据。腾讯云 COS 使所有用户都能使用具备高扩展性、低成本、可靠和安全的数据存储服务。 COS 通过控制台、API、SDK 和工具等多样化方式简单、快速地接入

    2024年01月16日
    浏览(55)
  • 【微信小程序】Java实现微信支付(小程序支付JSAPI-V3)java-sdk工具包

          对于一个没有写过支付的小白,打开微信支付官方文档时彻底懵逼 ,因为 微信支付文档太过详细, 导致我无从下手,所以写此文章,帮助第一次写支付的小伙伴梳理一下。 一、流程分为三个接口:(这是前言,先看一遍,保持印象,方便理解代码) 1、第一个接口:

    2024年02月03日
    浏览(46)
  • 腾讯云COS云对象存储,分布式解决签名上传

    昨天写了阿里云的OSS对象存储签名上传,今天把腾讯云的也总结一下,非常简单,开通步骤和开通子用户并授权就不再多说,类比上一篇博客: https://blog.csdn.net/m0_57249797/article/details/124748601?spm=1001.2014.3001.5501 直接上后端签名代码: Maven依赖: 后端代码 postman发送请求获取签名链

    2024年02月12日
    浏览(32)
  • 【2023新教程】树莓派定时自动拍照并上传腾讯云对象存储COS

    仅适用于 Release date: May 3rd 2023、Debian version: 11 (bullseye) 这个树莓派OS版本,其他版本不保证有效。 首先使用如下命令,查看自己树莓派的架构。 结果如下: 如果红圈处显示为 aarch64 ,使用命令 sudo nano /etc/apt/sources.list ,注释掉里面的所有内容,加入以下内容: 然后保存。

    2024年02月12日
    浏览(33)
  • 云原生 - 微信小程序 COS 对象存储图片缓存强制更新解决方案

    遇到一个这样的情况:在微信小程序里图片缓存十分麻烦,网上很多说在腾讯云里的 COS 存储对象服务里设置对应的图片缓存(Header 头 Cache-Contorl),说实话真不好用,一会儿生效,一会儿没生效,而且量又大。于是,今天给大家分享一个简单粗暴的解决方案~ 以腾讯云为例,

    2024年01月23日
    浏览(31)
  • Windows系统挂载云对象存储(COS\OSS)作为本地磁盘的方法

    当今社会,数据信息量越来越庞大,个人电脑的本地磁盘很难装下海量数据。云对象存储作为一种可扩展的存储方式,扩充了个人电脑的存储能力,便于我们存取更海量的数据。 对象存储是面向对象/文件的、海量的互联网存储,它也可以直接被称为“云存储”。对象存储一

    2024年01月20日
    浏览(39)
  • Amazon S3 对象存储Java API操作记录(Minio与S3 SDK两种实现)

    今年(2023年) 2月的时候做了个适配Amazon S3对象存储接口的需求,由于4月份自学考试临近,一直在备考就拖着没总结记录下,开发联调过程中也出现过一些奇葩的问题,最近人刚从考试缓过来顺手记录一下。 Amazon S3(Simple Storage Service)对象存储出现得比较早且使用简单的RESTful

    2024年02月01日
    浏览(43)
  • 【golang】go获取腾讯云cos对象存储 并转为base64字符串输出

    需要引入腾讯云cos的sdk https://github.com/tencentyun/cos-go-sdk-v5 配置yaml如下: go代码编写如下:

    2024年02月11日
    浏览(35)
  • 【微信小程序】Java实现微信支付(小程序支付JSAPI-V3)java-sdk工具包(包含支付出现的多次回调的问题解析,接口幂等性)

          对于一个没有写过支付的小白,打开微信支付官方文档时彻底懵逼 ,因为 微信支付文档太过详细, 导致我无从下手,所以写此文章,帮助第一次写支付的小伙伴梳理一下。 一、流程分为三个接口:(这是前言,先看一遍,保持印象,方便理解代码) 1、第一个接口:

    2024年01月16日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包