Apache Doris 之 Docker 部署篇

2024-06-19 08:28
文章标签 部署 docker doris apache

本文主要是介绍Apache Doris 之 Docker 部署篇,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

在现代数据驱动的商业环境中,实时数据分析和高并发查询能力是企业成功的关键因素之一。传统的数据仓库和分析工具在面对大规模数据处理和实时分析需求时,往往力不从心。Apache Doris 作为一个现代的 MPP 数据库管理系统,凭借其强大的查询性能、灵活的扩展能力以及对实时数据处理的支持,迅速成为大数据分析领域的重要工具。


一、Apache doris 是什么?

Apache Doris 是一个现代的MPP (Massively Parallel Processing) 数据库管理系统,专为实时分析和高并发数据查询设计。它起源于百度的 Palo 项目,后在 Apache 基金会下成为开源项目。Doris 的设计目标是提供高性能、易用和可扩展的数据分析服务,尤其适用于大数据环境中的实时数据分析需求。

二、本地环境搭建环境

据说,光是搞环境,难倒一大票人,我不信…

本机环境:macos 14.2.1 (23C71), Docker desktop

1. 下载安装包

# 查看当前系统是否支持 AVX2 指令集
➜  doris sysctl -a | grep machdep.cpu
machdep.cpu.features: FPU VME DE PSE TSC MSR PAE MCE CX8 APIC SEP MTRR PGE MCA CMOV PAT PSE36 CLFSH DS ACPI MMX FXSR SSE SSE2 SS HTT TM PBE SSE3 PCLMULQDQ DTES64 MON DSCPL VMX EST TM2 SSSE3 FMA CX16 TPR PDCM SSE4.1 SSE4.2 x2APIC MOVBE POPCNT AES PCID XSAVE OSXSAVE SEGLIM64 TSCTMR AVX1.0 RDRAND F16C
machdep.cpu.leaf7_features: RDWRFSGS TSC_THREAD_OFFSET SGX BMI1 AVX2 SMEP BMI2 ERMS INVPCID FPU_CSDS MPX RDSEED ADX SMAP CLFSOPT IPT SGXLC MDCLEAR TSXFA IBRS STIBP L1DF ACAPMSR SSBD

从上面可知,我当前的操作系统是支持 AVX2 指令集的,于是我下载如下版本 doris.

wget https://apache-doris-releases.oss-accelerate.aliyuncs.com/apache-doris-2.1.3-bin-x64.tar.gz

2. macbook 本地单机部署

按照官网介绍,参考:https://doris.apache.org/zh-CN/docs/get-starting/quick-start/


➜  log cat be.out
start time: 20246月17日 星期一 13时54分11秒 CST
INFO: java_cmd /Library/Java/JavaVirtualMachines/jdk-1.8.jdk/Contents/Home/bin/java
INFO: jdk_version 8
/Users/mac/doris/doris/be/lib/doris_be: /Users/mac/doris/doris/be/lib/doris_be: cannot execute binary file➜  log file /Users/mac/doris/doris/be/lib/doris_be
/Users/mac/doris/doris/be/lib/doris_be: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[xxHash]=49a6487bfb283a3a, with debug_info, not stripped

最终发现,可以启动DorisFE ,但是无法启动DorisBE ,原因就是/Users/mac/doris/doris/be/lib/doris_be 是一个为 GNU/Linux 编译的 64 位 ELF 可执行文件。由于 macOS 使用的是 Mach-O 格式的二进制文件,而不是 ELF 格式,因此这个文件无法在 macOS 上直接执行。

所以,不能直接使用,因此 mac的用户需要自己编译。

好吧,我信了… 本来想省点时间直接安装的,但是事与愿违,还是老老实实编译吧!
你也可以直接搞一个虚拟环境比如 centos7,unbantu操作系统,直接下载官网编译好的试试。

3. macbook 通过 docker 镜像编译Doris

参考:https://doris.apache.org/zh-CN/docs/install/source-install/compilation-with-docker/
这个也是官方推荐的做法,按照推荐的试试看。

主要步骤如下:

  1. 提前在 host 主机构建 maven 的 .m2 目录,以便将下载的 Java 库可以多次在 Docker 复用
    mkdir ~/.m2

  2. 运行构建镜像

