百川终入海 ,一站式海量数据迁移工具 X2Doris 正式发布

在大数据分析领域,Apache Doris 作为广受认可的开源实时数据仓库,已经在越来越多行业用户的真实业务场景中得到广泛应用,成为许多企业数据分析基础设施的重要基座。尤其在过去一年多的时间里,越来越多企业选择基于 Apache Doris 进行升级,将过去基于 Hadoop 体系的离线数据仓库进行实时化改造,或者基于 Apache Doris 统一 OLAP 技术栈。

在这一过程中,如何将海量历史数据进行高效迁移成为用户的痛点所在。基于这一目标,我们启动了名为“百川入海”的专项开发任务,开发了一站式海量数据迁移工具 X2Doris,集自动建表和数据迁移于一体、提供了对 Apache Hive、ClickHouse、Apache Kudu 以及 StarRocks 等多个数据源的支持,全程界面化、可视化操作,仅通过鼠标操作即可完成大规模数据同步至 Doris 中,并提供了极速和稳定的迁移体验。在经过数个月的公开测试和近百家企业的打磨后,今天我们很高兴地宣布, X2Doris 正式发布、面向所有社区用户免费下载使用,数据迁移至 Apache Doris 从未变得如此简单。

  • 官网地址:https://www.selectdb.com/tools/x2doris

  • 文档地址:https://docs.selectdb.com/docs/ecosystem/x2doris/x2doris-deployment-guide

  • 交流学习:https://www.selectdb.com/blog/160

X2Doris 核心特性

多源支持

定位于一站式数据迁移工具, X2Doris 目前已支持了 Apache Hive、Apache Kudu、ClickHouse、StarRocks 以及 Apache Doris 自身作为数据源端,Greenplum、Druid 等更多数据源正在开发中,后续将陆续发布。其中 Hive 版本已支持 Hive 1.x 和 2.x 版本,Doris、StarRocks、Kudu 等数据源也同时支持了多个不同版本。

而目标端已支持 Apache Doris 和 SelectDB,包含 SelectDB Cloud 和 SelectDB Enterprise。基于 X2Doris 用户可以构建从其他 OLAP 系统到 Apache Doris 的整库迁移链路,并可以实现不同 Doris 集群间的数据备份和恢复。

2-X2Doris 核心特性.png

自动建表

在项目立项之初,我们深入调研和分析了用户对于数据迁移的痛点以及业内同类数据集成工具,其中首当其冲的便是如何将待迁移的源表在 Apache Doris 中创建对应的目标表,在实际业务场景中,存储在 Hive 或 ClickHouse 中动辄上千张表,让用户手动创建目标表并转换对应的 DDL 语句效率显得过于低下,不具备实际操作可能性。

X2Doris 特为此场景做了适配,在此以 Hive 表迁移为例。在迁移 Hive 表的时候,X2Doris 会在 Apache Doris 中自动创建 Duplicate Key 模型表(也可手动修改)并读取 Hive 表的元数据信息,通过字段名和字段类型自动识别分区字段,如果识别到分区则会提示进行分区映射,最后会直接生成对应的 Doris 目标表 DDL。

3-X2Doris 核心特性2.png

在上游数据源为 Doris/StarRocks 时,X2Doris 会自动根据源表信息解析出表模型,自动根据源表字段类型映射对应的目标字段类型,针对上游的 Properties 参数也会识别处理,转换成对应目标表的属性参数。除此以外,X2Doris 还对复杂类型进行了增强,实现了对 Array、Map、Bitmap 类型的数据迁移。

4-X2Doris 核心特性3.png

极速稳定

在数据写入方面,X2Doris 特别针对读取数据进行了优化。通过优化数据攒批逻辑进一步减小了内存的使用,同时对 Stream Load 写入请求进行了大量改进和增强,对内存使用和释放进行优化,进一步提升数据迁移的速度和稳定性。

在单机 1G 内存情况下,我们对 DataX 和 X2Doris 进行了对比测试,5000w 条采取 DataX 进行全量数据同步,耗时约为 90s,而 X2Doris 仅需 50s 不到、性能提升接近 100%。而对比其他同类型的迁移工具,X2Doris 性能约比同类工具快 2-10 倍。

在此我们以国内某头部行业公司 POC 效果为例,在大规模日志数据迁移场景中,单条数据 1kb 大小、单表数据接近 1 亿条、总存储空间约 90 G,基于 X2Doris 仅需 2 分钟即可完成全表迁移,平均写入速度近 800 MB/s

