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 个多小时踩了各种坑才最终将环境问题解决,希望大家可以避过这些坑,保持对学习的热忱,加油。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uni微信小程序使用lottie

在uni插件市场找到 lottie-uni https://ext.dcloud.net.cn/plugin?id1044按照文档要求安装 HBuilderX 引入 下载或导入示例获取插件 import lottie from /common/lottie-miniprogram.jsindex.vue <template><uni-popupref"popup"type"center"ba…

俄罗斯ozon爆款推荐丨ozon学生受众产品

在俄罗斯电商平台OZON上&#xff0c;学生受众是一个庞大且活跃的群体。为了满足他们的需求&#xff0c;OZON平台上涌现出了一系列受学生欢迎的爆款产品。以下是一些针对学生受众的OZON爆款推荐&#xff1a; OZON选品工具&#xff1a;D。DDqbt。COM/74rD Top1 UNO纸牌游戏 俄语…

【OpenGL学习】OpenGL不同版本渲染管线汇总

文章目录 一、《OpenGL编程指南》第6版/第7版的渲染管线二、《OpenGL编程指南》第8版/第9版的渲染管线 一、《OpenGL编程指南》第6版/第7版的渲染管线 图1. OpenGL 2.1、OpenGL 3.0、OpenGL 3.1 等支持的渲染管线 二、《OpenGL编程指南》第8版/第9版的渲染管线 图2. OpenGL …

windows 下安装Nuclei 详细教程

一、软件介绍 Nuclei是一款基于YAML语法模板的开发的定制化快速漏洞扫描器。它使用Go语言开发&#xff0c;具有很强的可配置性、可扩展性和易用性。 二、下载安装 官网&#xff1a;https://docs.projectdiscovery.io/tools/nuclei/overview Nuclei项目地址&#xff1a;​​…

记一次 .NET某机械臂上位系统 卡死分析

一&#xff1a;背景 1. 讲故事 前些天有位朋友找到我&#xff0c;说他们的程序会偶发性的卡死一段时间&#xff0c;然后又好了&#xff0c;让我帮忙看下怎么回事&#xff1f;窗体类的程序解决起来相对来说比较简单&#xff0c;让朋友用procdump自动抓一个卡死时的dump&#x…

0. 云原生之基于乌班图远程开发

云原生专栏大纲 文章目录 安装乌班图配置静态IP重置root密码开启root远程登录开启远程SSH访问安装docker安装docker-compose安装Edge浏览器安装搜狗输入法安装TeamViewer安装虚拟显示器安装JDK安装maven安装vscodevscode插件安装VSCode配置maven、git、jdk、自动报错vscode快捷…

30v-180V降3.3V100mA恒压WT5107

30v-180V降3.3V100mA恒压WT5107 WT5107是一款恒压单片机供电芯片&#xff0c;它可以30V-180V直流电转换成稳定的3.3V直流电&#xff08;最大输出电流300mA&#xff09;&#xff0c;为各种单片机供电。WT5107的应用也非常广泛。它可以用于智能家居、LED照明、电子玩具等领域。比…

jupyter使用的一个奇怪bug——SyntaxError: invalid non-printable character U+00A0

bug来由&#xff1a;从其他部分例如kaggle里复制来的代码直接粘贴在jupyter notebook里&#xff0c;每一行代码都会出现&#xff1a; Cell In[5], line 1 warnings.filterwarnings(ignore) ^ SyntaxError: invalid non-printable character U00A0 单元格 In[5]&#xff0c;第 …

多网页登录Cookie免登通俗理解

背景&#xff0c;现在有A、B两个系统&#xff0c;其中B是乾坤框架的微前端&#xff0c;里面又有若干可以单独运行的系统C、D、E、F&#xff0c;现在的目标是&#xff0c;如果没有登录过其中任一系统&#xff0c;则需要跳转登录页登录&#xff0c;登录后&#xff0c;所有的A-F都…

Python 自动化测试入门有哪些内容?

自动化测试是软件测试领域中的一个重要技术&#xff0c;它利用脚本和工具来执行测试任务&#xff0c;减少了人工操作的工作量和时间消耗。Python 是一种功能强大且易于学习的编程语言&#xff0c;被广泛应用于自动化测试领域。本文将从0到1讲解如何使用 Python 进行自动化测试&…

