oracle 迁移到clickhouse 45亿条数据

摘要:
考虑到各种考虑因素和后期规划,我们计划将数据迁移到clickhouse。关于datax,我看到的第一件事是,datax的官方clickhouse没有提供指定的插件,因此它们都无法直接到达clickhouse。尝试oracle-˃datax-˃clickhouse在线查看相关文档,发现一位朋友在github上提供了datax的clickhouse插件。参考链接是分布式clickhouse公司构建了一个集群,分布式引擎可以并行处理数据,最终在主表中相遇,这是高效的。成功后,使用clickhouse的insertinto插入先前建立的正式表进行数据整合,45亿数据被成功拉取。

原文链接:http://www.520mwx.com/view/90469

45亿数据迁移记录

  • 背景

    • 数据库数据量日益增加,逐渐开始显得很是臃肿,日常查询统计的时候,仅仅是count(1) 查询下总数,耗费的时间也在500s左右,而且之前的orcle数据库,前期建立的时候,也未考虑太多,未进行索引,分表,等优化。后面鉴于种种考虑,以及后期的规划,准备将数据迁移至clickhouse(oracle -> clickhouse)。
    • clickhouse 相关背景
      • ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。
      • 相关介绍
    • 迁移相关考虑
      • 数据库现有数据45亿
      • 每天还有新数据持续入库-数据量 3000万/天
  • 资源

    • 服务器资源 CPU 16C;内存 48G;硬盘 500G磁盘左右,总共3台
  • 准备

    • 开始查看相关的数据迁移工具
      • datax 阿里推出的一个,但是相对而言,社区不是很活跃。相关链接
      • waterdrop 社区活跃,作者很用心。再次感谢在使用过程中给与我的帮助 相关链接
  • 过程-时间-思考

    1. 选择方式,与迁移工具

    • 首先,选择截断数据日期,进行之前的数据迁移。
    • 最开始看的datax 的相关,这里说下datax的clickhouse官方还没提供指定的插件,所有无法直接到达clickhouse。
    • 尝试 oracle -> datax -> mysql -> clickhouse 使用 clickhouse 的insert into ,clickhouse 对mysql 有很好的支持。
      • 尝试失败,mysql 数据迁移过去以后,一旦到达亿级别,数据库统计无结果。考虑过,使用datax分任务,分表,但是数据已经45亿,分表量太小。花费时间过长。
    • 尝试 oracle -> datax -> hdfs -> waterdrop -> clickhouse 尝试使用 datax 迁移数据到hdfs,然后使用 waterdrop 在把数据从 hdfs 到 clickhouse 。
      • 这个是可行的,但是在这期间,我在github 上面发现了其他网友扩展的datax 的 clickhouse 的插件,毕竟这个方案还需要 hdfs 做一步的中转。
    • 尝试 oracle -> datax -> clickhouse
      • 在网上查看相关文档,发现有朋友在github 提供了 datax 的 clickhouse 的插件。参考地址
      • 尝试相关插件,发现可行。

    1. clickhouse 建表,查看相关优化

    • 了解 clickhouse 的相关表引擎,为迁移建表准备。之前的文档有相关说明。
      • 着重了解了我们需要使用的表引擎,最后选定引擎 MergeTree(合并树引擎) Distributed(分布式引擎)
      • MergeTree 后续需要持续落入数据。并且对数据按照时间进行合并,优化效率。参考链接
      • Distributed clickhouse 公司这边建立的是集群,而且分布式引擎,可以并行处理数据,最后在总表会合,效率高。参考链接

    1. 准备shell脚本,依次执行脚本,顺序执行

    • 这里需要说明,为什么要依次执行?
      • datax 那里可以进行份job,一起执行,但是我这里,没有选择并发处理多任务。前期测试的时候,我这边设置了datax 的一个优化参数线程数 channel 为15 ,同时执行多个任务。但是这样大数据量并发读写操作,给oracle 的服务器,以及迁移的服务器带来了几个问题。
        • 多个任务同时读取oracle ,导致oracle那边出现了阻塞现象,有的任务已经开始拉取,有的任务迟迟不见开始。
        • 过多的任务,启动过多的线程,导致linux迁移的服务器最后经常出现cpu 锁死,任务极度不稳定,进行奔溃,迁移失败。
    • datax 支持where 条件,准备sql 的where 条件,进行数据库的 用创建时间进行分割数据,使每个任务的job 拉取数据量保持平衡,过滤一部分无效数据。

    1. 建立临时表,每个任务的时间分区,对应一个datax 的配置。防止数据拉取过程中某个任务失败。

    • 我这边建立clickhouse 的临时job表,建立了14个, 每个集群所在的节点,是7个,每个datax 在两台服务器分别顺序执行7个任务。
    • 中间会有任务失败,所有最后拉取完毕以后,查看每个job 的日志,失败的,进行清表,二次拉取。
    • 全部成功以后,使用 clickhouse 的 insert into 插入之前的建立的正式表,进行数据合并,至此45亿数据拉取成功。
  • 总结

    • 迁移过程中,主要耗费时间在前期的工具,以及方案备选,因为之前没做过此类事情,所以查看每个工具,而后选择测试的方案也不相同。
  • linux 脚本