X2Doris 安装使用

X2Doris 非常简单易用,解包启动即可,可在分钟内迅速使用起来。在部署 X2Doris 之前,需要确保机器可以连接要迁移的数据源和目标端,主要操作如下:

选择安装包

X2Doris 底层采用 Spark 实现,推荐部署到有 Yarn 的大数据环境中,可以充分利用大数据集群的能力,提高数据迁移的效率和速度,如果没有大数据环境也可以采取单机部署即可,下载与 Scala 版本对应的 X2Doris 安装包即可(没有 Spark 环境可以直接选择安装 Scala 2.12 的 X2Doris 版本)

初始化元数据

1. 将系统的数据库类型改成 mysql

进入到 conf 下,修改 application.ymlspring.profiles.action 改成 mysql,注意默认的 h2 是内存数据库,系统重启会导致数据丢失。

2. 修改conf/application-mysql.yml文件,指定 MySQL 的连接信息

5- X2Doris 安装使用.png

3. 执行脚本

进入到 script 下有两个目录,分别是 schemadata

  • 先执行 schema 下的 mysql-schema.sql 完成表结构的初始化
  • 再执行 data 下的 mysql-data.sql 完成元数据初始化

进入到 bin 目录下,执行 startup.sh

6-X2Doris 安装使用 2.png

完成启动后即可登录到 X2Doris 中,访问地址: http://$host:9091 用户户名密码: admin/selectdb

7 - X2Doris 安装使用 3.png

Hive 数据迁移实践

在此我们以 Hive 迁移至 Doris 中作为示例,介绍 X2Doris 的完整使用流程。

前置要求

  1. 部署 X2Doris 的机器必须可以连接 Hadoop 集群,是 Hadoop 集群的一个节点或至少有 Hadoop Gateway 环境。(可以在该机器上执行 Hadoop/Hive 命令,能正常连接访问 Hadoop/Hive 集群)
  2. 部署 X2Doris 的机器必须配置了 Hadoop 环境变量,必须配置 HADOOP_HOME,HADOOP_CONF_DIRHIVE_CONF_DIR,如:
export HADOOP_HOME=/opt/hadoop #hadoop 安装目录
export HADOOP_CONF_DIR=/etc/hadoop/conf
export HIVE_HOME=$HADOOP_HOME/../hive
export HIVE_CONF_DIR=$HADOOP_HOME/conf
export HBASE_HOME=$HADOOP_HOME/../hbase
export HADOOP_HDFS_HOME=$HADOOP_HOME/../hadoop-hdfs
export HADOOP_MAPRED_HOME=$HADOOP_HOME/../hadoop-mapreduce
export HADOOP_YARN_HOME=$HADOOP_HOME/../hadoop-yarn

注意: 在 HADOOP_CONF_DIRHIVE_CONF_DIR 下 必须要有 hive-site.xml

系统设置

Hive 需要设置以下信息,该部分参数都为必须要设置的参数, 具体如下:

  1. Hadoop user: 该作业会访问 Hive 数据,该 Hadoop User 即为操作 Hive 表的 Hadoop 用户(日常 Hive 作业的操作用户即可);
  2. Spark Home: 指定部署机安装的 Spark 路径;
  3. Hive metastore Uri : Hive 的 Metastore uri,可以去 $HADOOP_CONF_DIR 下查找 hive-site.xml 的配置获取;
  4. 目标 Doris/SelectDB : 要写入数据的目标端 Doris(SelectDB)信息

8 - X2Doris 安装使用4.png

创建同步作业

系统设置完成之后,就可以进入到 作业中心 了,这里可以点击 添加 来创建一个作业:
9 - X2Doris 安装使用 5.png

在添加的时候会自动检测 Hive 环境的连接情况,如果 Hive 连接失败会告警:
10-X2Doris 安装使用 6.png

那么此时就需要检查: “系统设置” 里的 Hive metastore uris 和当前部署机的通讯是否正常,这一步必须要确保通过才可以进行后续的迁移工作,如果连接正常就可以直接进行新增作业。

1. 字段类型映射