# 注意修改自己的本地文件和 docker中的文件路径映射
docker run -it --network=host --name mydocker -v ~/.m2:/root/.m2 -v ~/docker-build/doris:/root/doris/ apache/doris:build-env-for-2.0  
  1. 执行成功后,自动进入到 Docker 里
[root@docker-desktop ~]# ll
total 4
-rw-------  1 root root 3416 Nov 13  2020 anaconda-ks.cfg
drwxr-xr-x 52 root root 1664 Jun 17 02:26 doris

在这里插入图片描述

  1. 编译构建
[root@docker-desktop doris]# sh build.sh
Python 2.7.5
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /usr/share/maven
Java version: 1.8.0_402, vendor: Red Hat, Inc., runtime: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.402.b06-1.el7_9.x86_64/jre
Default locale: en_US, platform encoding: ANSI_X3.4-1968
OS name: "linux", version: "6.6.12-linuxkit", arch: "amd64", family: "unix"
cmake version 3.22.1
CMake suite maintained and supported by Kitware (kitware.com/cmake).
ninja 1.8.2
ccache version 4.8
Update apache-orc submodule ...
....

如果没有问题的话,那就可能出现了问题,如下所示:
在这里插入图片描述
这个问题,貌似是aggregate_function_max_by.cpp.o 的编译失败了,超出我的能力范围,无解。删除镜像重试看看。

[0/2] Re-checking globbed directories...
[98/369] Building CXX object src/vec/CMakeFiles/Vec.dir/exec/format/parquet/vparquet_column_re[144/369] Building CXX object src/vec/CM[285/369] Building CXX object src/vec/CMakeFiles/Vec.dir/functions/plus.cpp.oERRO[3170] error waiting for container: unexpected EOF

编译了半个多小时,终于把 docker 搞崩了,自动退出了,我。。。😭

4. 尝试通过 centos镜像安装

报错:
docker container run -it -v /Users/mac/doris:/data/doris bloque/centos7-java8 bash

[root@bb744ed8b03b be]# sh bin/start_be.sh --daemon
Please set vm.max_map_count to be 2000000 under root using 'sysctl -w vm.max_map_count=2000000'.
[root@bb744ed8b03b be]# sysctl -w vm.max_map_count=2000000
sysctl: setting key "vm.max_map_count": Read-only file system[root@e6e06a0dbfa5 /]# sysctl  vm/max_map_count
vm.max_map_count = 262144

尝试赋予更大权限:

# 进入容器
docker run -it  --privileged   -v /Users/mac/doris:/data/doris bloque/centos7-java8 bash# 启动 be ,要求先关掉交换区
[root@709dd7db0193 be]# bin/start_be.sh --daemon
Please disable swap memory before installation.

如何关闭交换区?

如下方式,现查看交换区的文件位置

[root@3ea12eabe60e bin]# swapon -s
Filename				Type		Size	Used	Priority
/var/lib/swap                          	file	1048572	0	-2[root@3ea12eabe60e bin]# swapoff /var/lib/swap
swapoff: /var/lib/swap: swapoff failed: No such file or directory

在我的本地,我发现关闭不了。无奈之下,我只能采用终极解决办法了–注释掉 be 启动脚本的这一段内容:

if [[ "$(uname -s)" != 'Darwin' ]]; thenMAX_MAP_COUNT="$(cat /proc/sys/vm/max_map_count)"if [[ "${MAX_MAP_COUNT}" -lt 2000000 ]]; thenecho "Please set vm.max_map_count to be 2000000 under root using 'sysctl -w vm.max_map_count=2000000'."exit 1fi# if [[ "$(swapon -s | wc -l)" -gt 1 ]]; then#    echo "Please disable swap memory before installation."#   exit 1# fi
fi

启动bin/start_be.sh --daemon 之后查看进程:

[root@3ea12eabe60e doris]# jps -ml
673 DorisBE
3160 org.apache.doris.DorisFE
3421 sun.tools.jps.Jps -ml

至此,fe,be终于启动完成。

为了使用,还需要安装 MySQL 客户端(因为它兼容 MySQL 协议)

