Docker编译Doris及flink-doris-connector

本文档主要介绍如何通过源码编译 Doris及flink-doris

这里默认已经安装好了Docker

编译flink-doris 需要先编译Doris,官方说明

注意:

doris源码目录extension/flink-doris-connector/ 这里的flink-doris源码与 GitHub 上下载的 flink-doris 源码似乎有点区别。编译时候注意一下

doris GitHub地址:GitHub - apache/incubator-doris: Apache Doris(Incubating) is an MPP-based interactive SQL data warehousing for reporting and analysis.

doris-flink GitHub 地址:GitHub - apache/incubator-doris-flink-connector: Flink Connector for Apache Doris(incubating)

doris 官网文档:编译 | Apache Doris

1、下载Docker 镜像

先去官网查看版本

  

拉取最新版本

docker pull apache/incubator-doris:build-env-ldb-toolchain-latest

可以拉取指定版本

docker pull apache/incubator-doris:build-env-for-0.15.0

注意:

 

镜像下载完成:

docker images

用命令查看是否已经下载好。

这时不要着急运行镜像,这个镜像是编译doris的一个环境,还需要编译的源码。

2、下载源码

先在本地下载源码

1.Doris

先进入本地目录

cd /root/doris
$ wget https://dist.apache.org/repos/dist/dev/incubator/doris/xxx.tar.gz
or
$ git clone https://github.com/apache/incubator-doris.git

如果下载的是压缩包,对下载的源码进行解压

tar -zxf xxx.tar.gz

 2.flink-doris-connector

现在Doris 源码目录下 查找 extension/flink-doris-connector/ 源码目录,如果有该目录说明有fink-doris的源码了,如果没有,需要下载源码,从GitHub上下面,放到该目录,目的是后面挂载的时候这个源码也可以进入docker

3、运行镜像

建议以挂载本地 Doris 源码目录的方式运行镜像,这样编译的产出二进制文件会存储在宿主机中,不会因为镜像退出而消失。

同时,建议同时将镜像中 maven 的 .m2 目录挂载到宿主机目录,以防止每次启动镜像编译时,重复下载 maven 的依赖库

本地目录要考虑磁盘空间,最好用磁盘空间大一点的目录

$ docker run -it -v /your/local/.m2:/root/.m2 -v /your/local/incubator-doris-DORIS-x.x.x-release/:/root/incubator-doris-DORIS-x.x.x-release/ apache/incubator-doris:build-env-ldb-toolchain-latest

例如

docker run -it -v /root/.m2:/root/.m2 -v /opt/software/doris/apache-doris-0.15.0-incubating-src:/opt/software/doris/apache-doris-0.15.0-incubating-src apache/incubator-doris:build-env-for-0.15.0

执行完命令后,启动镜像后,你应该已经处于容器内

4、编译Doris

进入到容器内源码目录

执行下面命令

sh build.sh

注意:

如果你是第一次使用 build-env-for-0.15.0 或之后的版本,第一次编译的时候要使用如下命令:

sh build.sh --clean --be --fe --ui

这是因为 build-env-for-0.15.0 版本镜像升级了 thrift(0.9 -> 0.13),需要通过 --clean 命令强制使用新版本的 thrift 生成代码文件,否则会出现不兼容的代码。

编译完成后,产出文件在 output/ 目录中。

5、更改flink 版本 修改成 13.5

当前在容器内操作

进入flink-doris源码目录,修改pom.xml文件

<properties>
        <scala.version>2.12</scala.version>
        <flink.version>1.13.5</flink.version>
        <libthrift.version>0.13.0</libthrift.version>
        <arrow.version>5.0.0</arrow.version>
        <maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version>
        <maven-javadoc-plugin.version>3.3.0</maven-javadoc-plugin.version>
        <maven-source-plugin.version>3.2.1</maven-source-plugin.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <doris.home>${basedir}/../../</doris.home>

修改flink对应版本号,scala对应版本号

6、要将jdk 切回到1.8(docker容器里面操作)

切换到 JDK 8:

$ alternatives --set java java-1.8.0-openjdk.x86_64
$ alternatives --set javac java-1.8.0-openjdk.x86_64
$ export JAVA_HOME=/usr/lib/jvm/java-1.8.0

7、编译 :doris-flink

在flink-doris源码目录下有 build.sh 脚本

执行命令

sh build.sh

编译成功后,会在 output/ 目录下生成文件 doris-flink-1.0.0-SNAPSHOT.jar

