presto 源码编译调试(基于presto 0.247发行版)

presto 源码编译调试(基于presto 0.247发行版)

1. 环境准备

presto 进行源码编译,首先要去 github 查看presto的编译运行说明。通过阅读README.md 说明,我们可以了解到源码编译的

基本要求。presto 支持在 Macos 和 Linux 下编译,这不代表它无法在 windows 下编译,java是跨平台的,presto 要在windows下编译需要多做一些额外的配置和源码的修改,为了避免麻烦,所以下面直接选择在 ubuntu 虚拟机修改。关于如何在win 下编译,网上也有一些教程,大家可自行百度查阅。

这里选择了 0.247 发型板,0.247 目前还算是一个比较新的发型版,目前最新的稳定版是0.249,比较与0.247差别不大。一些老的版本不推荐编译,因为里面许多模块相较于新版有太多缺少。这里编译0.247 版本还有一个原因是我搭建环境选择的0.247版本。其他新版本的编译目前同样支持。遇到一些问题可以结合百度和github的issues进行分析解决。

presto 源码编译调试(基于presto 0.247发行版)_第1张图片

编译环境:

  1. ubuntu 18.04 操作系统(自带python环境)
  2. JDK1.8
  3. maven3.5 以上版本
  4. git
  5. 开发工具idea

基本环境的搭建网上有很多教程。这里不在扯这些。

2.克隆源码

presto 源码保存在 github 上,因为直接从 github 上克隆代码比较慢,所以我们可以先把代码库拉取到gitee在进行克隆到本地。

presto 源码编译调试(基于presto 0.247发行版)_第2张图片

克隆代码到idea或者git 命令克隆导入

命令克隆
git clone https://gitee.com/stackldy/presto.git
idea克隆代码

presto 源码编译调试(基于presto 0.247发行版)_第3张图片

3.切换分支

克隆完代码切换到0.247分支(可以通过 terminal 命令 或者 idea 可视化的 git 插件切换分支 )

git checkout 0.129

presto 源码编译调试(基于presto 0.247发行版)_第4张图片

4.maven 编译

presto 源码编译调试(基于presto 0.247发行版)_第5张图片

官网推荐我们上面的方式编译源码,上面的方式本质上是个shell 脚本,会进行maven 的重新安装,这也是官网不推荐在win下编译的一个原因,因为win无法解释运行,我们已经安装过maven ,所以不在采用直接运行官方脚本的方式安装。而是在idea终端运行如下的maven命令

mvn clean package -DskipTests # 这里需要安装maven时配置好环境变量,这里没有采用 mvn install 这条命令而是换成了 package,原因 mvn install 命令会把编译好的jar包安装到本地maven仓库,我们不需要所以直接package打包就好。 -DskipTests 忽略编译测试文件。

presto 源码编译调试(基于presto 0.247发行版)_第6张图片

5.修改运行配置

presto 源码编译调试(基于presto 0.247发行版)_第7张图片

官网已经说明了我们运行 presto 服务需要做的配置和入口,我们只需要在idea 完成相关配置,此时,我们可以先找到入口类运行下,然后在编辑配置。idea 默认是找不到多模块项目运行的入口的。

presto 源码编译调试(基于presto 0.247发行版)_第8张图片

presto 源码编译调试(基于presto 0.247发行版)_第9张图片

6.运行调试

经过上面的基本的配置,我们现在可以进行运行调试,在运行调试前我们需要做些基本配置来保证我们的正确运行和启动效率。下面的操作都是在 presto-main 模块下进行的。

1.修改config.properties的配置

presto 源码编译调试(基于presto 0.247发行版)_第10张图片

注释调上面关于加载插件的配置,我们计划配置本地编译好的插件,而不是这种加载模块代码的插件,这样可以提升我们的启动效率。

2.移动function-namespace 到最外层模块或者删除(这个模块的作用后面会进行说明)

presto 源码编译调试(基于presto 0.247发行版)_第11张图片

为什么说要删除这个模块,这里我简要说明?如果我们保留这个文件下的配置,运行都会报如下错误。

presto 源码编译调试(基于presto 0.247发行版)_第12张图片

解决上面错误的方式是放开与其相关的插件配置。

image-20210321184842145

放开后再次编译运行会报如下错误:

presto 源码编译调试(基于presto 0.247发行版)_第13张图片

解决上面这个错误需要修改源代码部分内容,具体错误原因可以参考:github-issues:https://github.com/prestodb/presto/issues/15747 目前这个bug还处于open状态。

presto 源码编译调试(基于presto 0.247发行版)_第14张图片

综上原因,我还是建议先移动目录到外部,注释调加载上述插件的配置。如果你按照上面的解决方式也可以正常运行,这样会在你配置的数据库中插入一些表信息。

image-20210321185736567

3. 复制本地插件

presto 源码编译调试(基于presto 0.247发行版)_第15张图片

通过presto-main模块的PluginMangerConfig 类我们可以观察到,presto 是加载plugin下的插件,plugin 是个相对路径,所以我们需要在presto-main下创建插件目录存放插件。

presto 源码编译调试(基于presto 0.247发行版)_第16张图片

这里我是以mysql 作为数据源的,所以这里我只放置了mysql 的插件。mysql 插件是从presto 安装包中的plugin下拷贝过来。这里放置了插件一定要注释插件加载的配置,否则会重复加载插件,但这不影响运行,只是降低了启动速度。

4.去除catalog 下无用的数据源连接配置只保留mysql相关连接

image-20210321183715799

presto 源码编译调试(基于presto 0.247发行版)_第17张图片

5.运行代码

效果如图所示:

presto 源码编译调试(基于presto 0.247发行版)_第18张图片

运行 presto-cli 进行测试效果如下: presto-cli 命令参数推荐:https://blog.csdn.net/weixin_40809627/article/details/99311654

presto 源码编译调试(基于presto 0.247发行版)_第19张图片

不支持win原因

presto 源码编译调试(基于presto 0.247发行版)_第20张图片

在源码中有个类PrestoSystemRequirements,这个类中有对环境的判断要求。关于 win下编译大家可以参考:推荐编译连接:https://blog.csdn.net/anchichun6550/article/details/101538325,主要参考第二步和第四步。其它与本文一样。

你可能感兴趣的:(大数据)