网络编程(一)基本概念

文章目录 一、概念&#xff08;一&#xff09;网络发展阶段1. ARPAnet阶段2. TCP/IP两个协议阶段3. 网络体系结构和OSI开放系统互联模型4. TCP/IP协议簇体系结构&#xff08;1&#xff09; 应用层&#xff1a;&#xff08;2&#xff09;传输层&#xff1a;&#xff08;3&#x…

白名单在数据防篡改方面的优势与局限

白名单作为一种安全机制&#xff0c;其主要目的是通过预先设定受信任的程序、文件或用户列表&#xff0c;来限制系统资源的访问和执行权限。这种机制在防止未授权的程序或文件运行方面具有一定的效果&#xff0c;从而在一定程度上减少病毒入侵的机会。然而&#xff0c;当我们探…

读书笔记-《人人都是产品经理》

在开发工程师与产品经理的段子中&#xff0c;常看到“人人都是产品经理”这句话&#xff0c;用来调侃这个岗位似乎没有什么门槛。 很明显&#xff0c;这句话的出处&#xff0c;即本书作者想表达的是每个人都可以运用产品思维去解决问题。 01 产品 产品&#xff1a;用来解决某…

python中scrapy

安装环境 pip install scrapy 发现Twisted版本不匹配 卸载pip uninstall Twisted 安装 pip install Twisted22.10.0 新建scrapy项目 scrapy startproject 项目名 注意&#xff1a;项目名称不允许使用数字开头&#xff0c;也不能包含中文 eg: scrapy startproject scrapy_baidu_…

热重启(硬重启)获取Bitlocker密钥取证

计算机内存&#xff08;条&#xff09;在系统运行时存储了大量敏感信息&#xff0c;当断电后&#xff0c;内存中的数据荡然无存。反之&#xff0c;当一直通电的情况下&#xff0c;内存中的一些敏感数据一直存在。当然&#xff0c;正如某些人了解的&#xff0c;当断电后&#xf…

管道光电液位传感器应用在哪些设备

管道光电液位传感器在现代智能设备中扮演着至关重要的角色&#xff0c;特别是在需要检测水管缺水的应用场景中。与传统的浮球开关相比&#xff0c;这种传感器具有高可靠性、稳定性和不易卡死等优点。其先进的光学感应原理无需机械运动&#xff0c;确保了长久的寿命和稳定的性能…

《CGT行业监管及上市路径解析》——锦天城高级合伙人虞正春先生在线分享

细胞和基因治疗&#xff08;Cell and Gene Therapy, CGT&#xff09;已成为近年来全球药物研发的热点与前沿领域&#xff0c;也得到了国家政策的大力支持。《“十四五”生物经济发展规划》中提到“发展基因诊疗、干细胞治疗、免疫细胞等新技术”&#xff0c;“围绕加快创新药上…

Spring中事务的隔离级别和传播机制

上一篇博客中讲解了关于事务的两种使用方式包括Transactional的详解。 Transactional 注解当中的三个常⻅属性: 1. rollbackFor: 异常回滚属性. 指定能够触发事务回滚的异常类型. 可以指定多个异常类型 2. Isolation: 事务的隔离级别. 默认值为 Isolation.DEFAULT 3. propagat…

短视频矩阵系统:高效运营,解决多账号管理难题

前言 在当下短视频风靡的时代&#xff0c;如何高效管理和运营多个短视频账号&#xff0c;成为了众多运营者面临的挑战。而今&#xff0c;一款全新的短视频矩阵系统应运而生&#xff0c;它不仅融合了AI文案生成与剪辑模式等先进功能&#xff0c;更支持多平台授权&#xff0c;助…

超分辨率重建——2022冠军RLFN网络推理测试(详细图文教程)

&#x1f4aa; 专业从事且热爱图像处理&#xff0c;图像处理专栏更新如下&#x1f447;&#xff1a; &#x1f4dd;《图像去噪》 &#x1f4dd;《超分辨率重建》 &#x1f4dd;《语义分割》 &#x1f4dd;《风格迁移》 &#x1f4dd;《目标检测》 &#x1f4dd;《暗光增强》 &a…