【全网最新】如何在本地IDE Run起OpenTSDB源码

2021-06-19 18:00:59 浏览数 (1)

背景

有需求了解一下Opentsdb的源码,然后想着能在本地run起来,打些断点和日志来跟一下,然后兴致勃勃去网上找了资料看看能否快速run起来,但是发现所有的博客、文档啥的好像都来自同一出处,而且最后run起来也是很模糊,按教程我还是没成功。于是自己摸索着,慢慢解决问题run了起来,然后记录一下,希望对想要学习opentsdb的同学有帮助。转载的话麻烦注明出处~

1. 拉代码

首先fork一下opentsdb的源码库

拉取opentsdb

git clone https://github.com/whua3/opentsdb.git

切换分支

git checkout v2.4.0

创建自己的开发分支

git checkout -b dev/240

2. 本地编译

如果仅仅是本地编译源码,还是比较简单的,按如下步骤就行

mkdir build cp -r third_party ./build ./build.sh

发现在maven中央仓库下载jar包失败了,换一下maven仓库地址。将Makefile.in中的 http://central.maven.org 和 http://repo1.maven.org 全部替换为 https://repo1.maven.org

然后重新./build.sh

编译完成,同时在build目录下可以看到生成的tsdb-2.4.0.jar包

3. 本地IDE运行Opentsdb

然后是把opentsdb源码,在本地IDE中运行起来,这个比较麻烦。

opentsdb这个不是个标准的maven项目,首先我们来生成pom文件

sh build.sh pom.xml

然后我们发现有生成pom.xml文件和src-main,src-test两个目录,其中src-main和src-test是src中文件的软链接,

打包

mvn clean package -Dmaven.test.skip=true -P hbase

发现会报两错

Caused by: org.apache.maven.plugin.MojoExecutionException: Command execution failed Caused by: org.apache.commons.exec.ExecuteException: Process exited with an error: 1 (Exit value: 1)

注释掉pom.xml 里面的这两个execution

  • create-plugin-test-jar
  • attach-javadocs

重新打包

mvn clean package -Dmaven.test.skip=true -P hbase

打包成功,发现生成了一个target目录

然后我们要把target目录中生成的, target/generated-sources/net/opentsdb/query/expression/parser目录复制到 src-main/net/opentsdb/query/expression目录下, 把target/generated-sources/net/opentsdb/tools/BuildData.java 复制到src-main/net/opentsdb/tools 目录下。

接下来我们尝试在本地idea中起一下,首先将pom.xml.in挪到项目外去,如果新生成的pom.xml没有被识别,鼠标选中pom.xml,然后右键选择”add as maven project“,然后reload maven project

然后新增一个application configuration

然后直接运行,报错 java: duplicate class: tsd.client.QueryString

我们搜索一下这个类,发现src-main/tsd/client 和 src-main/net/opentsdb/tsd/client这里重复了

因为src-main/tsd/client这个是src的软链接,我们可以把src-main/tsd/client这个目录excluded掉

再次运行发现,TSDMain已经成功运行起来了,只是缺少opentsdb的配置文件。

我们此时在TSDMain的main方法中新增一条测试日志,打上断点,然后debug模式运行,可以看到成功停在了断点处,测试日志也打印出来了。

然后加上配置,让opentsdb在本地run起来,在configuration的program arguments中加上配置

--config=/Users/garyhwang/Documents/projects/IdeaProjects/opentsdb/src/opentsdb.conf

其中配置文件需要改3处

tsd.network.port = 4242 tsd.http.staticroot = /Users/garyhwang/Documents/localTestDir/opentsdb/static/ tsd.http.cachedir = /Users/garyhwang/Documents/localTestDir/opentsdb/cache/

另外在配置中我还加了几个配置,具体配置的作用可以参考opentsdb官网文档

tsd.core.autocreate_metrics = true tsd.query.skip_unresolved_tagvs = true tsd.query.timeout = 10000 tsd.storage.enable_compaction = false tsd.core.tag.allow_specialchars =!@#$%^&*() {}|: <>?~`-=[];',./"

然后再次启动,发现还是失败,可以看到是连接本地2181端口失败了,这里是因为本地没有起Zookeeper和HBase,因为Opentsdb底层就是要依赖存储的(一般为HBase),所以要想在本地run起opentsdb,首先需要在本地run起HBase和Zookeeper(HBase会内置)。

于是我们先去在本地把HBase 的HMaster run起来,具体怎么run起HBase不在本文中介绍了,或者后面有时间再写点东西记录下。

然后我们再次运行opentsdb,这次失败是报错少了tsdb表,我们还需要再HBase中把Opentsdb需要的几张表创建出来。

我们可以看到src目录下有个create_table.sh,如果是在服务器上,直接运行这个脚本就可以在HBase中将四张对应的表创建出来,在本地的话,我是启动了一个hbase-shell,然后将建表命令手动复制进去的。

代码语言:txt复制
create 'tsdb-uid', {NAME => 'id', BLOOMFILTER => 'ROW', DATA_BLOCK_ENCODING => 'DIFF'}, {NAME => 'name', BLOOMFILTER => 'ROW', DATA_BLOCK_ENCODING => 'DIFF'}

create 'tsdb', {NAME => 't', VERSIONS => 1, BLOOMFILTER => 'ROW', DATA_BLOCK_ENCODING => 'DIFF', TTL => '604800'}
  
create 'tsdb-tree', {NAME => 't', VERSIONS => 1, BLOOMFILTER => 'ROW', DATA_BLOCK_ENCODING => 'DIFF'}
  
create 'tsdb-meta', {NAME => 'name', BLOOMFILTER => 'ROW', DATA_BLOCK_ENCODING => 'DIFF'}

其中tsdb表(存数据的表)设置的TTL为604800(7天)

再次运行opentsdb,发现在本地成功启动,4242端口成功监听。

然后我们来测试一下opentsdb的读写功能

代码语言:txt复制
curl -i -X POST -d '{
    "metric":"gary-test",
    "timestamp":1624091745,
    "value":0.85,
    "tags":{
        "host":"127.0.0.1"
    }
}' http://localhost:4242/api/put?details

curl -d '{
    "start": "30m-ago",
    "queries": [
        {
            "aggregator": "none",
            "downsample": "30s-last",
            "metric": "gary-test",
            "tags": {
                "host":"127.0.0.1"
            }
        }
    ]
}' http://localhost:4242/api/query

可以看到opentsdb写入数据和读取数据都成功了~

4. 结束

至此,在搭建Opentsdb本地开发环境正式结束,愿各位有有需求的同学都能run起来~

有需要的同学也可以拉我仓库的这个代码,是我在文中改过的,能方便各位更快run起来~

https://github.com/whua3/opentsdb/tree/local-run

最后:

转载的话麻烦注明出处~

0 人点赞