Apache Doris 的一场编译之旅

官网  |  GitHub  |  下载  |  文档


目录

  • 1 前言
  • 2 通过 Docker 开发镜像进行编译【推荐】
    • 2.1 安装 Docker
    • 2.2 获取源码
  • 3 直接编译
    • 3.1 前置要求
    • 3.2 编译
      • 3.2.1 CMake 3.11+
      • 3.2.2 GCC 7.3+
      • 3.2.3 Bison 3.0+
      • 3.2.4 其它
      • 3.2.5 开始编译 Doris
    • 3.3 问题解决
      • 3.3.1 js_generator.cc:(.text+0xfc3c): undefined reference to `well_known_types_js'
      • 3.3.2 /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found
      • 3.3.3 libatomic.so.1: cannot open shared object file: No such file or directory
      • 3.3.4 Could NOT find Curses (missing: CURSES_LIBRARY CURSES_INCLUDE_PATH)
      • 3.3.5 configure: error: Building GCC requires GMP 4.2+, MPFR 2.4.0+ and MPC 0.8.0+.
      • 3.3.6 error while loading shared libraries: libisl.so.15: cannot open shared object file: No such file or directory
      • 3.3.7 Plugin net.sourceforge.czt.dev:cup-maven-plugin:1.6-cdh or one of its dependencies could not be resolved
      • 3.3.8 Could not resolve dependencies for project org.apache:fe-core:jar:3.4.0: Failure to find com.sleepycat:je:jar:7.3.7
      • 3.3.9 A required class was missing while executing net.sourceforge.czt.dev:cup-maven-plugin:1.6-cdh:generate: org/sonatype/plexus/build/incremental/BuildContext
      • 3.3.10 Caused by: java.lang.NoClassDefFoundError: java_cup/runtime/SymbolFactory
    • 3.4 编译成功



1 前言

直接访问官方文档,中文的官方文档对于阅读是比较友好的,正常情况下直接对照文档建议的来基本上不会存在大问题。编译部分官方推荐使用官方提供的 Docker 镜像(Dockerfile),这样省去了编译环节中出现的各种环境问题。使用直接编译方式需要注意第三方包的下载一定要下载指定连接的包且务必完整,推荐使用 Docker 镜像方式进行编译,这样不仅可以省去环境的配置,同时编译的时候还省去了不太好下载的几十个三方包的下载。


2 通过 Docker 开发镜像进行编译【推荐】

这个是官方文档推荐的,可以非常方便顺利的编译源码,如果需要快速部署的,可以使用这种方式。这种方式的优点就是不用配置环境比那辆,也不用考虑各种版本问题,进入开发镜像系统后直接下载 doris 源码编译即可。

2.1 安装 Docker

首先需要安装 Docker,Docker 在 Linux 下安装比较简单,直接下载 Docker 的 rpm 包安装即可,如果安装中出现如下错误:

error: Failed dependencies: container-selinux >= 2.9 is needed by docker-ce-18.03.1.ce-1.el7.centos.x86_64

下载安装 container-selinux 即可:

# http://mirror.centos.org/centos/7/extras/x86_64/Packages/
wget http://mirror.centos.org/centos/7/extras/x86_64/Packages/container-selinux-2.107-3.el7.noarch.rpm
rpm -ivh container-selinux-2.107-3.el7.noarch.rpm

# 安装 container-selinux 如果提示其它依赖缺失,通过 yum 安装即可
wget http://mirror.centos.org/centos/7/extras/x86_64/Packages/container-selinux-2.107-3.el7.noarch.rpm
rpm -ivh container-selinux-2.107-3.el7.noarch.rpm
# 如果报 libltdl.so.7()(64bit) is needed by docker-ce-18.03.1.ce-1.el7.centos.x86_64,需要安装如下
yum install -y libtool-ltdl
# 如果报 pigz is needed by docker-ce-18.03.1.ce-1.el7.centos.x86_64,需要安装
yum install -y pigz

如果已经启动了 Docker 服务(systemctl status docker),我们直接拉取镜像,开始编译 Doris。

  • apachedoris/doris-dev
  • apachedoris/doris-dev:build-env-1.2 版本
    • JDK 为 1.8.0_211(需自己配置 jdk 环境变量)
    • CMake 版本为 3.12.3
    • gcc/g++ 为 7.3.0
    • Bison 为 3.0.4

2.2 获取源码

# 下载源码到宿主机
wget http://archive.apache.org/dist/incubator/doris/0.13.0-incubating/apache-doris-0.13.0-incubating-src.tar.gz
tar -zxf apache-doris-0.13.0-incubating-src.tar.gz -C /opt/

# 1 拉取 Doris 官方提供的 Docker 镜像
#  可访问下面的连接,获取可用的镜像版本
#  https://registry.hub.docker.com/r/apachedoris/doris-dev/tags?page=1&ordering=last_updated
#  目前可用版本有:build-env、build-env-1.1、build-env-1.2
#
# 【说明】 build-env-1.3 Docker 镜像默认为 JDK11,如果环境为 JDK8,可以继续使用 build-env-1.2
docker pull apachedoris/doris-dev:build-env-1.2

# 2 查看 Docker 镜像 
docker images
#REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
#apachedoris/doris-dev   build-env-1.2       87dfd327471f        5 months ago        3.26GB

# 3 运行镜像
# 根据官方的建议,最好将宿主机的 Maven 本地仓库映射到容器中,源码也是,
# 这样避免编译 java 代码的时候重复下载依赖包,同时编译完之后的包直接在宿主机磁盘中,
# 如果关闭或者删除容器,这些资源都不会丢失
docker run -it -v /opt/.m2/repo:/root/.m2/repository \
-v /opt/incubator-doris-0.13.0:/opt/doris-src-0.13.0 \
--privileged=true --cap-add SYS_ADMIN  -w /opt/doris-src-0.14.0 \
-d apachedoris/doris-dev:build-env-1.2 /usr/sbin/init

# 4 docker 其它操作
# 4.1 查看 docker 容器进程
docker ps
#NER ID        IMAGE                                 COMMAND             CREATED             STATUS              PORTS                   NAMES
#4fadd7f85e44        apachedoris/doris-dev:build-env-1.2   "/usr/sbin/init"    32 seconds ago      Up 31 seconds       0.0.0.0:20022->22/tcp   frosty_raman

# 4.2 进入容器环境
docker exec -it $CONTAINER_ID_flag /bin/bash


# 5 配置容器的jdk 环境,【可选】如果环境变量中没有 java,需要手动配置下
# /usr/java/jdk

# 6 编译
# 如果需要使用 MySQL 和 LZO,可以如下命令编译
WITH_MYSQL=1 WITH_LZO=1 sh build.sh

# 7 编译成功后的二进制文件在 output/
ls -l output/


3 直接编译

3.1 前置要求

对于安装,按照官方文档推荐的 Docker 方式部署基本是没问题的,这里主要说明下直接通过源码编译方式需要注意的一些问题,以及参考解决方法。

官方文档直接编译当前最新版本(0.13.0)的源码部分,对的系统有如下要求:

  • GCC 7.3+
  • Oracle JDK 1.8+
  • Python 2.7+
  • Apache Maven 3.5+
  • CMake 3.11+
  • Bison 3.0+

3.2 编译

如果一次性安装所需软件,可以直接使用官方的如下命令:

sudo yum groupinstall 'Development Tools' && sudo yum install maven cmake \
byacc flex automake libtool bison binutils-devel zip unzip ncurses-devel curl git wget \
python2 glibc-static libstdc++-static java-1.8.0-openjdk

如果需要当个一次安装可以参考下面的步骤

3.2.1 CMake 3.11+

#  0 基本的务必安装
yum install -y zip unzip curl git wget python2

#  1 下载并解压
# 访问 https://cmake.org/files,比如以 linux x86_64 系统为例,安装 3.11.4,可以下载如下
wget https://cmake.org/files/v3.11/cmake-3.11.4-Linux-x86_64.tar.gz
tar -zxf cmake-3.11.4-Linux-x86_64.tar.gz

#  2 编译或创建软连
#cd cmake-3.11.4-Linux-x86_64
#./bootstrap --prefix=/usr/local/cmake
mv cmake-3.11.4-Linux-x86_64 /usr/local/cmake
ln -s /usr/local/cmake/bin/cmake /usr/bin/cmake

# 3 添加到环境变量
export PATH=$PATH:/usr/local/cmake/bin

# 查看版本验证
cmake --version

3.2.2 GCC 7.3+

这一步非常重要,最好下载满足条件的版本,耐心的编译,否则因为 GCC 版本或者包的问题容易在编译 Doris 出现一系列莫名的错误,因为 Doris 中依赖了较多的三方库(可以查看 thirdparty/vars.sh),其中有些三方库会一般都需要 对应的版本对 GCC 有一些

# 1 查看环境中的 gcc 是否满足条件
gcc -v

# 2 环境(必须)
yum groupinstall "Development Tools"
yum install -y glibc-static libstdc++-static
yum install -y byacc flex automake libtool binutils-devel ncurses-devel

# 3 下载 GCC 
# 例如这里下载 gcc 7.3.0 版本
# 官网下载页:https://gcc.gnu.org/releases.html
## 
# 3.1 方式一【推荐】:编译方式(以 华中科技大源 为例)
wget http://mirror.hust.edu.cn/gnu/gcc/gcc-7.3.0/gcc-7.3.0.tar.xz
tar -xf gcc-7.3.0.tar.xz
cd gcc-7.3.0
# 下载需要的包
# 需方访问 ftp://gcc.gnu.org/pub/gcc/infrastructure/,
#  如果失败可以将 mpc-1.0.3.tar.gz、mpfr-3.1.4.tar.bz2、isl-0.16.1.tar.bz2、gmp-6.1.0.tar.bz2 包下载放到项目根目录下
./contrib/download_prerequisites
# 编译
mkdir build
cd build
../configure --prefix=/usr/local/gcc-7.3.0 --enable-checking=release --enable-languages=c,c++ --disable-multilib
# 若给的资源不够,会导致编译时间较长
make -j$[$(nproc)/4+1]
make install

# 3.2 方式二:解压后创建软连直接使用
wget https://gfortran.meteodat.ch/download/x86_64/releases/gcc-7.5.0.tar.xz
tar -xf gcc-7.5.0.tar.xz
mv gcc-7.5.0 /usr/local/

# 4【可选】卸载或备份
rpm -q gcc
rpm -e gcc-4.8.5-39.el7.x86_64
rpm -q libmpc
rpm -q mpfr
# 【推荐】备份
mv /usr/bin/gcc /usr/bin/gcc_old
mv /usr/bin/g++ /usr/bin/g++_old
mv /usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6_old

# 5 创建软连
ln -s /usr/local/gcc-7.3.0/bin/gcc /usr/bin/gcc
ln -s /usr/local/gcc-7.3.0/bin/g++ /usr/bin/g++
cp /usr/local/gcc-7.3.0/lib64/libstdc++.so.6.0.24 /usr/lib64/
ln -s /usr/lib64/libstdc++.so.6.0.24 /usr/lib64/libstdc++.so.6
ln -s /usr/local/gcc-7.3.0/lib64/libatomic.so.1 /usr/lib64/libatomic.so.1


# 5 查看版本以验证
gcc -v
g++ -v
strings /usr/lib64/libstdc++.so.6 | grep GLIBC

3.2.3 Bison 3.0+

# 1 查看当前系统的 Bsion 版本
bison -V

# 2 如果没有,则需要安装
wget http://ftp.gnu.org/gnu/bison/bison-3.0.5.tar.xz
tar -xf bison-3.0.5.tar.xz
cd bison-3.0.5
mkdir build
cd build
../configure --prefix=/usr/local/bison-3.0.5
make && make install

# 3 替换为新版本
mv /usr/bin/bison /usr/bin/bison_old
ln -s /usr/local/bison-3.0.5/bin/bison /usr/bin/bison

3.2.4 其它

Apache Maven 需要 3.5+ 、Oracle JDK 1.8+ 、Python 2.7+ 这些可自行查找相关资料进行安装。

3.2.5 开始编译 Doris

# 1 下载
wget https://mirrors.tuna.tsinghua.edu.cn/apache/incubator/doris/0.13.0-incubating/apache-doris-0.13.0-incubating-src.tar.gz
tar -zxf apache-doris-0.13.0-incubating-src.tar.gz

# 3 【为加速可继续往下看】编译
cd apache-doris-0.13.0-incubating-src
# 从 0.13 版本开始,因为协议的不兼容,移除了 mysql-5.7.18 和 lzo-2.10 库
#  如果需要访问 mysql 外部表,可以编译时手动添加 WITH_MYSQL=1
#  如果需要继续使用 LZO 压缩算法(例如访问早期写入数据时),添加 WITH_LZO=1
#  如果编译的机器网速很慢,可以后台执行  
#WITH_MYSQL=1 sh build.sh >log.txt 2>&1 &
# --clean
WITH_MYSQL=1 sh build.sh

根据 thirdparty/vars.sh)脚本,我们知道在 0.13.0 版本中

# 1 libevent
LIBEVENT_DOWNLOAD="https://doris-incubating-repo.bj.bcebos.com/thirdparty/libevent-20180622-24236aed01798303745470e6c498bf606e88724a.zip"
# 2 openssl
OPENSSL_DOWNLOAD="https://www.openssl.org/source/old/1.0.2/openssl-1.0.2k.tar.gz"
# 3 thrift
THRIFT_DOWNLOAD="http://archive.apache.org/dist/thrift/0.9.3/thrift-0.9.3.tar.gz"
# 4 llvm
LLVM_DOWNLOAD="http://releases.llvm.org/3.4.2/llvm-3.4.2.src.tar.gz"
# 5 clang
CLANG_DOWNLOAD="http://releases.llvm.org/3.4.2/cfe-3.4.2.src.tar.gz"
# 6 compiler-rt
COMPILER_RT_DOWNLOAD="http://releases.llvm.org/5.0.0/compiler-rt-5.0.0.src.tar.xz"
# 7 protobuf
PROTOBUF_DOWNLOAD="https://github.com/google/protobuf/archive/v3.5.1.tar.gz"
# 8 gflags
GFLAGS_DOWNLOAD="https://github.com/gflags/gflags/archive/v2.2.0.tar.gz"
# 9 glog
GLOG_DOWNLOAD="https://github.com/google/glog/archive/v0.3.3.tar.gz"
# 10 gtest
GTEST_DOWNLOAD="https://github.com/google/googletest/archive/release-1.8.0.tar.gz"
# 11 snappy
SNAPPY_DOWNLOAD="https://github.com/google/snappy/archive/1.1.7.tar.gz"
# 12 gperftools
GPERFTOOLS_DOWNLOAD="https://github.com/gperftools/gperftools/archive/gperftools-2.7.tar.gz"
# 13 zlib
ZLIB_DOWNLOAD="https://sourceforge.net/projects/libpng/files/zlib/1.2.11/zlib-1.2.11.tar.gz"
# 14 lz4
LZ4_DOWNLOAD="https://github.com/lz4/lz4/archive/v1.7.5.tar.gz"
# 15 bzip
BZIP_DOWNLOAD="ftp://sourceware.org/pub/bzip2/bzip2-1.0.8.tar.gz"
# 16 lzo2
LZO2_DOWNLOAD="http://www.oberhumer.com/opensource/lzo/download/lzo-2.10.tar.gz"
# 17 rapidjson
RAPIDJSON_DOWNLOAD="https://github.com/miloyip/rapidjson/archive/v1.1.0.tar.gz"
# 18 curl
CURL_DOWNLOAD="https://curl.haxx.se/download/curl-7.54.1.tar.gz"
# 19 RE2
RE2_DOWNLOAD="https://github.com/google/re2/archive/2017-05-01.tar.gz"
# 20 boost
BOOST_DOWNLOAD="https://dl.bintray.com/boostorg/release/1.64.0/source/boost_1_64_0.tar.gz"
# 21 mysql
MYSQL_DOWNLOAD="https://github.com/mysql/mysql-server/archive/mysql-5.7.18.tar.gz"
# 22 boost for mysql
BOOST_FOR_MYSQL_DOWNLOAD="http://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz"
# 23 unix odbc
ODBC_DOWNLOAD="http://www.unixodbc.org/unixODBC-2.3.7.tar.gz"
# 24 leveldb
LEVELDB_DOWNLOAD="https://github.com/google/leveldb/archive/v1.20.tar.gz"
# 25 brpc
BRPC_DOWNLOAD="https://github.com/apache/incubator-brpc/archive/0.9.5.tar.gz"
# 26 rocksdb
ROCKSDB_DOWNLOAD="https://github.com/facebook/rocksdb/archive/v5.14.2.tar.gz"
# 27 librdkafka
LIBRDKAFKA_DOWNLOAD="https://github.com/edenhill/librdkafka/archive/v0.11.6-RC5.tar.gz"
# 28 zstd
ZSTD_DOWNLOAD="https://github.com/facebook/zstd/archive/v1.3.7.tar.gz"
# 28 double-conversion
DOUBLE_CONVERSION_DOWNLOAD="https://github.com/google/double-conversion/archive/v3.1.1.tar.gz"
# 30 brotli
BROTLI_DOWNLOAD="https://github.com/google/brotli/archive/v1.0.7.tar.gz"
# 31 flatbuffers
FLATBUFFERS_DOWNLOAD="https://github.com/google/flatbuffers/archive/v1.10.0.tar.gz"
# 32 arrow
ARROW_DOWNLOAD="https://github.com/apache/arrow/archive/apache-arrow-0.15.1.tar.gz"
# 33 S2
S2_DOWNLOAD="https://github.com/google/s2geometry/archive/v0.9.0.tar.gz"
# 34 BITSHUFFLE
BITSHUFFLE_DOWNLOAD="https://github.com/kiyo-masui/bitshuffle/archive/0.3.5.tar.gz"
# 35 CROARINGBITMAP
CROARINGBITMAP_DOWNLOAD="https://github.com/RoaringBitmap/CRoaring/archive/v0.2.60.tar.gz"
# 36 ORC
ORC_DOWNLOAD="https://archive.apache.org/dist/orc/orc-1.5.8/orc-1.5.8.tar.gz"
# 37 jemalloc
JEMALLOC_DOWNLOAD="https://github.com/jemalloc/jemalloc/releases/download/5.2.1/jemalloc-5.2.1.tar.bz2"
# 38 CCTZ
CCTZ_DOWNLOAD="https://github.com/google/cctz/archive/v2.3.tar.gz"
# 39 datatables, bootstrap 3 and jQuery 3
DATATABLES_DOWNLOAD="https://datatables.net/download/builder?bs-3.3.7/jq-3.3.1/dt-1.10.22"
# 40 bootstrap table js
BOOTSTRAP_TABLE_JS_DOWNLOAD="https://unpkg.com/[email protected]/dist/bootstrap-table.min.js"
# 41 bootstrap table css
BOOTSTRAP_TABLE_CSS_DOWNLOAD="https://unpkg.com/[email protected]/dist/bootstrap-table.min.css"

因为第三方下载连接的问题,dt-1.10.22 会下载失败,详细可查看 Issues #5128 或 PR [Thirdparty] Fix the DataTables.zip download issue。因此 thirdparty/vars.sh 第 285-289 行修改为如下

# datatables, bootstrap 3 and jQuery 3
DATATABLES_DOWNLOAD="https://datatables.net/download/builder?bs-3.3.7/jq-3.3.1/dt-1.10.23"  #DATATABLES_DOWNLOAD="https://datatables.net/download/builder?bs-3.3.7/jq-3.3.1/dt-1.10.22"
DATATABLES_NAME="DataTables.zip"
DATATABLES_SOURCE="DataTables-1.10.23"  #DATATABLES_SOURCE="DataTables-1.10.22"
DATATABLES_MD5SUM="f7f18a9f39d692ec33b5536bff617232"    #DATATABLES_MD5SUM="62558846fc6a6db1428e7816a2a351f7"

编译构建时默认使用 PARALLEL=$[$(nproc)/4+1] 进程资源数,如果CPU 进程资源充足,可以调大,修改 build.sh 脚本第 44 行 vim build.sh +44

为了方便大家构架编译,这里我把 apache-doris-0.13.0 涉及到的三方包已经上传到云盘 【百度与】提取码:j06r ,需要的可以直接下载,并将其放到 thirdparty/src 下,注意每个包的 MD5 值,如果下载的包不一致则编译前会重新下载,可以通过 md5sum 包文件 查看其 md5 值(如果使用的我提供百度云连接,可以查看 !vars.sh ,保持一致即可)。

3.3 问题解决

3.3.1 js_generator.cc:(.text+0xfc3c): undefined reference to `well_known_types_js’

