背景
OpenTSDB
是一种采用 Java
实现,底层基于 HBase
列式存储与查询的分布式、可伸缩、开源的时间序列数据库。
- 官网:opentsdb.net/
- 官方文档:opentsdb.net/docs/build/…
GitHub
上的Release
下载地址:github.com/OpenTSDB/op…
系统环境
在 CentOS7
上进行安装,虚拟主机信息如下:
[root@hadoop6 local]# uname -a Linux hadoop6 3.10.0-1127.el7.x86_64 #1 SMP Tue Mar 31 23:36:51 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux [root@hadoop6 local]# cat /proc/version Linux version 3.10.0-1127.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) ) #1 SMP Tue Mar 31 23:36:51 UTC 2020 [root@hadoop6 local]# cat /etc/redhat-release CentOS Linux release 7.8.2003 (Core)
安装前提
因为 OpenTSDB
底层基于 HBase
列式存储实现,所以需要依赖 HBase
。我这里使用已有的大数据环境,这里涉及到的组件有:
- Hadoop3.3.0
- HBase2.3.0
- ZooKeeper
先配置启动Hadoop
[root@hadoop6 ~]# cd /usr/local/hadoop # 启动Hadoop [root@hadoop6 hadoop]# ./sbin/start-all.sh # jps可以看到除了Hadoop的5个服务进程:NameNode、SecondaryNameNode、ResourceManager、NodeManager、DataNode [root@hadoop6 hadoop]# jps 5696 NameNode 6193 SecondaryNameNode 7208 Jps 6541 ResourceManager 6717 NodeManager 5934 DataNode
访问: http://hadoop6:50070/
,进入 Hadoop
后台管理页面。
再配置启动HBase
[root@hadoop6 ~]# cd /usr/local/hbase [root@hadoop6 hbase]# vi ./conf/hbase-site.xml # 启动HBase [root@hadoop6 hbase]# ./bin/start-hbase.sh # jps可以看到除了Hadoop的5个服务外多了3个H开头的进程:HRegionServer、HMaster以及HQuorumPeer [root@hadoop6 hbase]# jps 5696 NameNode 68673 HRegionServer 6193 SecondaryNameNode 68277 HQuorumPeer 68429 HMaster 6541 ResourceManager 6717 NodeManager 68988 Jps 5934 DataNode
访问: http://hadoop6:16010/
,进入 HBase
后台管理页面。
最后验证ZooKeeper
# 报错 [root@hadoop6 hbase]# telnet localhost 2181 -bash: telnet: 未找到命令 # 查看是否安装了telnet-server服务 [root@hadoop6 hbase]# rpm -qa telnet-server # 若没有安装,则先安装telnet-server服务 [root@hadoop6 hbase]# yum install telnet-server # 再安装telnet [root@hadoop6 hbase]# yum install telnet # 再次测试连接ZooKeeper,成功 [root@hadoop6 hbase]# telnet localhost 2181 Trying ::1%1... Connected to localhost. Escape character is '^]'. Connection closed by foreign host.
至此,依赖环境搭建完毕~
Note:记得关闭防火墙或者放行对应端口即可。
# 关闭防火墙 [root@hadoop6 ~]# systemctl stop firewalld.service
下载安装启动OpenTSDB
[root@hadoop6 local]# wget https://github.com/OpenTSDB/opentsdb/releases/download/v2.4.1/opentsdb-2.4.1-1-20210902183110-root.noarch.rpm [root@hadoop6 local]# yum localinstall opentsdb-2.4.1-1-20210902183110-root.noarch.rpm
Note:安装完成后的目录说明如下:
- /etc/opentsdb - Configuration files,配置文件,你懂的,这是一个关键的地方,eg:ZK配置 - /tmp/opentsdb - Temporary cache files,临时文件 - /usr/share/opentsdb - Application files,应用文件 - /usr/share/opentsdb/bin - The “tsdb” startup script that launches a TSD or command line tools,可执行脚本 - /usr/share/opentsdb/lib - Java JAR library files,依赖库 - /usr/share/opentsdb/plugins - Location for plugin files and dependencies,插件 - /usr/share/opentsdb/static - Static files for the GUI,Web页面静态资源 - /usr/share/opentsdb/tools - Scripts and other tools,工具 - /var/log/opentsdb - Logs,日志
在HBase中建表
# 执行建表命令 [root@hadoop6 local]# env COMPRESSION=NONE HBASE_HOME=/usr/local/hbase /usr/share/opentsdb/tools/create_table.sh [root@hadoop6 local]# hbase shell SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/usr/local/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/usr/local/hbase/lib/client-facing-thirdparty/slf4j-log4j12-1.7.30.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory] HBase Shell Use "help" to get list of supported commands. Use "exit" to quit this interactive shell. For Reference, please visit: http://hbase.apache.org/2.0/book.html#shell Version 2.3.0, re0e1382705c59d3fb3ad8f5bff720a9dc7120fb8, Mon Jul 6 22:27:43 UTC 2020 Took 0.0017 seconds # list命令验证是否建表成功 hbase(main):001:0> list TABLE tsdb tsdb-meta tsdb-tree tsdb-uid 4 row(s) Took 0.5124 seconds => ["tsdb", "tsdb-meta", "tsdb-tree", "tsdb-uid"] hbase(main):002:0>
当然,也可以在 HBase
后台管理页面看到刚建的4张表。
启动OpenTSDB服务
万事俱备,让我们启动 OpenTSDB
服务吧。
# 显然,opentsdb未安装到系统服务,可参考https://github.com/OpenTSDB/opentsdb/blob/master/build-aux/rpm/systemd/opentsdb.service进行配置 [root@hadoop6 ~]# systemctl start opentsdb Failed to start opentsdb.service: Unit not found. # 直接到安装的目录启动opentsdb服务 [root@hadoop6 ~]# /usr/share/opentsdb/etc/init.d/opentsdb start Starting opentsdb: [ 确定 ] # opentsdb毕竟是Java服务,jps可以看到多了:Main、TSDMain两个进程 [root@hadoop6 opentsdb]# jps 37584 Main 27761 HRegionServer 27525 HMaster 25174 DataNode 85207 TSDMain 25479 SecondaryNameNode 26153 NodeManager 27369 HQuorumPeer 24942 NameNode 25902 ResourceManager 11246 Jps
验证OpenTSDB服务状态
[root@hadoop6 opentsdb]# /usr/share/opentsdb/etc/init.d/opentsdb status opentsdb 已死,但 pid 文件存在 [root@hadoop6 opentsdb]# tailf /var/log/opentsdb/opentsdb-hadoop6-opentsdb.err /usr/bin/tsdb: 第 117 行:exec: java: 未找到 [root@hadoop6 opentsdb]# java -version java version "1.8.0_261" Java(TM) SE Runtime Environment (build 1.8.0_261-b12) Java HotSpot(TM) 64-Bit Server VM (build 25.261-b12, mixed mode) [root@hadoop6 opentsdb]# echo $JAVA_HOME /usr/local/jdk [root@hadoop6 opentsdb]# ln -s /usr/local/jdk/bin/java /usr/bin/java [root@hadoop6 opentsdb]# /usr/share/opentsdb/etc/init.d/opentsdb start Starting opentsdb: [ 确定 ] [root@hadoop6 opentsdb]# /usr/share/opentsdb/etc/init.d/opentsdb status opentsdb (pid 85207) 正在运行...
打完收工~~
访问: http://hadoop6:4242/
,默认进入到图表页面。
另外,还可以查看关键指标统计、运行日志与版本信息。
小总结
总体来说,使用 OpenTSDB
作为时序数据的存储架构涉及的组件过多,这样带来的问题就是整体架构相对比较脆弱;另外是运维复杂,需要维护一套大数据的基础组件,尤其是进行分布式部署的时候,这种天然的缺陷(依赖 Hadoop
、 HBase
)更是暴露无遗。当然,可研究下源码,体会下时序数据库的设计原理还是不错的。