zoukankan      html  css  js  c++  java
  • Druid数据迁移小计

    Druid数据迁移小计

    Druid 官方网站上讲了相关的 Dump SegmentInsert Segment 相关的功能,但是经过测试这些功能都不好用,报 Guice 的依赖错误,懒得找具体原因了,换一种方式: 冷迁移

    Druid 的数据存储

    既然要冷迁移就需要了解一下 Druid 的存储相关的知识了。Druid 的数据存储主要是以 segment 为单位进行的,Druid 不仅要把 segment 保存到文件目录下,还需要在 metadata 里面把该 segment 相关的信息记录下来好进行管理。

    # get druid deep storage directory
    cat $DRUID_HOME/conf/druid/_common/common.runtime.properties | grep druid.storage
    # ger druid metadata storage 
    cat $DRUID_HOME/conf/druid/_common/common.runtime.properties | grep metadata.storage
    

    根据上面配置文件我们就可以分别拿到 segment 的路径和 metadata 中的 segment 配置。

    Deep Storage

    Druid 的 Deep Storage 目录组织得还是非常清晰的:{dataSourceName}/{timeRangeStart}_{timeRangeEnd}/{time} 所以我们的数据迁移可以只迁移指定时间范围内的。既然连目录都知道了,那就很简单了,把想要迁移的数据按目录复制出来就行了。

    metadata

    Druid 不管是用什么数据库做元数据存储表肯定都一样,记录 segment 位置的就是 druid_segments 表了。

    字段 解释
    dataSource 数据集名称
    created_date 创建日期
    start 开始日期
    end 结束日期
    payload 配置信息(此列为二进制存储,内容为一个 JSON需要进行转换后才能看到)

    注意事项: payload 中的配置息写死了 segment 的位置,如果你迁移数据后不能在新服务器中的数据目录与原服务器一致则需要修改这个 payload 内容,下方代码即为数据转换代码可以把数据解析并修改后再通过下方在代码生成回 HEX String 并更新到数据库表中。

    import org.apache.commons.codec.DecoderException;
    import org.apache.commons.codec.binary.Hex;
    
    import java.util.Scanner;
    
    /**
     * @author sunzq
     */
    public class HexConvert {
        public static void main(String[] args) throws DecoderException {
            Scanner scanner = new Scanner(System.in);
            while (true) {
                String s = scanner.nextLine();
                if (s.equals("q")) {
                    return;
                }
                // maven dependency: commons-codec
                if (s.startsWith("{")) {
                    System.out.println(Hex.encodeHexString(s.getBytes()));
                } else {
                    System.out.println(new String(Hex.decodeHex(s)));
                }
            }
        }
    }
    

    迁移到新服务器

    拿到导出的 segment 文件放到新服务器的指定位置,再去数据库里面插入此 segment 对应的记录就完成了数据的迁移,还是很简单的。

    验证

    用浏览器访问 coornidator 节点的 API http://ip:port/druid/v2/datasources 看看 datasource 添加了没有,如果没有更新上可以试试重启 coordinator 节点和 historical 节点。

  • 相关阅读:
    DRF项目创建流程(1)
    RESTful API规范
    超哥笔记--shell 基本命令(4)
    转:django模板标签{% for %}的使用(含forloop用法)
    自定django登录跳转限制
    jquery Ajax应用
    js重定向跳转页面
    django项目mysql中文编码问题
    python进阶(六) 虚拟环境git clone报错解决办法
    Linux基础(六) Vim之vundle插件
  • 原文地址:https://www.cnblogs.com/kischn/p/9636110.html
Copyright © 2011-2022 走看看