查找 Doris 源码中的 js_embed,一般在三方库的 protobuf 下,直接移除掉,重新编译即可

 find ./ -name js_embed
 mv ./thirdparty/src/protobuf-3.5.1/src/js_embed ./

3.3.2 /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21’ not found

问题的原因就是在使用 gcc 编译时,使用本地环境的库 libstdc++.so.6 中的方法时找不到需要的信息,一般是在安装或升级是没有把环境变量的这个库文件升级,解决方法如下:

find / -name "libstdc++.so*"
cd /usr/lib64
strings /usr/lib64/libstdc++.so.6 | grep GLIBC

# 查看 /usr/lib64 目录下的 libstdc 开头的文件
[root@aliyun01 lib64]# ll libstdc*
lrwxrwxrwx 1 root root     19 Nov 19 09:07 libstdc++.so.6 -> libstdc++.so.6.0.19
-rwxr-xr-x 1 root root 995840 Sep 30 10:17 libstdc++.so.6.0.19

# 把高版本的拷贝到 /usr/lib64 下
cp /usr/local/gcc-7.3.0/lib64/libstdc++.so.6.0.24 ./
# 创建软连接
rm libstdc++.so.6
ln -s libstdc++.so.6.0.24 libstdc++.so.6

3.3.3 libatomic.so.1: cannot open shared object file: No such file or directory

