xiaoming728

xiaoming728

Apache Druid 数据迁移方案

2023-12-11
Apache Druid 数据迁移方案

本文介绍的Apache Druid 数据迁移只是基于linux环境部署

环境要求

  • java7 或者更高版本

  • linux, macOS或者其他unix系统(不支持windows系统)

  • 8G内存

  • 2核CPU

第一种数据迁移方式

只是升级Druid的版本,还是使用默认的元数据管理数据库DerBy

1、首先从apache druid官网下载合适的版本,我这里以apache-druid-0.20.0-bin.tar.gz版本为例,下载好安装包

2、解压

tar -xzf apache-druid-0.20.0-bin.tar.gz

3、查看旧版本Druid运行时保存segments和数据库的所在目录

cd /home/apache-druid-0.20.0/conf/druid/cluster/_common

查看配置文件 common.runtime.properties 

4、 复制segment和元数据文件到新迁移的druid存储路径

如新版本Druid的存储目录是/data/druid
cp -r $DRUID_HOME/var/druid/segments /data/druid    #复制segment文件
cp -r $DRUID_HOME/var/druid/metadata.db $NEW_DRUID_HOME/var/druid/  #复制元数据文件,目录没有可以手动创建,注意权限

5、启动druid

第二种数据迁移方式

1、使用导出元数据工具

进入到apache druid 的根目录:cd ${DRUID_ROOT}

创建一个临时文件夹:mkdir -p /tmp/csv

该命令只适用于linux部署,导出命令:

java -classpath "lib/*" -Dlog4j.configurationFile=conf/druid/cluster/_common/log4j2.xml -Ddruid.extensions.directory="extensions" -Ddruid.extensions.loadList=[] org.apache.druid.cli.Main tools export-metadata --connectURI "jdbc:derby://localhost:1527/var/druid/metadata.db;" -o /tmp/csv

2、导入元数据

运行该工具后,输出目录将包含<table-name>_raw.csv和<table-name>.csv文件。

这些<table-name>_raw.csv文件是工具使用的中间文件,包含Derby导出的表数据,而无需进行修改。

这些<table-name>.csv文件用于导入到另一个数据库(例如MySQL和PostgreSQL)中,并且已应用任何已配置的深度存储位置重写。

下面显示了针对Derby,MySQL和PostgreSQL的示例导入命令。

这些示例导入命令期望/tmp/csv可以从服务器访问其内容。有关其他选项,例如从客户端文件系统导入,请参考数据库的文档。

德比

的MySQL

CALL SYSCS_UTIL.SYSCS_IMPORT_TABLE (null,'DRUID_SEGMENTS','/tmp/csv/druid_segments.csv',',','"',null,0);
CALL SYSCS_UTIL.SYSCS_IMPORT_TABLE (null,'DRUID_RULES','/tmp/csv/druid_rules.csv',',','"',null,0);
CALL SYSCS_UTIL.SYSCS_IMPORT_TABLE (null,'DRUID_CONFIG','/tmp/csv/druid_config.csv',',','"',null,0);
CALL SYSCS_UTIL.SYSCS_IMPORT_TABLE (null,'DRUID_DATASOURCE','/tmp/csv/druid_dataSource.csv',',','"',null,0);
CALL SYSCS_UTIL.SYSCS_IMPORT_TABLE (null,'DRUID_SUPERVISORS','/tmp/csv/druid_supervisors.csv',',','"',null,0);
复制
LOAD DATA INFILE '/tmp/csv/druid_segments.csv' INTO TABLE druid_segments FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' (id,dataSource,created_date,start,end,partitioned,version,used,payload); SHOW WARNINGS;
LOAD DATA INFILE '/tmp/csv/druid_rules.csv' INTO TABLE druid_rules FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' (id,dataSource,version,payload); SHOW WARNINGS;
LOAD DATA INFILE '/tmp/csv/druid_config.csv' INTO TABLE druid_config FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' (name,payload); SHOW WARNINGS;
LOAD DATA INFILE '/tmp/csv/druid_dataSource.csv' INTO TABLE druid_dataSource FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' (dataSource,created_date,commit_metadata_payload,commit_metadata_sha1); SHOW WARNINGS;
LOAD DATA INFILE '/tmp/csv/druid_supervisors.csv' INTO TABLE druid_supervisors FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' (id,spec_id,created_date,payload); SHOW WARNINGS;
复制

PostgreSQL的

COPY druid_segments(id,dataSource,created_date,start,"end",partitioned,version,used,payload) FROM '/tmp/csv/druid_segments.csv' DELIMITER ',' CSV;
COPY druid_rules(id,dataSource,version,payload) FROM '/tmp/csv/druid_rules.csv' DELIMITER ',' CSV;
COPY druid_config(name,payload) FROM '/tmp/csv/druid_config.csv' DELIMITER ',' CSV;
COPY druid_dataSource(dataSource,created_date,commit_metadata_payload,commit_metadata_sha1) FROM '/tmp/csv/druid_dataSource.csv' DELIMITER ',' CSV;
COPY druid_supervisors(id,spec_id,created_date,payload) FROM '/tmp/csv/druid_supervisors.csv' DELIMIT

针对默认的derby数据库,经研究未找到apache druid的内置数据库如何连接和使用,已经命令如何执行。

3、将内置的derby数据库修改为mysql数据库

vim $NEW_DRUID_HOME/conf/druid/single-server/micro-quickstart/_common/common.runtime.properties

添加MySQL为元数据存储 mysql-metadata-storage :
druid.extensions.loadList=["druid-hdfs-storage", "druid-kafka-indexing-service", "druid-datasketches", "mysql-metadata-storage"]

4、 复制segments 数据

cp -r $DRUID_HOME/var/druid/segments /data/druid    #复制segment文件

5、上传MySQL的驱动包到扩展目录

cd $NEW_DRUID_HOME/extensions/mysql-metadata-storage/
wget http://192.168.1.85/source/mysql-connector-java-5.1.47.jar #或者本地上传至此目录下
ls
mysql-connector-java-5.1.47.jar  mysql-metadata-storage-0.17.0.jar

6、启动druid