Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【全网最新】如何在本地IDE Run起OpenTSDB源码

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

原创
作者头像
garyhwang
修改于 2021-06-19 10:00:59
修改于 2021-06-19 10:00:59
1.1K0
举报
文章被收录于专栏:潇洒哥写字潇洒哥写字

背景

有需求了解一下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.orghttp://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
AI代码解释
复制
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
AI代码解释
复制
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

最后:

转载的话麻烦注明出处~

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
时序列数据库武斗大会之 OpenTSDB 篇
刘斌,OneAPM后端研发工程师,拥有10多年编程经验,参与过大型金融、通信以及Android手机操作系的开发,熟悉Linux及后台开发技术。曾参与翻译过《第一本Docker书》、《GitHub入门与实践》、《Web应用安全权威指南》、《WEB+DB PRESS》、《Software Design》等书籍,也是Docker入门与实践课程主讲人。本文所阐述的「时间序列数据库」,系笔者所负责产品 Cloud Insight 对性能指标进行聚合、分组、过滤过程中的梳理和总结。 在前面的《时序列数据库武斗大会之
CSDN技术头条
2018/02/12
1.3K0
时序列数据库武斗大会之 OpenTSDB 篇
Opentsdb安装部署(单机版)
opentsdb是基于Hbase的时序数据库[时间序列数据库]。不具备通用性,主要针对具有时间特性和需求的数据,如监控数据、温度变化数据等。opentsdb说是数据库,但并不能称作为数据库,他是在Hbase(HBase才是具有存储功能的)的基础上,进行数据结构的优化和处理,从而适合存储具有时间特性的数据,同时提供特定的工具进行查询等操作。
子润先生
2021/07/09
1.5K0
OpenTSDB 数据存储详解
随着互联网、尤其是物联网的发展,我们需要把各种类型的终端实时监测、检查与分析设备所采集、产生的数据记录下来,在有时间的坐标中将这些数据连点成线,往过去看可以做成多纬度报表,揭示其趋势性、规律性、异常性;往未来看可以做大数据分析,机器学习,实现预测和预警。
2020labs小助手
2020/07/16
1.7K0
OpenTSDB简介
OpenTSDB(Open time series data base),开发时间序列数据库。DB这个词很有误导性,其实并不是一个db,单独一个OpenTSDB无法存储任何数据,它只是一层数据读写的服务,更准确的说它只是建立在Hbase上的一层数据读写服务。行业内各种db都很多了,为什么还会出现它?它到底有什么好?它做了什么?别着急,我们来一一分析下。   其实OpenTSDB不是一个通用的数据存储服务,看名字就知道,它主要针对于时序数据。什么是时序数据,股票的变化趋势、温度的变化趋势、系统某个指标的变化趋势……其实都是时序数据,就是每个时间点上纪录一条数据。 关于数据的存储,我们最熟悉的就是mysql了,但是想想看,每5分钟存储一个点,一天288个点,一年就10万+,这还是单个维度,往往在实际应用中维度会非常多,比如股票交易所,成千上万支股票,每天所有股票数据就可能超过百万条,如果还得支持历史数据查询,mysql是远远扛不住的,必然要考虑分布式存储,最好的选择就是Hbase了,事实上业内基本上也是这么做的。(我对其他分布式存储不了解,就不对比了)。   了解Hbase的人都知道,它可以通过加机器的水平扩展迅速增加读写能力,非常适合存储海量的数据,但是它并不是关系数据库,无法进行类似mysql那种select、join等操作。 取而代之的只有非常简单的Get和Scan两种数据查询方式。这里不讨论Hbase的相关细节,总之,你可以通过Get获取到hbase里的一行数据,通过Scan来查询其中RowKey在某个范围里的一批数据。如此简单的查询方式虽然让hbase变得简单易用, 但也限制了它的使用场景。针对时序数据,只有get和scan远远满足不了你的需求。   这个时候OpenTSDB就应运而生。 首先它做了数据存储的优化,可以大幅度提升数据查询的效率和减少存储空间的使用。其次它基于hbase做了常用时序数据查询的API,比如数据的聚合、过滤等。另外它也针对数据热度倾斜做了优化。接下来挨个说下它分别是怎么做的。
xindoo
2021/01/21
2.5K0
OpenTSDB实现原理与安装
特别适合用来做监控类别的数据存储,它的底层是基于HBase,是一种以Metirc为单元的存储结果,可以实现大数据量下的毫秒级别的查询
用户5252199
2022/04/18
8960
OpenTSDB实现原理与安装
hbase+opentsdb 单机版搭建
cd /root/ tar xf zookeeper-3.4.8.tar.gz -C ./ mv zookeeper-3.4.8 /opt/zk
保持热爱奔赴山海
2019/09/18
1.7K1
hbase+opentsdb 单机版搭建
杨校老师课堂之分布式数据库HBase的部署和基本操作
(1) 安装JDK、Hadoop,这里采用的JDK1.8,Hadoop2.7.4,CentOS7.6
杨校
2022/05/11
3430
杨校老师课堂之分布式数据库HBase的部署和基本操作
【Maven 官方教程】Building Java Projects
mkdir -p src/main/java/hello on *nix systems
acc8226
2022/05/17
3620
Alex 的 Hadoop 菜鸟教程: 第21课 不只是在HBase中用SQL:Phoenix
Phoenix的团队用了一句话概括Phoenix:”We put the SQL back in NoSQL” 意思是:我们把SQL又放回NoSQL去了!这边说的NoSQL专指HBase,意思是可以用SQL语句来查询Hbase,你可能会说:“Hive和Impala也可以啊!”。但是Hive和Impala还可以查询文本文件,Phoenix的特点就是,它只能查Hbase,别的类型都不支持!但是也因为这种专一的态度,让Phoenix在Hbase上查询的性能超过了Hive和Impala!
全栈程序员站长
2022/08/11
8320
Alex 的 Hadoop 菜鸟教程: 第21课 不只是在HBase中用SQL:Phoenix
Hadoop 2.2.0和HBase-0.98 安装snappy
关于上面的依赖包,如果在Ubuntu下,使用sudo apt-get install * 命令安装,如果在CentOS下,使用sudo yum install *命令来安装。
星哥玩云
2022/07/03
1.4K0
15分钟熟悉HBase Shell命令
下面我们看看HBase Shell的一些基本操作命令,我列出了几个常用的HBase Shell命令,如下: 名称 命令表达式 创建表 create '表名称', '列名称1','列名称2','列名称N' 添加记录       put '表名称', '行名称', '列名称:', '值' 查看记录 get '表名称', '行名称' 查看表中的记录总数 count  '表名称' 删除记录 delete  '表名' ,'行
汤高
2018/01/11
2.7K0
HBase数据定义
HBase Shell:HBase的命令行工具,最简单的接口,适合HBase管理使用;
用户9615083
2022/12/25
1.2K0
Hbase多版本的读写(Shell&Java API版)
Hbase是基于HDFS的NOsql数据库,它很多地方跟数据库差不多,也有很多不同的地方。这里就不一一列举了,不过Hbase有个版本控制的特性,这个特性在很多场景下都会发挥很大的作用。本篇就介绍下基于Shell和Java API的Hbase多版本的读写。 为了更好的理解多版本,我们可以把普通的数据存储理解成二维空间,提供了rowkey,列族,列几个存储的维度。那么版本则相当于二维空间升华到了三维空间,多了时间维度的概念。如果按照默认的操作,当前的时间戳就是版本号,每个数据都可以保留多个版本的数据。你可
用户1154259
2018/01/17
2.8K0
DockerSwarm 微服务部署
之前《服务Docker化》中,使用 docker-compose.yml 来一次配置启动多个容器,在 Swarm 集群中也可以使用 compose 文件 (docker-compose.yml) 来配置、启动多个服务。
程序员果果
2019/05/28
5310
hbase 单机安装部署
这个困扰了很长时间,之前使用cdh版本的,各种报错各种出问题,最终换成了不是cdh版本的。
全栈程序员站长
2022/08/09
6830
hbase 单机安装部署
图解图库JanusGraph系列-janusgraph图数据库的本地源码编译教程(janusgraph source code compile)
源码分析 的第一步就是要先编译好源代码,才能进行debug跟踪流程查看,本文总结了janusgraph源码编译的全流程!
洋仔聊编程
2022/05/11
6050
图解图库JanusGraph系列-janusgraph图数据库的本地源码编译教程(janusgraph source code compile)
[Apache Doris] Apache Doris 架构及代码目录解读
Doris是一个MPP的OLAP系统,主要整合了Google Mesa(数据模型),Apache Impala(MPP Query Engine)和Apache ORCFile (存储格式,编码和压缩) 的技术。
awwewwbbb
2021/11/10
1.6K0
Spring Boot + Vue前后端分离项目,Maven自动打包整合
现在各类项目为了降低项目、服务模块间的高度耦合性,提出了“前后端分离”,而前后端分离的项目该如何打包呢?
xcbeyond
2020/03/25
5K2
HBase 分布式数据库
在5、6年前,我们就希望能用分布式存储和分布式数据库来替代集中存储,觉得分布式廉价,而且高可靠。
birdskyws
2018/09/12
2.4K0
HBase 分布式数据库
OpenTSDB 2.4.0远程代码执行
在Pentest期间,我们在yrange参数中使用命令注入在OpenTSDB 2.4.0及更低版本中发现了一个远程执行代码漏洞(其他参数可能也容易受到攻击)
Khan安全团队
2021/03/10
1.1K0
相关推荐
时序列数据库武斗大会之 OpenTSDB 篇
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档