build doris 0.11.5 on centos 7/ubuntu
doris has envolved many thirdparty components since v0.9. so the build progress has changed a lot since v0.9, in this article, I will demostrate the process about building doris v0.11.5 on centos 7. In the building process, I have encountered some issues, and thanks to the help of May who a key engineer of doris team, I solved them.
1. install dependencies which is required for build doris on local machine
sudo yum install gcc-c++ libstdc++-static ant cmake byacc flex automake libtool binutils-devel bison ncurses-devel && \
sudo updatedb && \
sudo yum install redhat-lsb
2. download source from github
wget https://codeload.github.com/baidu-doris/incubator-doris/tar.gz/DORIS-0.11.5-alpha
tar -xzvf incubator-doris-DORIS-0.11.-alpha-src.tar.gz
cd incubator-doris-DORIS-0.11.-alpha-src
3. build third party components
the thirdparty components download is very slow, I have upload the thirdparty tarball onto pan.baidu.com, we can download it there to improve the process.
链接: https://pan.baidu.com/s/1kxW07GTh0Jx66f1AYfgPsw 提取码: b7ki, to use the tarball, just unzip it and move the contents into incubator-doris-DORIS-0.11.5-alpha-src/thirdparty/src folder.
cd thirdparty
sh build-thirdparty.sh
the thirdparty components reqiure GCC 5+ to build! which has been changed since v0.8.2.1 to be compatible with ubuntu 18.04 to build doris, because the llvm component failed to build on ununtu 18.04, and the root cause is the glibc version on ununtu is higher than centos, so the doris team has made this change on centos( reqiure GCC 5+ to build the souce)
if you have installed gcc 5+ on centos, then the thirdparty components would build success. for install gcc 5+ on centos 7, please refere my previous post in the section of 3. 安装GCC v5.2+
but there's another issue about build the source which I would refer below!!!
4. Build doris product source
4.1 build be source on centos 7
cd incubator-doris-DORIS-0.11.-alpha-src && sh build.sh --be
In my build progess, I have encounted issues as follows:
/root/workspace/palo-0.11./be/src/olap/key_coder.cpp: In member function ‘void doris::KeyCoderResolver::add_mapping()’:
/root/workspace/palo-0.11./be/src/olap/key_coder.cpp::: error: ‘class std::unordered_map<doris::FieldType, doris::KeyCoder*>’ has no member named ‘emplace’
_coder_map.emplace(field_type, new KeyCoder(KeyCoderTraits<field_type>()));
^
make[]: *** [src/olap/CMakeFiles/Olap.dir/key_coder.cpp.o] Error
make[]: *** [src/olap/CMakeFiles/Olap.dir/all] Error
make[]: *** Waiting for unfinished jobs....
[ %] Building CXX object src/olap/rowset/CMakeFiles/Rowset.dir/rowset_id_generator.cpp.o
[ %] Building CXX object src/exec/CMakeFiles/Exec.dir/merge_join_node.cpp.o
the reason for this failure is: doris require GCC 7+ to build the product source even if the thirdparty components has build success!!! So the solution is to upgrade local GCC to version 7+, installing GCC 7+, please refer to my post centos7 gcc升级
since the thirdparty is build using GCC lower than 7, so you need to rebuild the thirdparth components,or else the product code would failed.
BTW, if you have seem the following error message during building product code:
[ %] Generating /workspace/palo-0.11./gensrc/build/geo/wkt_yacc.y.cpp, /root/workspace/palo-0.11./gensrc/build/geo/wkt_yacc.y.hpp
/root/workspace/palo-0.11./be/src/geo/wkt_yacc.y:56.20-: error: syntax error, unexpected {...}
make[]: *** [/root/workspace/palo-0.11./gensrc/build/geo/wkt_yacc.y.cpp] Error
make[]: *** [src/geo/CMakeFiles/Geo.dir/all] Error
it most likely the version issue caused by yacc, the doris has changed the dependency of yacc into byacc, the soluton is to install byacc as mentioned in section 1, then this issue would be resolved. this dependency is introduced since v0.11.
after upgrade GCC to version above 7.0+, you build for thirdparty component would encouter error like
[ %] Generating ../include/mysqld_error.h, ../sql/share/english/errmsg.sys
./comp_err: error while loading shared libraries: libatomic.so.: cannot open shared object file: No such file or directory
make[]: *** [include/mysqld_error.h] Error
make[]: *** [extra/CMakeFiles/GenError.dir/all] Error
make[]: *** [libmysql/CMakeFiles/mysqlclient.dir/rule] Error
make: *** [mysqlclient] Error
to resolve such error,
sudo cp /usr/local/lib64/libatomic.so.1.2. /usr/lib64
sudo cp /usr/local/lib64/libatomic.so.1.2. /usr/lib
sudo ldconfig
4.2 build source code on ununtu
if you are builing the source code on ununtu, since the default gcc version is v7.0+, so the gcc version is compatible for building doris, but there's another question about it:
[ %] Building CXX object src/env/CMakeFiles/Env.dir/env_posix.cpp.o
In file included from workspace/open-source/incubator-doris-DORIS-0.11.-alpha/be/src/env/env_posix.cpp:::
workspace/open-source/incubator-doris-DORIS-0.11.-alpha/be/src/env/env_posix.cpp: In function ‘doris::Status doris::do_readv_at(int, const string&, uint64_t, const doris::Slice*, size_t’:
workspace/open-source/incubator-doris-DORIS-0.11.-alpha/be/src/env/env_posix.cpp::: error: ‘preadv’ was not declared in this scope
RETRY_ON_EINTR(r, preadv(fd, iov + completed_iov, iov_count, cur_offset));
^
workspace/open-source/incubator-doris-DORIS-0.11.-alpha/be/src/gutil/macros.h::: note: in definition of macro ‘RETRY_ON_EINTR’
(err) = (expr); \
^~~~
workspace/open-source/incubator-doris-DORIS-0.11.-alpha/be/src/env/env_posix.cpp::: note: suggested alternative: ‘pread’
RETRY_ON_EINTR(r, preadv(fd, iov + completed_iov, iov_count, cur_offset));
^
workspace/open-source/incubator-doris-DORIS-0.11.-alpha/be/src/gutil/macros.h::: note: in definition of macro ‘RETRY_ON_EINTR’
(err) = (expr); \
^~~~
workspace/open-source/incubator-doris-DORIS-0.11.-alpha/be/src/env/env_posix.cpp: In function ‘doris::Status doris::do_writev_at(int, const string&, uint64_t, const doris::Slice*, size_t, size_t*)’:
workspace/open-source/incubator-doris-DORIS-0.11.-alpha/be/src/env/env_posix.cpp::: error: ‘pwritev’ was not declared in this scope
RETRY_ON_EINTR(w, pwritev(fd, iov + completed_iov, iov_count, cur_offset));
^
workspace/open-source/incubator-doris-DORIS-0.11.-alpha/be/src/gutil/macros.h::: note: in definition of macro ‘RETRY_ON_EINTR’
(err) = (expr); \
^~~~
workspace/open-source/incubator-doris-DORIS-0.11.-alpha/be/src/env/env_posix.cpp::: note: suggested alternative: ‘pwrite’
RETRY_ON_EINTR(w, pwritev(fd, iov + completed_iov, iov_count, cur_offset));
^
workspace/open-source/incubator-doris-DORIS-0.11.-alpha/be/src/gutil/macros.h::: note: in definition of macro ‘RETRY_ON_EINTR’
(err) = (expr); \
^~~~
src/env/CMakeFiles/Env.dir/build.make:: recipe for target 'src/env/CMakeFiles/Env.dir/env_posix.cpp.o' failed
make[]: *** [src/env/CMakeFiles/Env.dir/env_posix.cpp.o] Error
CMakeFiles/Makefile2:: recipe for target 'src/env/CMakeFiles/Env.dir/all' failed
make[]: *** [src/env/CMakeFiles/Env.dir/all] Error
make[]: *** Waiting for unfinished jobs....
[ %] Building CXX object src/exprs/CMakeFiles/Exprs.dir/conditional_functions.cpp.o
[ %] Building CXX object src/exprs/CMakeFiles/Exprs.dir/conditional_functions_ir.cpp.o
this is caused by missing reference for preadv, the solution is to include header file for peadv, detail action as follows:
a) open file incubator-doris-DORIS-0.11.5-alpha/be/src/env/env_posix.cpp
b) include <sys/uio.h> at the header reference section, then rebuild the source ,everything would go smoothly on ubuntu.

