Автор | техническая команда SelectDB
OceanBase — широко известная распределенная база данных, которая широко используется во многих критически важных бизнес-системах предприятия. В сообществе Apache Doris многие пользователи предпочитают создавать мощные каналы обработки и анализа данных на основе OceanBase и Apache Doris. В этой статье подробно описано, как удобно и эффективно мигрировать/синхронизировать данные из OceanBase в Apache Doris.
Практическое руководство
00 Подготовка окружающей среды
Используйте Docker для запуска службы Oceanbase. Чтобы создать среду OceanBase Docker, обратитесь к документации Oceanbase — используйте Docker для развертывания базы данных OceanBase.
docker run -p 2881:2881 --name oceanbase -e MINI_MODE=1 -d oceanbase/oceanbase-ce:4.0.0.0
Создайте таблицу в OceanBase и добавьте данные.
[root@VM-10-6-centos ~]$ mysql -h127.0.0.1 -P2881 -uroot
mysql> CREATE DATABASE ob;
Query OK, 1 row affected (0.01 sec)
mysql> use ob;
Database changed
mysql> CREATE TABLE student (
-> id int,
-> name varchar(256),
-> age int,
-> primary key (id)
-> );
Query OK, 0 rows affected (0.06 sec)
mysql> insert into student values(1, 'zhangsan01', 18),
-> (2, 'zhangsan02', 23),
-> (3, 'zhangsan03', 30),
-> (4, 'zhangsan04', 35),
-> (5, 'zhangsan05', 40);
Query OK, 5 rows affected (0.01 sec)
Records: 5 Duplicates: 0 Warnings: 0
Создать таблицу в Дорис
[root@VM-10-6-centos ~]$ mysql -h127.0.0.1 -P9030 -uroot -p
mysql> CREATE TABLE `student` (
-> id int,
-> `name` varchar(256),
-> `age` int
-> ) ENGINE=OLAP
-> UNIQUE KEY(`id`)
-> COMMENT 'OLAP'
-> DISTRIBUTED BY HASH(`id`) BUCKETS 1
-> PROPERTIES (
-> "replication_allocation" = "tag.location.default: 1"
-> );
Query OK, 0 rows affected (0.06 sec)
01 Синхронизация с помощью DataX
DataX — это версия интеграции данных Alibaba Cloud DataWorks с открытым исходным кодом. Она предоставляет два компонента: OceanBaseReader и DorisWriter, которые могут легко переносить данные из OceanBase в Doris. Конкретные этапы использования:
1. Загрузите DataX
2. Запишите файл конфигурации DataX.
{
"job": {
"setting": {
"speed": {
"channel": 1
}
},
"content": [
{
"reader": {
"name": "oceanbasev10reader",
"parameter": {
"username": "root",
"password": "123456",
"column": ["*"],
"connection": [
{
"table": ["student"],
"jdbcUrl": ["jdbc:oceanbase://127.0.0.1:2881/ob"]
}
]
}
},
"writer": {
"name": "doriswriter",
"parameter": {
"loadUrl": ["127.0.0.1:28737"],
"loadProps": {
},
"column": ["*"],
"username": "root",
"password": "",
"postSql": [],
"preSql": [],
"flushInterval":10000,
"connection": [
{
"jdbcUrl": "jdbc:mysql://127.0.0.1:29737/test",
"selectedDatabase": "test",
"table": ["student"]
}
],
"loadProps": {
"format": "json",
"strip_outer_array": true
}
}
}
}
]
}
}
Дополнительную информацию о настройке см. в Oceanbasev10reader и DorisWriter .
3. Выполните скрипт DataX.
python2 bin/datax.py oceanbase2doris.json
4. Полная синхронизация данных. Данные в Дорисе:
mysql> select * from student;
+------+------------+------+
| id | name | age |
+------+------------+------+
| 1 | zhangsan01 | 18 |
| 2 | zhangsan02 | 23 |
| 3 | zhangsan03 | 30 |
| 4 | zhangsan04 | 35 |
| 5 | zhangsan05 | 40 |
+------+------------+------+
5 rows in set (0.02 sec)
02 Использование синхронизации каталога
Используя функцию каталога , поддерживаемую Apache Doris , таблицу данных в Oceanbase можно сопоставить с Doris, а данные можно синхронизировать с Doris посредством вставки.
Загрузите пакет драйверов OceanBase в jdbc_drivers
каталоги FE и BE и последовательно выполните операции следующего кода:
-- 创建catalog
CREATE CATALOG jdbc_oceanbase PROPERTIES (
"type"="jdbc",
"user"="root",
"password"="123456",
"jdbc_url" = "jdbc:oceanbase://127.0.0.1:2881/ob",
"driver_url" = "oceanbase-client-2.4.2.jar",
"driver_class" = "com.oceanbase.jdbc.Driver"
)
-- 在doris中查询oceanbase的表
mysql> select * from jdbc_oceanbase.ob.student;
+------+------------+------+
| id | name | age |
+------+------------+------+
| 1 | zhangsan01 | 18 |
| 2 | zhangsan02 | 23 |
| 3 | zhangsan03 | 30 |
| 4 | zhangsan04 | 35 |
| 5 | zhangsan05 | 40 |
+------+------------+------+
5 rows in set (0.02 sec)
mysql> CREATE TABLE internal.test.student
-> PROPERTIES("replication_num" = "1")
-> AS SELECT * FROM jdbc_oceanbase.ob.student;
Query OK, 5 rows affected (0.07 sec)
{'label':'label_139f7d7f13ba491b_85038d67c9e3ae32', 'status':'VISIBLE', 'txnId':'12014'}
mysql> select * from internal.test.student;
+------+------------+------+
| id | name | age |
+------+------------+------+
| 5 | zhangsan05 | 40 |
| 1 | zhangsan01 | 18 |
| 2 | zhangsan02 | 23 |
| 4 | zhangsan04 | 35 |
| 3 | zhangsan03 | 30 |
+------+------------+------+
5 rows in set (0.03 sec)
03 Используйте синхронизацию Flink CDC
Flink CDC предоставляет разъем OceanBase CDC , позволяющий считывать данные моментального снимка и инкрементальные данные из OceanBase. Конкретные шаги заключаются в следующем:
1. Подготовьте среду
Запустите OceanBase и OBLogProxy.
docker pull oceanbase/oceanbase-ce:4.0.0.0
docker run --name oceanbase --network=host -e MINI_MODE=1 -d oceanbase/oceanbase-ce:4.0.0.0
docker pull whhe/oblogproxy:1.1.0_4x
docker run --network=host --name oceanbase_proxy -e OB_SYS_USERNAME=root -e OB_SYS_PASSWORD=123456 -d whhe/oblogproxy:1.1.0_4x
2. Установить пароль
В OceanBase у пользователя root по умолчанию нет пароля. Для OBLogProxy требуется системный пользователь-арендатор с непустым паролем, поэтому сначала необходимо установить пароль для корневого пользователя @sys .
-- 登陆root用户的sys租户,
mysql -h127.0.0.1 -P2881 -uroot@sys
-- 设置密码为上面的OB_SYS_PASSWORD
MySQL [(none)]> ALTER USER root IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.02 sec)
-- 进入root用户的test租户,单独设置密码test
mysql -h127.0.0.1 -P2881 -uroot@test
MySQL [(none)]> ALTER USER root IDENTIFIED BY 'test';
Query OK, 0 rows affected (0.02 sec)
-- 创建数据库表和数据
mysql> CREATE DATABASE ob;
mysql> USE ob;
mysql> CREATE TABLE student (
-> id int,
-> name varchar(256),
-> age int,
-> primary key (id)
-> );
Query OK, 0 rows affected (0.06 sec)
mysql> insert into student values(1, 'zhangsan01', 18),
-> (2, 'zhangsan02', 23),
-> (3, 'zhangsan03', 30),
-> (4, 'zhangsan04', 35),
-> (5, 'zhangsan05', 40);
Query OK, 5 rows affected (0.01 sec)
Records: 5 Duplicates: 0 Warnings: 0
3. Конфигурация среды Flink
Поместите jar-пакет OceanBase CDC и соединитель Doris в FLINK_HOME/lib
каталог и перезапустите кластер Flink.
4. Выполнение задач Flink SQL.
SET 'execution.checkpointing.interval' = '3s';
CREATE TABLE student (
id INT,
name STRING,
age INT,
PRIMARY KEY (id) NOT ENFORCED
) WITH (
'connector' = 'oceanbase-cdc',
'scan.startup.mode' = 'initial',
'username' = 'root@test',
'password' = 'test',
'tenant-name' = 'test',
'database-name' = 'ob',
'table-name' = 'student',
'hostname' = 'localhost',
'port' = '2881',
'rootserver-list' = '127.0.0.1:2882:2881',
'logproxy.host' = 'localhost',
'logproxy.port' = '2983',
'working-mode' = 'memory'
);
CREATE TABLE doris_sink (
id INT,
name STRING,
age INT
)
WITH (
'connector' = 'doris',
'fenodes' = '10.16.10.6:28737',
'table.identifier' = 'test.student',
'username' = 'root',
'password' = ''
);
INSERT into doris_sink select * from student;
После отправки задачи вы можете запросить полный объем синхронизированных данных в Doris.
mysql> select * from student;
+------+------------+------+
| id | name | age |
+------+------------+------+
| 1 | zhangsan01 | 18 |
| 2 | zhangsan02 | 23 |
| 3 | zhangsan03 | 30 |
| 4 | zhangsan04 | 35 |
| 5 | zhangsan05 | 40 |
+------+------------+------+
5 rows in set (0.01 sec)
Затем смоделируйте новые данные в OceanBase.
MySQL [ob]> insert into student values(6, 'zhangsan06', 48)
-> ;
Query OK, 1 row affected (0.13 sec)
После отправки задачи вы можете запросить синхронизированные новые данные в Doris.
mysql> select * from student;
+------+------------+------+
| id | name | age |
+------+------------+------+
| 1 | zhangsan01 | 18 |
| 2 | zhangsan02 | 23 |
| 3 | zhangsan03 | 30 |
| 4 | zhangsan04 | 35 |
| 5 | zhangsan05 | 40 |
| 6 | zhangsan06 | 48 |
+------+------------+------+
6 rows in set (0.02 sec)
Примечание. Поддерживаются версии OceanBase 3.x и 4.x. Необходимо обратить внимание на соответствие версий между OBLogProxy и OceanBase. Подробную информацию см. в выпуске GitHub.
04 Используйте Outfile для экспорта
Вы также можете использовать функцию Outfile Oceanbase для экспорта данных в локальную систему или OSS, а также импортировать данные в Doris на основе возможностей Doris Stream Load/S3 Load. Вот локальный файл в качестве примера:
MySQL [ob]> select * from student;
+----+------------+------+
| id | name | age |
+----+------------+------+
| 1 | zhangsan01 | 18 |
| 2 | zhangsan02 | 23 |
| 3 | zhangsan03 | 30 |
| 4 | zhangsan04 | 35 |
| 5 | zhangsan05 | 40 |
| 6 | zhangsan06 | 48 |
+----+------------+------+
6 rows in set (0.00 sec)
MySQL [ob]> SELECT id,name,age INTO OUTFILE '/home/student.csv'
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n' FROM student;
Query OK, 3 rows affected (0.01 sec)
#cat student.csv
1,zhangsan01,18
2,zhangsan02,23
3,zhangsan03,30
4,zhangsan04,35
5,zhangsan05,40
6,zhangsan06,48
Выполните потоковую загрузку в Doris и импортируйте локальные файлы в Doris.
curl --location-trusted -u root: -H "column_separator:," -T student.csv http://127.0.0.1:28737/api/test/student/_stream_load
После завершения импорта импортированные данные можно запросить в Doris.
mysql> select * from student;
+------+------------+------+
| id | name | age |
+------+------------+------+
| 1 | zhangsan01 | 18 |
| 2 | zhangsan02 | 23 |
| 3 | zhangsan03 | 30 |
| 4 | zhangsan04 | 35 |
| 5 | zhangsan05 | 40 |
| 6 | zhangsan06 | 48 |
+------+------------+------+
6 rows in set (0.05 sec)
Сопоставление типов данных
База данных OceanBase может поддерживать режимы MySQL и Oracle в одной и той же системе, поэтому сопоставление типов Apache Doris также такое же, как в MySQL и Oracle. Это означает, что когда OceanBase устанавливает связь с Apache Doris, он может определять таблицы и столбцы в соответствии с таблицей ниже, чтобы обеспечить плавные операции миграции/синхронизации данных.
01 Сопоставление типов схемы MySQL
Подробную информацию см. в разделе: Каталог JDBC — документация MySQL.
02 Сопоставление типов схемы Oracle
Подробную информацию см. в: Каталог JDBC — документация Oracle.
Заключение
В этой статье представлены различные способы синхронизации данных OceanBase с Doris, которые могут удовлетворить потребности синхронизации в различных сценариях. Если вам нужно синхронизировать автономные данные, вы можете выбрать метод DataX/Catalog/Outfile; если вам нужно синхронизировать данные в реальном времени, вы можете напрямую выбрать метод Flink CDC. Кроме того, с помощью Flink CDC можно выполнить как полную, так и инкрементную синхронизацию данных.
Линус взял на себя задачу не допустить, чтобы разработчики ядра заменяли табуляции пробелами. Его отец — один из немногих руководителей, умеющих писать код, его второй сын — директор отдела технологий с открытым исходным кодом, а младший сын — ядро с открытым исходным кодом. участник Робин Ли: Естественный язык станет новым универсальным языком программирования. Модель с открытым исходным кодом будет все больше и больше отставать от Huawei: потребуется 1 год, чтобы полностью перенести 5000 часто используемых мобильных приложений на язык Hongmeng, наиболее подверженный этому . сторонние уязвимости. Расширенный текстовый редактор Quill 2.0 был выпущен с функциями, надежностью и разработчиками. Опыт был значительно улучшен. Ма Хуатэн и Чжоу Хунъи пожали друг другу руки, чтобы «устранить обиды». Meta Llama 3 официально выпущен. источник Laoxiangji не является кодом, причины этого очень трогательны. Google объявил о масштабной реструктуризации.