echo '开始释放缓存'

echo 3 > /proc/sys/vm/drop_caches

echo '缓存清理完毕,执行第4次任务'

python2 /home/datax/bin/datax.py --jvm="-Xms3G -Xmx3G" /home/datax/job/job_clickhouse4.json >/home/datax/log/job_clickhouse4.log 2>&1

echo '第4次任务执行完毕'

echo '开始睡眠'

sleep 1h

echo '结束睡眠'

echo '开始释放缓存'

echo 3 > /proc/sys/vm/drop_caches

echo '缓存清理完毕,执行第5次任务'

python2 /home/datax/bin/datax.py --jvm="-Xms3G -Xmx3G" /home/datax/job/job_clickhouse5.json >/home/datax/log/job_clickhouse5.log 2>&1

echo '第5次任务执行完毕'

job 与 临时表 后面添加后缀 _数字 以方便区分。与任务日志对应。 而这里的睡眠是因为,clickhosue 拉取数据以后,就会整理文件,整理文件会耗费内存以及性能,进行睡眠,先让他进行整理。

datax的多job oracle 迁移到clickhouse 45亿条数据第1张

clickhouse 的分表 oracle 迁移到clickhouse 45亿条数据第2张

免责声明:文章转载自《oracle 迁移到clickhouse 45亿条数据》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇IEnumerable和IEnumerator 详解PCIe知识摘要记录下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Mysql:主从集群配置

我这里是去网易蜂巢取得镜像:https://c.163yun.com/hub#/m/home/ 命令:docker pull hub.c.163.com/library/mysql:latest 拉取完之后查询镜像 命令:docker images 3.配置主从复制 (1)创建配置文件 目录:/usr/local/mysql/ 注意:目录你个人设定,这不...

JDBC的URL

JDBC的URL=协议名+子协议名+数据源名。 协议名总是“jdbc”。 子协议名由JDBC驱动程序的编写者决定。 数据源名也可能包含用户与口令等信息;这些信息也可单独提供。 几种常见的数据库连接 oracle驱动:oracle.jdbc.driver.OracleDriverURL:jdbc:oracle:thin:@machine_name:p...

OGG初始化之将数据从文件加载到Replicat

要使用Replicat建立目标数据,可以使用初始加载Extract从源表中提取源记录,并将它们以规范格式写入提取文件。从该文件中,初始加载Replicat使用数据库接口加载数据。在加载过程中,更改同步组提取并复制增量更改,然后与加载结果进行协调。 在加载过程中,记录每次一个记录地应用于目标数据库,因此该方法比其他任何初始加载方法都要慢很多。该方法允许在源系...

TiDB数据库01Tidb体系架构01

1.我们到底需要一个什么样的数据库 1.1 需要的数据库特性 扩展性 强一致性、高可用性 支持SQL,ACID事务。 云原生 HTAP 兼容主流生态和协议 1.1.1 扩展性 Scale out也就是我们经常听到的弹性横向扩展。一是从弹性的角度看,颗粒度越小越好,常见的颗粒度有Cluster、Database、Schema、表、分表或者分区。二是数据...

还原数据库出错:”因为数据库正在使用,所以无法获得对数据库的独占访问权“的解决方案

还原数据库出错:”因为数据库正在使用,所以无法获得对数据库的独占访问权“的解决方案 在还原数据库时,有时会提示因为数据库正在使用,所以无法获得对数据库的独占访问权!!这时需要在还原数据库前先杀死正在使用数据库的线程. 该解决方案用到了系统表中的sysprocesses ,若要访问 sysprocesses,您必须定位到master 数据库。 以下是杀死正在...

Linux文件系统应用---系统数据备份和迁移(用户角度)

1前言 首先承诺:对于从Windows系统迁移过来的用户,困扰大家的 “Linux系统下是否可以把系统文件和用户文件分开到C盘和D盘中” 的问题也可以得到完满解决。 之前的文章对Linux的文件系统有过粗略的介绍,但是了解文件系统结构后,有什么用途呢?在本章节将围绕"基于用户角度的Linux下的数据备份和迁移"的场景,对Linux文件系统相关知识进行实地...