我给了智能学习灯,问了100个问题
06-21
背景 最近在处理一个关于StarRocks中物化视图优化的问题。在此之前,我从未接触过像StarRocks这样主要处理数据分析的数据库。
忘记优化这一点。在解决问题之前,我先花了一两天的时间熟悉了StarRocks的一些概念和用法,然后花了一些时间搭建环境并复现问题。
之后我开始阅读源码,大致了解了相关代码的执行流程。然而,即使读了很多遍代码,我也找不到具体的问题。
于是我考虑在本地调试源码。经过半天的调试,终于解决了问题。
于是我做了相关修改并向社区提交了PR。目前仍处于推进过程中。
这里搭建环境比较麻烦的是如何在本地调试代码。根据官方架构图,StarRocks主要分为两部分: FE:也称为前端部分,主要负责元数据管理和构建执行计划。
BE:后端存储部分,执行查询计划并存储数据。其中FE是用Java编写的,存储的BE是用C++编写的。
这次我需要修改的是FE前端部分,所以本文主要讨论FE相关的内容。幸运的是,社区已经有关于如何编译和构建源代码的教程。
这里我列出一些要点。 FE首先需要安装以下工具: ThriftProtobufPython3JDK8+ 代码语言:bash copybrew install alberttwong/thrift/$ thrift -version Thrift version 0.13 .0brew install protobuf 以上默认安装过程是在Mac平台,所以最整个过程使用方便。
其他平台也是如此,只要安装了这些工具即可。下一步是编译 FE。
我们需要先下载源码,然后进入FE的目录: 代码语言:bash 复制 git clone femvn install -DskipTests 然后直接使用maven编译安装。这里需要注意??,因为编译过程中需要Python3来执行一些构建任务。
新版本的Mac内置了Python3,但如果是旧版本的Mac,则内置了Python2。这时候我们需要在构建任务中手动指定Python3命令:比如这里的Python3命令是python3。
我们需要修改fe/fe-core/pom.xml目录下的Python命令名:修改后,mvn install编译一次,如果顺利就可以编译成功。我搭建本地集群并启动FE的最终目的是在本地IDEA中启动FE,然后一起启动一个BE,这样就可以在IDEA中调试FE的源码了。
在启动FE之前,需要创建一些目录: 代码语言:bash copy cp -r conf fe/confcp -r bin fe/bincp -r webroot fe/webrootcd fe mkdir log mkdir meta 主要是在FE目录下创建配置文件、执行脚本、日志、元数据等目录。然后就可以打开com.starrocks.StarRocksFE类并在IDEA中运行它。
开始之前需要配置环境变量: 代码语言:bash copy # 修改为自己的目录 export PID_DIR=/Users/smith/Code/starrocks/fe /binexport STARROCKS_HOME=/Users/smith/Code/starrocks/feexport LOG_DIR =/Users/smith/Code/starrocks/fe/log 同时需要在fe.conf中配置priority_networks 网络配置:代码语言:conf 复制priority_networks = 10.10。 IP 10.0/24 必须是主机的 IP。
后面我们使用docker启动BE的时候也需要用到它。如果启动失败,可以在日志目录下查看日志: 代码语言:bash Copy 09-16 21:21:59.:00 ERROR (main|1) [NodeMgr.getCheckedSelfHostPort():] edit_log_port is already in use 。
会退出。如果遇到这个异常:提示端口被占用,可以尝试关闭代理再试。
启动成功后,我们就可以使用MySQL兼容的客户端进行连接了。这里我使用的是tableplus: 那么我们可以使用下面的sql来查询fe的节点状态: 代码语言: sql copy SHOW PROC '/frontends';看到类似的输出表明启动成功。
启动BE后,我们就可以使用Docker来启动BE了。我们之所以使用docker来启动BE,是因为BE是用C++编写的。
在Mac上运行比较麻烦。最好有一个Ubuntu22虚拟机。
如果我们不需要调试BE的话,直接使用docker来启动会更合适。代码语言: bash copy docker run -p :-p :-p :-p :-p :-itd --rm --name be -e "TZ=Asia/Shanghai" starrocks/be-ubuntu 我们需要 FE 需要连接BE的端口暴露。
启动成功后,镜像不会直接启动BE。我们需要进入容器来手动启动它。
代码语言:bash copy docker exec -it be bash 在开始之前,我们还需要修改be.conf中的priority_networks配置:修改为与fe.conf相同的配置。然后使用如下命令启动即可:代码语言:bash copy bin/start_be.sh --daemon启动日志我们可以在logs目录下查看。
绑定 FE 和 BE 最后一步是将 FE 和 BE 绑定在一起。我们在fe中执行以下sql: 代码语言:sql copy ALTER SYSTEM ADD BACKEND ".0.0.1:";手动添加一个节点,然后使用: 代码语言:sql copy SHOW PROC '/backends';可以查询BE节点状态:如果出现如下结果,则说明连接成功,接下来我们就可以创建数据库和表了。
总结一下,这部分(本地FE连接docker中的FE)官方文档并没有提及。踩了很多坑,请教了一些大佬之后,才全部调试成功。
另外需要注意的是:如果我们的网络环境发生变化,比如从家庭Wi-Fi切换到公司Wi-Fi,我们需要手动删除FE/meta下的所有文件并重新开始。 BE需要重启容器。
版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
标签:
相关文章
06-21
06-18
06-17
06-17
06-17
06-18
06-18
06-18
最新文章
【玩转GPU】ControlNet初学者生存指南
【实战】获取小程序中用户的城市信息(附源码)
包雪雪简单介绍Vue.js:开学
Go进阶:使用Gin框架简单实现服务端渲染
线程池介绍及实际案例分享
JMeter 注释 18 - JMeter 常用配置组件介绍
基于Sentry的大数据权限解决方案
【云+社区年度征文集】GPE监控介绍及使用