8、备注

  1. doris FE 要在配置中配置启用http v2
  2. Scala版本目前只支持2.12.x版本

conf/fe.conf

enable_http_server_v2 = true

编译doris 报错

 

解决方案

修改一个路径

vi fe/pom.xml change 
https://repo.spring.io/plugins-release/
修改为
https://repository.cloudera.com/artifactory/ext-release-local

参考网址:扩展功能 - Flink Doris Connector - 《Apache Doris v0.15 中文文档》 - 书栈网 · BookStack

https://python.iitter.com/other/295122.html

Flink Doris Connector - Apache Doris 中文帮助文档 - 文江博客

好的,您可以按照以下的方式来编写docker-compose.yml文件: ``` version: '3.7' services: jobmanager: image: flink:1.17.0 command: jobmanager ports: - "8081:8081" taskmanager: image: flink:1.17.0 command: taskmanager depends_on: - jobmanager links: - jobmanager:jobmanager environment: - JOB_MANAGER_RPC_ADDRESS=jobmanager - FLINK_TASK_MANAGER_MEMORY_PROCESS_SIZE=1024m elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:7.10.2 environment: - discovery.type=single-node ports: - "9200:9200" mysql: image: mysql:8.0 environment: - MYSQL_ROOT_PASSWORD=<your_password> - MYSQL_USER=<your_user> - MYSQL_PASSWORD=<your_password> - MYSQL_DATABASE=<your_database> ports: - "3306:3306" postgres: image: postgres:13.1 environment: - POSTGRES_USER=<your_user> - POSTGRES_PASSWORD=<your_password> - POSTGRES_DB=<your_database> ports: - "5432:5432" flink-job: image: flink:1.17.0 volumes: - ./flink-conf.yaml:/opt/flink/conf/flink-conf.yaml - ./lib/flink-sql-connector-elasticsearch7-3.0.1-1.17.jar:/opt/flink/lib/flink-sql-connector-elasticsearch7-3.0.1-1.17.jar - ./lib/flink-sql-connector-mysql-cdc-2.3.0.jar:/opt/flink/lib/flink-sql-connector-mysql-cdc-2.3.0.jar - ./lib/flink-sql-connector-postgres-cdc-2.3.0.jar:/opt/flink/lib/flink-sql-connector-postgres-cdc-2.3.0.jar command: jobmanager depends_on: - jobmanager - elasticsearch - mysql - postgres links: - elasticsearch:elasticsearch - mysql:mysql - postgres:postgres environment: - JOB_MANAGER_RPC_ADDRESS=jobmanager - FLINK_TM_HEAP_SIZE=1024m - FLINK_PROPERTIES= - FLINK_ENV_JAVA_OPTS= - FLINK_ENV_JAVA_TOOL_OPTIONS= - FLINK_CONF_DIR=/opt/flink/conf - FLINK_LIB_DIR=/opt/flink/lib - FLINK_PLUGINS_DIR=/opt/flink/plugins - FLINK_OPT_DIR=/opt/flink/opt - FLINK_LOG_DIR=/opt/flink/log - FLINK_HOME=/opt/flink volumes: - ./job.jar:/opt/flink/job.jar - ./flink-conf.yaml:/opt/flink/conf/flink-conf.yaml ``` 其中需要注意的是: 1. 在 `flink-job` 服务中,我们使用了 `volumes` 来挂载 `flink-conf.yaml` 和三个依赖的jar包到容器的 `/opt/flink/conf` 和 `/opt/flink/lib` 目录中。 2. 我们在 `flink-job` 服务的环境变量中设置了 `FLINK_PROPERTIES`,因为 Flink 在启动时会读取这个环境变量中的配置信息。 3. 我们在 `flink-job` 服务的环境变量中设置了 `FLINK_LIB_DIR`,这是因为 Flink 在启动时会从这个目录中加载依赖的jar包。 4. 我们在 `flink-job` 服务的环境变量中设置了 `FLINK_CONF_DIR`,这是因为 Flink 在启动时会读取这个目录中的配置文件。 5. 我们在 `flink-job` 服务的环境变量中设置了 `FLINK_HOME`,这是因为 Flink 在启动时需要知道它的安装路径。 上述的docker-compose.yml文件可以满足您的要求,在启动容器后,您可以使用以下的命令来进入到flink-job容器中: ``` docker-compose run flink-job /bin/bash ``` 然后,您可以在容器中运行Flink任务了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值