如果与 Hive 连接正常,就会自动把 Hive 数仓中所有的库和表都罗列出来。此时就可以点击左侧的树形目录,选择目标表进行操作,选中一个表之后,右侧会自动罗列出该表与 Doris 字段映射关系,可以很轻松地映射目标 Doris 表的字段类型,根据提示进行操作即可完成字段的映射。其中DUPLICATE KEYDISTRIBUTED KEY 是 Doris Duplicate Key 模型中必须要指定的参数,按需进行指定即可。

11-X2Doris 安装使用 7.png

注意

  1. 自动生成的 Doris DDL 建表语句为 Duplicate 模型, 可以根据实际情况手动修改;
  2. STRING 类型不能设置为 DUPLICATE KEY, 需要将 STRING 类型改成 VARCHAR 类型即可;

2. 分区映射

如果 Hive 原表中的分区字段类型是 STRING ,则可以根据数据实际类型判断是否需要将对应的 Doris 表的字段类型转成时间类型。如果转成时间类型的话,则需要设置分区的区间。

12 -X2Doris 安装使用 8.png

3. 创建 Doris 表

完成前两步即可进入到 Doris 表 DDL 的确认阶段,在该阶段已经自动生成了对应的 Doris 建表 DDL 语句,你可以进行 Review 确认并手动修改 DDL。

13 - X2Doris 安装使用 9.png

确认无误后,可以点击创建 Doris 表。

注意: 要确保对应 Doris 的库存在,库需要用户手动创建

14 - X2Doris 安装使用 10.png

15 X2Doris 安装使用 11.png

4. 作业设置

在点击创建作业之后会弹出一个任务配置的界面,用户需要在这个界面配置任务迁移所需要的参数,具体示例如下:

16 X2Doris 安装使用 .png

具体参数解释如下(重要参数已经加粗):

  • Hive DB:自动生成,数据源的数据库名称
  • Hive Table:自动生成,数据源的要迁移的表的名称
  • App Name:自动生成,数据迁移任务的名称
  • App Tag:自动生成,数据迁移任务的 Tag
  • Master: 需要选择是 Local 模式还是 Yarn 模式,这里是指的 X2Doris 任务运行的方式,这个根据实际情况调整。
  • DeployMode: 这里需要选择 Client 还是 Cluster,根据实际情况调整。
  • Yarn Queue: Spark 任务运行所使用的队列资源
  • Memory Options: 这里需要选择 Spark 任务的一些内存参数,如 Executor 和 Driver 的 Core 的数量和内存大小,这个根据实际情况进行调整。
  • Write Batch: 数据刷写时的批次大小,这个可以根据实际数据量调整大小,如果迁移的数据量比较大,建议该值夜调整为 500000 以上
  • Max retry:任务失败的重试次数,如果网络情况不理想,可以适当增大此参数
  • Spark option: Spark 的自定义参数,如果需要增加 Spark 任务的其他参数,可以在这里添加,以key=value的形式增加即可。
  • Properties: 数据迁移时,如果有针对数据源读取或者 Doris 数据写入的一些优化参数,可以在这里编写,具体的参数描述可以看对应的 Spark Connector 的官方文档

在上一步创建完数据迁移任务后,用户就可以在任务详情界面看到刚创建的数据迁移任务,如下图所示:

17 X2Doris 安装使用.png

至此从 Hive 到 Doris 的数据迁移任务已经配置完成,可以根据作业状态判断完成与否。

用户使用反馈

自 X2Doris 公开测试以来,已在近百家企业生产环境中应用,并收获广泛的好评。以下是来自部分企业的真实使用反馈:

X2Doris 在 BIGO 中主要用于离线同步 Hive 数据到 Doris 集群,并结合 Doris 打造高效的数据分析平台,日均同步量达 10TB。对比其他数据同步工具,在稳定性、易用性以及性能上 X2Doris 都有明显优势,希望 X2Doris 未来能支持更多数据同步场景,帮助业务数据快速落地。

—— BIGO 高级开发工程师 关老师

X2Doris 在杭银消金落地,打通了我司 Hive 到 Doris 的链路,为更多上游数据同步到 Doris 提供了快捷便利的工具。希望 X2Doris 的功能越来越丰富,可以一站式的解决其他数据源到 Doris 的同步,真正提供一站式数据平台的使用体验!

—— 杭银消金大数据架构师 周老师

X2Doris 在某金融企业实施,为我司从 StarRocks 迁移到 Doris 以及从 Hive 同步 Doris 提供了极大的便利。通过配置化的方式实现了 Hive 中近百张大表 TB 级别离线数据、StarRocks 中单表百 GB 数据的迁移同步工作,在提升了、数据迁移工作效率的同时降低了工作复杂度,是数据同步 Doris 的不二选择。最后希望 X2Ddoris 能接入更多上游数据源,真正完整实现百川归海。