[root@3ea12eabe60e doris]# yum install mysql
Loaded plugins: fastestmirror, ovl
base                                                                                                                                                                                                  | 3.6 kB  00:00:00
extras                                                                                                                                                                                                | 2.9 kB  00:00:00
updates                                                                                                                                                                                               | 2.9 kB  00:00:00
(1/4): extras/7/x86_64/primary_db                                                                                                                                                                     | 253 kB  00:00:00
(2/4): base/7/x86_64/group_gz                                                                                                                                                                         | 153 kB  00:00:02
(3/4): updates/7/x86_64/primary_db                                                                                                                                                                    |  27 MB  00:00:03
(4/4): base/7/x86_64/primary_db

启动 fe,be之后无法创建表的,需要将 be添加进去才行。

MySQL [(none)]>  ALTER SYSTEM ADD BACKEND "127.0.0.1:9050";
Query OK, 0 rows affected (0.03 sec)MySQL [(none)]>  show backends;
+-----------+-----------+---------------+--------+----------+----------+--------------------+---------------+---------------+-------+----------------------+-----------+------------------+--------------------+---------------+---------------+---------+----------------+--------------------+--------------------------+--------+---------+---------------------------------------------------------------------------------------------------------------+-------------------------+----------+
| BackendId | Host      | HeartbeatPort | BePort | HttpPort | BrpcPort | ArrowFlightSqlPort | LastStartTime | LastHeartbeat | Alive | SystemDecommissioned | TabletNum | DataUsedCapacity | TrashUsedCapcacity | AvailCapacity | TotalCapacity | UsedPct | MaxDiskUsedPct | RemoteUsedCapacity | Tag                      | ErrMsg | Version | Status                                                                                                        | HeartbeatFailureCounter | NodeRole |
+-----------+-----------+---------------+--------+----------+----------+--------------------+---------------+---------------+-------+----------------------+-----------+------------------+--------------------+---------------+---------------+---------+----------------+--------------------+--------------------------+--------+---------+---------------------------------------------------------------------------------------------------------------+-------------------------+----------+
| 10088     | 127.0.0.1 | 9050          | -1     | -1       | -1       | -1                 | NULL          | NULL          | false | false                | 0         | 0.000            | 0.000              | 1.000 B       | 0.000         | 0.00 %  | 0.00 %         | 0.000              | {"location" : "default"} |        |         | {"lastSuccessReportTabletsTime":"N/A","lastStreamLoadTime":-1,"isQueryDisabled":false,"isLoadDisabled":false} | 0                       |          |
+-----------+-----------+---------------+--------+----------+----------+--------------------+---------------+---------------+-------+----------------------+-----------+------------------+--------------------+---------------+---------------+---------+----------------+--------------------+--------------------------+--------+---------+---------------------------------------------------------------------------------------------------------------+-------------------------+----------+
1 row in set (0.01 sec)

三、Apache Doris 使用初探

以上部分已完成 Docker 中启动 Doris的服务,现在我们可以按照官网的示例来一遍测试。

  1. 连接 doris
    mysql -uadmin -P9030 -h127.0.0.1

  2. 测试 创建表,查询

MySQL [(none)]> use demo;
Database changed
MySQL [demo]> create table mytable-> (->     k1 TINYINT,->     k2 DECIMAL(10, 2) DEFAULT "10.05",->     k3 CHAR(10) COMMENT "string column",->     k4 INT NOT NULL DEFAULT "1" COMMENT "int column"-> )-> COMMENT "my first table"-> DISTRIBUTED BY HASH(k1) BUCKETS 1-> PROPERTIES ('replication_num' = '1');
Query OK, 0 rows affected (0.01 sec)MySQL [demo]> show tables;
+----------------+
| Tables_in_demo |
+----------------+
| mytable        |
+----------------+
1 row in set (0.00 sec)MySQL [demo]> show create table mytable;
  1. 导入文件

参照官网将data.csv文件导入新建的表中。

[root@3ea12eabe60e doris]# curl  --location-trusted -u admin: -T data.csv -H "column_separator:," http://127.0.0.1:8030/api/demo/mytable/_stream_load
{"TxnId": 3,"Label": "bbbb9e58-1b52-475b-86d3-140eb7b4e754","Comment": "","TwoPhaseCommit": "false","Status": "Success","Message": "OK","NumberTotalRows": 4,"NumberLoadedRows": 4,"NumberFilteredRows": 0,"NumberUnselectedRows": 0,"LoadBytes": 52,"LoadTimeMs": 336,"BeginTxnTimeMs": 22,"StreamLoadPutTimeMs": 205,"ReadDataTimeMs": 0,"WriteDataTimeMs": 66,"CommitAndPublishTimeMs": 40
}

