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' ]]; then
    MAX_MAP_COUNT="$(cat /proc/sys/vm/max_map_count)"
    if [[ "${MAX_MAP_COUNT}" -lt 2000000 ]]; then
        echo "Please set vm.max_map_count to be 2000000 under root using 'sysctl -w vm.max_map_count=2000000'."
        exit 1
    fi

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

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

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

相关文章

MySQL 数据库 Navicat Premium 16.01 安装教程

MySQL 数据库 Navicat Premium 16.01 安装教程 目录 MySQL 数据库 Navicat Premium 16.01 安装教程前言安装步骤同意协议选择安装目录桌面快捷方式安装正在安装安装完成 步骤获取 前言 MySQL数据库管理用Navicat更加方便,可视化效果更好,今天给大家带来…

Thermo Fisher赛默飞TSQ单杆电源维修1R120380-0001

美国热电质朴分析仪电路板维修,液相色谱质谱联用仪维修,Thermo Fisher赛默飞世尔光谱仪IS10 IS5赛默飞主板维修。 公司仪器维修设备备有三相交流电源,变频电源,无油空压气源,标准化的维修平台、电子负载,耐压测试仪、老…

Python实现管线建模 - 3.同心变径管

往期回顾 Python实现管线建模 || 1.圆直管、方管https://blog.csdn.net/Xxy9426/article/details/138836778?spm1001.2014.3001.5501 对依赖库的补充 随着后续内容的深入,我发现单纯靠trimesh库已经无法完成后续的建模(涉及到多个几何体拼接或者是创建…

采购芯片时细心,再细心!

检查原理图,采购时候的细心对照所费的时远远少于焊完找BUG的时间!!! 购买芯片的时候不光看芯片名称,封装,丝印也要看,如果不一样必须对照两者的引脚图仔细观察是否一样!&#xff01…

边缘检测(一)-灰度图像边缘检测方法

灰度图像边缘检测是数字图像处理与机器视觉中经常遇到的一个问题,边缘检测是否连续、光滑是判断检测方法优劣的一个重要标准,下面通过一个实例提供灰度图像边缘检测方法,该方法对其他图像检测也具有一定的参考价值。 首先,读入一幅…

国际期货常见技术面分析

技术分析方法:通过对市场行为本身的分析来预测价格的变动方向,及主要是对期货市场的日常交易状况,包括价格、交易量与持仓量等数据,按照时间顺序绘制成图形、图表/形成一定的指标系统。然而针对这些图形、图表/指标系统进行分析研…

【C++】类和对象的引入

文章目录 前言一、类的定义二、类的访问控制与封装三、类的作用域四、类的实例化五、类的存储方式及大小计算六、隐藏的this指针 前言 C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。 C是基于面向对象的&…

一五三、MAC 安装MongoDB可视化工具连接

若没有安装brew包管理工具,在命令行输入安装命令 /bin/bash -c “$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)”上面步骤安装完成后,开始安装MongoDB,输入安装命令: brew tap mongodb/brewbrew u…

安装VS Code 提示This User Installer is not meant to be run as an Administrator问题

目录预览 一、问题描述二、原因分析三、解决方案四、参考链接 一、问题描述 在vs code官网(https://code.visualstudio.com/)下载安装包,显示如下提示信息: This User Installer is not meant to be run as an Administrator.…

HTMLCSS详细总结(提高版)

HTML5的新特性 1. HTML5 新增的语义化标签 <div class“header”> </div> <div class“nav”> </div> <div class“content”> </div> <div class“footer”> </div> <header>&#xff1a;头部标签<nav>&#…

一款超好用的国产 Redis 可视化工具,真香!

哈喽&#xff0c;大家好&#xff0c;我是黑板报君&#xff0c;一个资深的软件开发工程师&#xff0c;致力于为大家分享各领域优质开源项目&#xff0c;开发前沿技术以及互联网技术圈动态。 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 日常开发过程中…

微信能上网,但是浏览器不能上网,解决方法

问题&#xff1a;微信能上网&#xff0c;但是浏览器不能上网。更具体的是&#xff0c;连接无线wifi时&#xff0c;微信可以上网&#xff0c;但是浏览器不能上网&#xff1b;连接手机热点时&#xff0c;微信和浏览器均能上网。 解决&#xff1a;试了网上的诸多方法都不起作用&a…

C# OpenCvSharp 车牌颜色识别

C# OpenCvSharp 车牌颜色识别 目录 效果 项目 代码 下载 效果 项目 代码 using OpenCvSharp; using System; using System.Diagnostics; using System.Drawing; using System.Windows.Forms; namespace OpenCvSharp_Demo { public partial class Form1 : Form { …

18.实战 LLaMA2-7B 指令微调

实战 LLaMA2-7B 指令微调 实战 LLaMA2-7B 指令微调大模型训练技术总结以模型训练阶段分类&#xff1a;Pre-Training vs Fine-Tuning以微调权重比例分类&#xff1a;FFT vs PEFT以模型训练方法分类&#xff1a;Fine-Tuning vs Instruction-Tuning以模型训练机制分类&#xff1a;…

帕金森患者在饮食上需要注意什么

帕金森病患者在饮食上应该遵循以下几个基本原则&#xff1a; 饮食清淡&#xff1a;应多吃新鲜的水果和蔬菜&#xff0c;如苹果、芹菜、菠菜等&#xff0c;以补充维生素和促进胃肠道蠕动。营养均衡&#xff1a;应多吃富含优质蛋白的食物&#xff0c;如鸡蛋、牛奶&#xff0c;以…

HACH哈希紫外可见光分光光度计维修DR6000

DR3900可见分光光度计内置准双光束光学系统&#xff0c;自动校准波长&#xff0c;该可见光分光光度计预置200多个用户程序&#xff0c;几乎覆盖常规水质参数&#xff0c;彩色触屏搭载中文操作界面&#xff0c;可自动分析检测并存储2000组实验数据&#xff0c;是一款测量准确的可…

高考之后,专业与学校如何选择?

随着2024年高考的结束&#xff0c;考生们面临着选择专业或学校的难题。选择专业意味着专注于一个特定领域&#xff0c;直接影响未来的职业发展和兴趣培养&#xff1b;而选择学校则提供了更优越的学术氛围和广泛的社交机会&#xff0c;对个人综合素质提升有重要作用。无论选择哪…

jdk下载安装及电脑上同时安装多个jdk

一、jdk的下载 官方地址: Java Software | Oracle 系统环境变量配置 1、首先新建JDK1.8和17的JAVA_HOME&#xff0c;他们的变量名区分开&#xff0c;分别为JAVA17_HOME&#xff0c;JAVA8_HOME。分别指向他们的安装地址。 2、新建配置他们可变的地址&#xff0c;这个环境变量的值…

Transformer革新:Infini-Transformer在长文本处理中的突破

在当今信息爆炸的时代&#xff0c;大型语言模型&#xff08;LLMs&#xff09;在处理长文本数据方面的需求日益增长。无论是科学研究、法律分析还是医学诊断&#xff0c;长文本的处理能力都显得尤为重要。然而&#xff0c;现有的基于Transformer的模型在处理这类数据时遇到了重大…

力控算法每日一练:209. 长度最小的子数组(java)

给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl1, ..., numsr-1, numsr] &#xff0c;并返回其长度。如果不存在符合条件的子数组&#xff0c;返回 0 。 class Solution {public int minSu…