编译三方包时如果报如下的错误

./comp_err: error while loading shared libraries: libatomic.so.1: cannot open shared object file: No such file or directory
make[3]: *** [include/mysqld_error.h] Error 127
make[2]: *** [extra/CMakeFiles/GenError.dir/all] Error 2
make[1]: *** [libmysql/CMakeFiles/mysqlclient.dir/rule] Error 2
make: *** [mysqlclient] Error 2

原因是安装 gcc 或升级之后,其中的 libatomic.so.1 包没有在环境变量中生效,我们直接将新版本 gcc 的安装目录下的 libatomic.so.1 软连到 /usr/lib64 下即可。

ln -s /usr/local/gcc-7.3.0/lib64/libatomic.so.1 /usr/lib64/libatomic.so.1

3.3.4 Could NOT find Curses (missing: CURSES_LIBRARY CURSES_INCLUDE_PATH)

在编译安装 GCC 7.3 时,其中我们安装了 ncurses-devel,如果忽略了这个,系统环境又没有安装,则在编译 Doris 时就会报这个错误,解决方法就是 yum 安装这个依赖。

yum install ncurses-devel

3.3.5 configure: error: Building GCC requires GMP 4.2+, MPFR 2.4.0+ and MPC 0.8.0+.

环境中缺少依赖,解决方法如下:

 yum install  gmp  gmp-devel  mpfr  mpfr-devel  libmpc  libmpc-devel