查询结果:

[root@3ea12eabe60e doris]# mysql -uadmin -P9030 -h127.0.0.1 -Ddemo
MySQL [demo]> select * from mytable;
+------+------+------+------+
| k1   | k2   | k3   | k4   |
+------+------+------+------+
|    1 | 0.14 | a1   |   20 |
|    2 | 1.04 | b2   |   21 |
|    3 | 3.14 | c3   |   22 |
|    4 | 4.35 | d4   |   23 |
+------+------+------+------+
4 rows in set (0.11 sec)

参考

https://doris.apache.org/zh-CN/docs/get-starting/quick-start

总结

本文主要讲了如何构建一个单机版的 Doris 以便于学习使用,最后演示了官网的一个小示例仅供参考。
遇到这些问题无解的时候给人一种深深的无力挫败感,如按照官网说的去做,可能真的就是从入门到放弃了。
我花费了 4 个多小时踩了各种坑才最终将环境问题解决,希望大家可以避过这些坑,保持对学习的热忱,加油。

这篇关于Apache Doris 之 Docker 部署篇的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1074504

相关文章

Debezium 与 Apache Kafka 的集成方式步骤详解

《Debezium与ApacheKafka的集成方式步骤详解》本文详细介绍了如何将Debezium与ApacheKafka集成,包括集成概述、步骤、注意事项等,通过KafkaConnect,D... 目录一、集成概述二、集成步骤1. 准备 Kafka 环境2. 配置 Kafka Connect3. 安装 D

ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法

《ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法》本文介绍了Elasticsearch的基本概念,包括文档和字段、索引和映射,还详细描述了如何通过Docker... 目录1、ElasticSearch概念2、ElasticSearch、Kibana和IK分词器部署

部署Vue项目到服务器后404错误的原因及解决方案

《部署Vue项目到服务器后404错误的原因及解决方案》文章介绍了Vue项目部署步骤以及404错误的解决方案,部署步骤包括构建项目、上传文件、配置Web服务器、重启Nginx和访问域名,404错误通常是... 目录一、vue项目部署步骤二、404错误原因及解决方案错误场景原因分析解决方案一、Vue项目部署步骤

Linux流媒体服务器部署流程

《Linux流媒体服务器部署流程》文章详细介绍了流媒体服务器的部署步骤,包括更新系统、安装依赖组件、编译安装Nginx和RTMP模块、配置Nginx和FFmpeg,以及测试流媒体服务器的搭建... 目录流媒体服务器部署部署安装1.更新系统2.安装依赖组件3.解压4.编译安装(添加RTMP和openssl模块

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

redis群集简单部署过程

《redis群集简单部署过程》文章介绍了Redis,一个高性能的键值存储系统,其支持多种数据结构和命令,它还讨论了Redis的服务器端架构、数据存储和获取、协议和命令、高可用性方案、缓存机制以及监控和... 目录Redis介绍1. 基本概念2. 服务器端3. 存储和获取数据4. 协议和命令5. 高可用性6.

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

docker如何删除悬空镜像

《docker如何删除悬空镜像》文章介绍了如何使用Docker命令删除悬空镜像,以提高服务器空间利用率,通过使用dockerimage命令结合filter和awk工具,可以过滤出没有Tag的镜像,并将... 目录docChina编程ker删除悬空镜像前言悬空镜像docker官方提供的方式自定义方式总结docker

nginx部署https网站的实现步骤(亲测)

《nginx部署https网站的实现步骤(亲测)》本文详细介绍了使用Nginx在保持与http服务兼容的情况下部署HTTPS,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值... 目录步骤 1:安装 Nginx步骤 2:获取 SSL 证书步骤 3:手动配置 Nginx步骤 4:测

Tomcat高效部署与性能优化方式

《Tomcat高效部署与性能优化方式》本文介绍了如何高效部署Tomcat并进行性能优化,以确保Web应用的稳定运行和高效响应,高效部署包括环境准备、安装Tomcat、配置Tomcat、部署应用和启动T... 目录Tomcat高效部署与性能优化一、引言二、Tomcat高效部署三、Tomcat性能优化总结Tom