—— 某金融企业大数据架构师 王老师

在迁移开源 Apache Doris 到 SelectDB Cloud 的过程中,10T+的存量历史数据和几百张数据表的迁移,成为我们必须面对的难题。幸运的是,SelectDB 团队推荐的内测版 X2Doris 给我们带来了惊喜。这款工具部署简单,上手较快,无运维烦恼,且页面简洁,开箱即用。同时支持多数据源和可视化用户界面,极大提升数据迁移的效率。在迁移过程中,SelectDB 技术团队均能对所反馈的问题积极响应和解答。我们相信,X2Doris 正式版本将是一款真正解决用户痛点的数据迁移的好产品。

——正浩大数据架构师 陈鹏

总结语

作为一个强大而易用的数据迁移工具,X2Doris 的发布将为广大用户提供更便捷、高效的数据迁移解决方案。无论是小规模的数据迁移还是大规模的数据同步,X2Doris 都能提供极速和稳定的迁移体验。我们将继续改进和优化 X2Doris,扩展支持更多的数据源,以满足不断扩大的用户需求。如果在使用过程中遇到任何问题或需要支持和帮助,请随时联系我们的团队。

交流学习:https://www.selectdb.com/blog/160

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/361040.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Linux驱动】块设备驱动(一)—— 注册块设备

针对块设备驱动将分为两部分介绍,第一部分是注册块设备,即将块设备成功添加到内核;第二部分是介绍如何读写块设备,因为没有实际块设备,这里选择使用内存来模拟块设备。 一、认识块设备 1、什么是块设备 块设备针对的…

抵御.360勒索病毒威胁:解密文件的有效方法与预防措施

导言: 近来,网络犯罪的一种新型形式——.360勒索病毒,备受关注。这种病毒通过加密用户文件,要求支付赎金以获取解密密钥。本文91数据恢复将深入介绍.360勒索病毒的特点,同时提供一些有效的恢复方法,并分享…

盘点那些硬件+项目学习套件:STM32MP157 Linux开发板及入门常见问题解答

华清远见20岁了~过去3年里,华清远见研发中心针对个人开发板业务,打造了多款硬件项目学习套件,涉及STM32单片机、嵌入式、物联网、人工智能、鸿蒙、ESP32、阿里云IoT等多技术方向。华清远见20岁了~过去3年里,华清远见研发中心针对个…

资深Android逆袭、华为鸿蒙为安卓程序员开辟了一条新道路

本文章主要从以下5个方面来展开聊聊这个话题: 1.什么是鸿蒙 2.鸿蒙系统发展时间线 3.鸿蒙是套壳Android吗? 4.鸿蒙的生态(用户以及开发者) 5.一些建议 1月18日,在鸿蒙生态千帆启航仪式上,华为宣布了继鸿蒙4…

【排序算法】C语言实现随机快排,巨详细讲解

文章目录 🚀前言🚀快排的核心过程partition(划分过程)🚀快排1.0🚀随机快速排序🚀稳定性 🚀前言 铁子们好啊!继续我们排序算法今天要讲的是快排,通常大家所说…

ROS方向第二次汇报(2)

文章目录 1.本方向内学习内容:1.1.动作:1.1.1.案例接口定义:1.1.2.案例通信模型:1.1.3.服务器端代码:1.1.4.客户端源代码:1.1.5.动作命令行操作: 1.2.参数:1.2.1.查看参数列表:1.2.2…

14篇最新Transformer热门论文!涵盖注意力机制、架构改进、适用性扩展等

在深度学习技术的飞速发展中,Transformer模型无疑成为了当今研究的热点,它凭借其独特的架构和强大的表达能力,在自然语言处理、计算机视觉和语音识别等领域取得了令人瞩目的成果。 今天,特意为大家整理了14篇Transformer热门论文&…

locust--python实现的分布式性能测试工具

1.locust特点: 1.1 支持Python编写测试用例方案; 1.2 使用requests发送http请求; 1.3 使用协程实现,高并发时消耗更低; 1.4 使用Flask提供 Web UI; 1.5 有第三方插件支持扩展; 2.创建locust 性能…

嵌入式学习第十四天