3.3.6 error while loading shared libraries: libisl.so.15: cannot open shared object file: No such file or directory

这个问题比较隐蔽,通过访问 http://rpm.pbone.net/ 搜索 libisl.so.15 库。
Apache Doris 的一场编译之旅_第1张图片
在查询出的结果中,我们查找 CentOS7 的条目,可以发下这个库为 libisl15-0.18-9.94.el7.x86_64.rpm,到这里问题就好解决了,我们直接下载这个包安装即可
Apache Doris 的一场编译之旅_第2张图片

wget ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/home:/aevseev:/devel/CentOS7/x86_64/libisl15-0.18-9.94.el7.x86_64.rpm
rpm -ivh libisl15-0.18-9.94.el7.x86_64.rpm

3.3.7 Plugin net.sourceforge.czt.dev:cup-maven-plugin:1.6-cdh or one of its dependencies could not be resolved

在编译到 fe 中的项目时报如下的错误

[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] 
[INFO] fe-common 1.0.0 .................................... SUCCESS [01:45 min]
[INFO] spark-dpp 1.0.0 .................................... SUCCESS [02:37 min]
[INFO] fe-core 3.4.0 ...................................... FAILURE [  1.726 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  04:25 min
[INFO] Finished at: 2021-02-02T20:39:34+08:00
[INFO] ------------------------------------------------------------------------
[ERROR] Plugin net.sourceforge.czt.dev:cup-maven-plugin:1.6-cdh or one of its dependencies could not be resolved: Could not find artifact net.sourceforge.czt.dev:cup-maven-plugin:jar:1.6-cdh in nexus-aliyun (http://maven.aliyun.com/nexus/content/groups/public) -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginResolutionException

根据官方提供的问题解决方法,参考 PR #4769 ,我们直接修改 fe/pom.xml,如下图所示,保存后然后再次编译项目。
Apache Doris 的一场编译之旅_第3张图片

3.3.8 Could not resolve dependencies for project org.apache:fe-core:jar:3.4.0: Failure to find com.sleepycat:je:jar:7.3.7

原因就是通过 https://repo.spring.io/libs-milestone/com/sleepycat/je/7.3.7/je-7.3.7.jar 下载包时需要用户认证,所以会下载失败,可以在 Maven 配置文件 setting.xml 中新增如下的仓库镜像,重新编译即可。

 <mirror>
      <id>oracleReleasesid>
      <mirrorOf>oracleReleasesmirrorOf>
      <name>Oracle Released Java Packagesname>
      <url>http://download.oracle.com/mavenurl>
    mirror>

3.3.9 A required class was missing while executing net.sourceforge.czt.dev:cup-maven-plugin:1.6-cdh:generate: org/sonatype/plexus/build/incremental/BuildContext

清除 Maven 本地仓库的 cup-maven-plugin(Maven 配置的仓库路径下的 net/sourceforge/czt/dev/cup-maven-plugin/1.6-cdh),为了防止其他镜像资源的影响,可以先将本地 Maven 配置文件中添加的其它镜像注释掉,可以只保留下面的一个镜像,用来可以正常下载 je-7.3.7.jar 依赖包。

mirrors>
    <mirror>
      <id>oracleReleasesid>
      <mirrorOf>oracleReleasesmirrorOf>
      <name>Oracle Released Java Packagesname>
      <url>http://download.oracle.com/mavenurl>
    mirror>
mirrors>

Doris 源码下的 fe/pom.xml 中的 标签里的检查下,可以修改为如下链接,然后再次执行编译即可,

       
        <profile>
            <id>general-envid>
            <activation>
                <property>
                    <name>!env.CUSTOM_MAVEN_REPOname>
                property>
            activation>

            <repositories>
                <repository>
                    <id>centralid>
                    <name>central maven repo httpsname>
                    <url>https://repo.maven.apache.org/maven2url>
                repository>
                
                <repository>
                    
                    <id>cloudera-publicid>
                    <url>https://repository.cloudera.com/artifactory/public/url>
                repository>
                
                <repository>
                    <id>oracleReleasesid>
                    <url>http://download.oracle.com/mavenurl>
                repository>
            repositories>

            <pluginRepositories>
                <pluginRepository>
                    <id>spring-pluginsid>
                    
					<url>https://repository.cloudera.com/artifactory/ext-release-localurl>
                pluginRepository>
                
                <pluginRepository>
                    
                    <id>cloudera-publicid>
                    <url>https://repository.cloudera.com/artifactory/public/url>
                pluginRepository>
            pluginRepositories>
        profile>

其中可参考 BUILD FAILURE #3129

3.3.10 Caused by: java.lang.NoClassDefFoundError: java_cup/runtime/SymbolFactory

[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  45.080 s (Wall Clock)
[INFO] Finished at: 2021-06-28T04:56:18Z
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal net.sourceforge.czt.dev:cup-maven-plugin:1.6-cdh:generate (cup) on project fe-core: Execution cup of goal net.sourceforge.czt.dev:cup-maven-plugin:1.6-cdh:generate failed: A required class was missing while executing net.sourceforge.czt.dev:cup-maven-plugin:1.6-cdh:generate: java_cup/runtime/SymbolFactory
[ERROR] -----------------------------------------------------

    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:169)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:210)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
    at org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call (MultiThreadedBuilder.java:190)
    at org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call (MultiThreadedBuilder.java:186)
    at java.util.concurrent.FutureTask.run (FutureTask.java:266)
    at java.util.concurrent.Executors$RunnableAdapter.call (Executors.java:511)
    at java.util.concurrent.FutureTask.run (FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:624)
    at java.lang.Thread.run (Thread.java:748)
Caused by: java.lang.NoClassDefFoundError: java_cup/runtime/SymbolFactory

原因是 net.sourceforge.czt.dev:cup-maven-plugin:1.6-cdh 依赖于

    <dependency>
      <groupId>net.sourceforge.czt.devgroupId>
      <artifactId>java-cupartifactId>
      <type>jartype>
      <version>0.11-a-czt02-cdhversion>
    dependency>
    <dependency>
      <groupId>net.sourceforge.czt.devgroupId>
      <artifactId>java-cup-runtimeartifactId>
      <type>jartype>
      <version>0.11-a-czt01-cdhversion>
    dependency>

手动下载导入本地 Maven 仓库

wget https://repository.cloudera.com/artifactory/public/net/sourceforge/czt/dev/java-cup-runtime/0.11-a-czt01-cdh/java-cup-runtime-0.11-a-czt01-cdh.jar

mvn install:install-file -DgroupId=net.sourceforge.czt.dev -DartifactId=java-cup-runtime -Dversion=0.11-a-czt01-cdh -Dpackaging=jar -Dfile=java-cup-runtime-0.11-a-czt01-cdh.jar

# 将 java-cup-runtime 依赖添加到 fe-core/pom.xml +176 行

3.4 编译成功

Doris 编译成功后控制台显示如下 Successfully build Doris
Apache Doris 的一场编译之旅_第4张图片
同时编译成功后会在项目根目录下生成 output/,其中为编译之后可以直接部署的二进制包,大概有 1.2GB。
Apache Doris 的一场编译之旅_第5张图片


你可能感兴趣的:(数据库,大数据,Apache,Doris,编译,MPP)