For such issue, I have commite a pull request to the doris team, it must has been merged into the master branch.
build doris 0.11.5 on centos 7/ubuntu的更多相关文章
- CentOS 7.2.1511编译安装Nginx1.10.1+MySQL5.7.14+PHP7.0.11
准备篇 一.防火墙配置 CentOS 7.x默认使用的是firewall作为防火墙,这里改为iptables防火墙. 1.关闭firewall: systemctl stop firewalld.se ...
- Centos 6.5下mysql 8.0.11的rpm包的安装方式
1.系统版本及mysql下载地址 操作系统:Centos 6.5(Centos 7.4下载对应的mysql版本安装同理) mysql数据库版本:mysql8.0.11 mysql官方网站:http:/ ...
- CentOS 7.2.1511编译安装Nginx1.10.1+MySQL5.7.15+PHP7.0.11
准备篇 一.防火墙配置 CentOS 7.2默认使用的是firewall作为防火墙,这里改为iptables防火墙. 1.关闭firewall: systemctl stop firewalld.se ...
- centos 7 redis-4.0.11 主从
redis-master:192.168.199.223 redis-slave: 192.168.199.224 cd /opt wget http://download.redis.io/rele ...
- doris 0.9.0版本docker镜像制作与使用
1. 安装docker 详情请参见本人博客 2. 编译doris 详情请参见doris官网文档 3. 在编译好的doris output文件夹下编写两个Dockerfile 3.1 Dockerfi ...
- [转载]Linux 环境下编译 0.11版本内核 kernel
最近在看<.如果Clobber/Modify 为空,则其前面的冒号(:)必须省略. 2.如果Output,Input,Clobber/Modify都为空,Output,Input之前的冒号(:) ...
- Kafka 0.11.0.0 实现 producer的Exactly-once 语义(英文)
Exactly-once Semantics are Possible: Here’s How Kafka Does it I’m thrilled that we have hit an excit ...
- redis(4.0.11)编译安装
一: redis数据库安装 系统环境:linux系统(centos/redhat):Red Hat Enterprise Linux Server release 6.8 (Santiago) red ...
- system libzip must be upgraded to version >= 0.11
PHP当前最新版本是PHP7.3,今天在尝试安装的过程中报如下错误: system libzip must be upgraded to version >= 0.11, 根据提示我们可以清楚的 ...
随机推荐
- Python爬取网页信息
Python爬取网页信息的步骤 以爬取英文名字网站(https://nameberry.com/)中每个名字的评论内容,包括英文名,用户名,评论的时间和评论的内容为例. 1.确认网址 在浏览器中输入初 ...
- 2019/2/18 Test
图论模拟 [简述情况]: \(110/400\) \(20 \leq rank\) \(AC:1\) 有思路但未\(AC:0\) 无思路\(:3\) 题目 简述 \(LUOGU4304\) 二分图最大 ...
- java如何连接数据库并对其操作(以PostgreSQL为例)
java如何连接数据库并对其操作(以PostgreSQL为例) 相关概念 JDBC(Java Data Base Connectivity)是一种用于执行SQL语句的Java API,可以为多种关系数 ...
- POJ 1927 Area in Triangle
Area in Triangle Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 1674 Accepted: 821 D ...
- 2019暑期金华集训 Day7 动态规划
自闭集训 Day7 动态规划 LOJ6395 首先发现这个树的形态没啥用,只需要保证度数之和是\(2n-2\)且度数大于0即可. 然后设\(dp_{i,j}\)表示前\(i\)个点用了\(j\)个度数 ...
- Flask一种通用视图,增删改查RESTful API的设计
模型设计是后端开发的第一步.数据模型反映了各种对象之间的相互关系. from app import db class Role(db.Model): """角色" ...
- Pytest权威教程09-捕获标准输出及标准错误输出
目录 捕获标准输出及标准错误输出 默认 stdout/stderr/stdin 捕获行为 设置捕获方法或禁用捕获 调试中使用print语句 在测试用例中使用的捕获的输出 返回: Pytest权威教程 ...
- IDEA控制台乱码终极解决方案
1. 问题描述 由于本机的IDEA 2019.1出现了无法连接插件商店和Spring Boot模板的问题,就重装了了最新的IDEA 2019.2.4版本,使用了一段时间以后,没有改任何的配置,控制台的 ...
- mysql 连接服务器报ERROR 1130 ,mysql服务正常运行
今天办公电脑的mysql罢工了,折腾了半天,记录一下. 错误如下: ERROR 1130 (HY000): Host 'localhost' is not allowed to connect to ...
- IntelliJ IDEA配置Tomcat运行web项目
小白一枚,借鉴了好多人的博客,然后自己总结了一些图,尽量的详细.在配置的过程中,有许多疑问.如果读者看到后能给我解答的,请留言.Idea请各位自己安装好,还需要安装Maven和Tomcat,各自配置好 ...