1.结构体(2): (1)结构体类型定义 (2)结构体变量的定义 (3)结构体元素的访问 (4)结构体的存储: 内存对齐: char 按照1字节对齐 …

人工智能与机器学习——开启智能时代的里程碑

写在前面 前言人工智能与机器学习的概述监督学习、无监督学习和强化学习的基本原理监督学习:无监督学习:强化学习: 机器学习的算法和方法常见的机器学习算法和方法线性回归:决策树:支持向量机:神经网络&…

Vue3项目封装一个Element-plus Pagination分页

前言:后台系统分页肯定是离不开的,但是ui框架都很多,我们可以定义封装一种格式,所有项目按到这个结构来做. 实例: 第一步:在项目components组件新建一个分页组件,用来进行封装组件. 第二步:根据官方的进行定义,官方提供的这些,需要我们封装成动态模式 第三步:代码改造 <!-…

【C/C++】深入理解--函数重载(什么是函数重载?为什么要有函数重载?)

目录 一、前言 二、 函数重载 &#x1f34e;什么是函数重载 &#x1f350;函数重载的条件 &#x1f347;函数重载的注意点 &#x1f349;为什么要有函数重载 &#x1f353;为何C语言不支持函数重载&#xff0c;反倒C可以&#xff1f; &#x1f4a6; Linux环境下演示函数重…

【Git管理工具】

Git管理工具 分支约定主分支辅助分支使用规范&#xff1a;代码提交规范项目权限分支使用 俗话说&#xff1a;没有规矩&#xff0c;不成方圆。遵循一个好的规章制度能让你的工作事半功倍。同时也可以展现出你做事的认真的态度以及你的专业性&#xff0c;不会显得杂乱无章&#x…

【Cocos入门】Cocos中的定时器 (setTimeOut 、setInterval、Schedule )

目录 一、setTimeOut二、setInterval三、Schedule四、全局的schedule 一、setTimeOut 只执行一次 3秒后打印abc。 setTimeout(()>{console.log("abc"); }, 3000);删除计时器&#xff0c;3秒后不会输出abc。 let timeIndex; timeIndex setTimeout(()>{conso…

2024西湖论剑misc方向wp

每年的misc都是最无聊坐牢的 数据安全-easy_tables import pandas as pd import hashlib from datetime import datetimeusers_df pd.read_csv(users.csv) permissions_df pd.read_csv(permissions.csv) tables_df pd.read_csv(tables.csv) actionlog_df pd.read_csv(acti…

外汇监管牌照解析:确保交易安全与合规性

外汇交易中&#xff0c;资金安全与平台监管是大家最关心的话题。监管是评估外汇经纪商是否值得信赖、是否具备相关资质的关键依据&#xff0c;因此选择一家拥有海外合法监管的经济商至关重要。 那么&#xff0c;今天我们就来聊聊全球权威的几大监管机构 — FCA、ASIC、NFA、FSA…

(2024,定性评估、定量评估、人类评估)神经风格转移评估:综述

Evaluation in Neural Style Transfer: A Review 公和众和号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0. 摘要 1. 简介 2. 神经风格转移方法 0. 摘要 神经风格转移&#xff08;Neural St…

2024全力推进七大流域数字孪生整体立项建设

2024年伊始&#xff0c;各大流域委密集召开会议或发布重要文件&#xff0c;部署开展各流域数字孪生建设。 1月中旬&#xff0c;《中国水利》杂志刊发了珠江委党组书记、主任王宝恩署名文章《坚定不移推动高质量发展 为中国式现代化贡献珠江水利力量》。珠江委积极践行“江河战略…

PYTHON蓝桥杯——每日一练(简单题)

题目 对于长度为5位的一个01串&#xff0c;每一位都可能是0或1&#xff0c;一共有32种可能。它们的前几个是&#xff1a; 00000 00001 00010 00011 00100 请按从小到大的顺序输出这32种01串。 输入格式 本试题没有输入。 输出格式 输出32行&#xff0c;按从小到大的…

大数据学习之Redis,十大数据类型的具体应用(一)

目录 3. 数据类型命令及落地应用 3.1 备注 3.2 Redis字符串&#xff08;String&#xff09; 单值单value 多值操作 获取指定区间范围内的值 数值增减 获取字符串长度和内容追加 分布式锁 getset(先get后set) 3.3 Redis列表&#xff08;List&#xff09; 简单说明 …