当前位置:   article > 正文

大数据实战:Ambari开发手册之OpenTSDB快速集成技巧_opentsdb.conf解析

opentsdb.conf解析

大数据实战:Ambari开发手册之OpenTSDB快速集成技巧

开头先吼一句口号:不会编程的大数据运维,不是一个好的DBA。

为啥这么说呢?因为我职位归属为DBA,负责大数据平台的建设与维护,而日常工作有80%左右的时间是在干开发。

  1. DBA:数据仓库实现的功能也就是一个数据库,叫DBA,这勉强说得过去吧。

  2. 大数据运维:数仓的底层是由大数据平台做的,搞这个平台的维护说是大数据运维,貌似也说得过去吧。

  3. 编程:(看我怎么狡辩)。这就是大数据运维和普通运维、DBA岗位最本质的区别。众所周知,宏观的大数据不是特指某项特定技术,而是为了解决一个大量数据集而产生的解决方案合集。说白了,就是啥都要,最常见的就是Hadoop/Hive + Spark套装。但是实际的需求往往比这多得多。那么怎么才能维护好这个平台呢,那就是“开发”自己的运维工具。

1.OpenTSDB

今天,我们就来聊聊大数据全家桶中的一类数据处理结构“TSDB”,这种数据结构在运维眼中是怎么一个存在。接到一个这样的数据类型需求,怎么来做维护支持。接下来从以下几个层次来论述:

  1. 基础概念和使用:什么是OpenTSDB,怎么使用?

  2. 怎么进行批量维护?

  3. 怎么优化?

1.1 基础概念

TSDB(Time Series & Spatial Temporal Database)中文名称为“时间序列时空数据库”。是一种高性能、低成本、稳定可靠的在线时序时空数据库服务。它提供高效读写、高压缩比存储、时序数据插值及聚合计算等服务,广泛应用于物联网(IoT)设备监控系统、企业能源管理系统(EMS)、生产安全监控系统和电力检测系统等行业场景。

现在常见的TSDB有下面两个数据库:

  • InfluxDB:InfluxDB是一个开源的时间序列数据库,具有高可用性、可扩展性和实时性,适用于存储大量的时间序列数据。它支持灵活的查询语言,可以轻松地分析和可视化时间序列数据。

  • OpenTSDB:OpenTSDB是一个基于HBase的时间序列数据库,专门为存储和查询大量时间序列数据而设计。它提供了高效的数据存储和查询功能,支持快速的数据插值和聚合计算。

我们今天的主角OpenTSDB。为啥选它呢?因为我是搞大数据平台,我刚好有HBase,这不刚好吗。

1.2 基础使用

OpenTSDB可以通过以下方式进行数据的写入:

1)使用telnet协议写入数据:telnet是OpenTSDB默认的数据写入方式,可以通过telnet连接到OpenTSDB的4242端口,然后使用put命令将数据写入数据库中。

  1. import telnetlib
  2. import time
  3. # OpenTSDB连接信息
  4. host ="localhost"
  5. port = 4242
  6. # 连接OpenTSDB服务器
  7. tn = telnetlib.Telnet(host, port)
  8. # 写入数据
  9. metric ="cpu.idle"
  10. timestamp = int(time.time())
  11. value = 99.0
  12. data = f"{metric} {value} {timestamp}\n"
  13. tn.write(data.encode('ascii'))
  14. # 关闭连接
  15. tn.close()

在这个示例中,我们首先使用telnetlib库创建了一个telnet连接,连接到OpenTSDB服务器。然后,我们定义了要写入的数据,包括metric、timestamp和value。最后,我们将数据转换为OpenTSDB的格式,并通过telnet连接写入到OpenTSDB中。需要注意的是,我们使用了time库获取当前时间戳,并将其转换为整数类型。同时,我们使用了encode方法将数据转换为ASCII码格式。

2)使用HTTP API写入数据:OpenTSDB还提供HTTP API来写入数据。可以使用POST请求将数据发送到OpenTSDB的/api/put接口,请求中需要包含必要的参数,如metric、timestamp、value等。

  1. import requests
  2. import json
  3. # OpenTSDB连接信息
  4. host ="localhost"
  5. port = 4242
  6. api_endpoint = f"http://{host}:{port}/api/put"
  7. # 连接OpenTSDB服务器
  8. response = requests.post(api_endpoint, data=json.dumps({
  9. "metrics": [
  10. {
  11. "metric":"cpu.idle",
  12. "timestamp": int(time.time()),
  13. "value": 99.0,
  14. "tags": {}
  15. }
  16. ]
  17. }))
  18. # 关闭连接
  19. response.close()

这个示例中,我们首先定义了要写入的数据,包括metric、timestamp和value。然后,我们使用requests库创建了一个HTTP连接,连接到OpenTSDB服务器的/api/put接口。在请求中,我们将数据转换为JSON格式,并通过POST方法发送到接口中。需要注意的是,我们使用了int()函数将当前时间戳转换为整数类型。同时,我们使用了json.dumps()方法将数据转换为JSON格式。最后,我们使用response.close()关闭连接。

3)使用批量导入工具:OpenTSDB支持使用批量导入工具来一次性写入大量数据。可以使用tsdb-import命令来将本地文件中的数据导入到OpenTSDB中。这个用到的时候大家再百度。

1.3 存储原理解析

OpenTSDB的存储原理基于HBase,它使用了四张表来存储时间序列数据,分别是tsdb_uid、tsdb、tsdb_tree和tsdb_meta。

  1. tsdb_uid表:这个表用于存储时间序列数据的唯一标识符(UID),包括指标(metric)、标签(tag)和时间戳(timestamp)。UID是OpenTSDB中每个数据点的唯一标识,由指标、标签和时间戳的组合而成。这个表的主要作用是提供数据点的索引和快速检索。

  2. tsdb表:这个表用于存储实际的时间序列数据。每个数据点都会存储在这个表中,包括指标的值、时间戳和其他相关的元数据。这个表按照时间戳和指标进行排序,以便快速检索和聚合操作。

  3. tsdb_tree表:这个表用于存储时间序列数据的聚合结果。通过将原始数据聚合为更粗粒度的数据,可以减少存储的数据量并提高查询效率。这个表中的数据是根据时间范围和聚合函数(如平均值、最小值、最大值等)计算得出的。

  4. tsdb_meta表:这个表用于存储时间序列数据的元数据信息,如数据的度量标准、标签的命名空间等。这些元数据信息对于查询和分析时间序列数据非常重要。

OpenTSDB通过这四张表的组合使用,实现了时间序列数据的快速存储和查询。UID表提供了数据点的索引和快速检索,tsdb表存储了实际的数据点,tsdb_tree表存储了聚合结果,而tsdb_meta表则存储了元数据信息。这样的设计使得OpenTSDB具有高效的数据存储和查询能力。

1.4 存储过程

首先模拟一条数据录入:

putsystem.user.cpu159858218775420host=host1

整个存储过程,会涉及两个表数据的插入:tsdb 和tsdb-uid

其中tsdb-uid表的数据如下:

  1. hbase(main):002:0> scan'tsdb-uid'
  2. ROW COLUMN+CELL
  3. \x00 column=id:metrics,timestamp=1598582365144,value=\x00\x00\x00\x00\x00\x00\x00\x03\x00 column=id:tagk, timestamp=1598517313604,value=\x00\x00\x00\x00\x00\x00\x00\x01\x00 column=id:tagv, timestamp=1598582365162,
  4. \x00\x00\x01 column=name:tagk, timestamp=1598517313609,value=host
  5. \x00\x00\x02 column=name:tagv, timestamp=1598582365168,value=host1
  6. \x00\x00\x03 column=name:metrics, timestamp=1598582365150,value=cpu.load
  7. cpu.load column=id:metrics,timestamp=1598582365155,value=\x00\x00\x03
  8. host column=id:tagk,timestamp=1598517313613,value=\x00\x00\x01
  9. host1 column=id:tagv,timestamp=1598582365172,value=\x00\x00\x02

首先,在tsdb-uid表中,对所有的tagk,tagv 和metric进行编号排序。比如:

  1. 监控指标(metric)cpu.load编号为:\x00\x00\x03

  2. 监控标记(tagk)host 编号为:\x00\x00\x01

  3. 监控标记对应的值(tagv)host1编号为:\x00\x00\x02

有以上信息后,那么就到tsdb表中进行数据查询

  1. hbase(main):002:0>scan'tsdb'
  2. ROW COLUMN+CELL
  3. \x00\x00\x03_He \x00\x00\x01\x00\x00\x02 column=t:\xF8Xz\x80, timestamp=1598582366383, value=\x14

其中整个Key是由上面查询中得出的三个值 + 时间来进行排序的。对应的关系如下图:

其中需要特殊说明的是时间此列,值为:_He(空格);

  1. ascal码:_He空格
  2. 16进制:\x5f\x48\x65\x20
  3. 10进制:1598580000
  4. 时间:2020-08-2810:00:00

这时间,是不是有点不对?这个值是整小时数据,所以,所有整个小时内的数据,在HBase中的Key是完全一样的。那么怎么知道具体的时间呢?具体的时间点在其对应的column中。

偏移量:column=t:\xF8Xz\x80;

  1. 2或者4字节组成。代表秒或者毫秒偏移量
  2. ascal:\xF8 X z \x80
  3. 16进制:F8 58 7a 80
  4. 2进制:11111000010110000111101010 00 0000
  5. 前4位,限定字符:1111
  6. 后22位偏移量:1000010110000111101010对应10进制 2187754
  7. 后2位,保留字段:00
  8. 最后4为,格式标记:0000
  9. 第一位:0 整数;1 浮点数
  10. 后三位:000;数据长度;000 = 1字节;010 = 2字节;
  11. 那么整个时间详细参数就是上面两个红色地方的和:
  12. 1598582187754=1598580000 + 2187754

当看完以上的所有流程,那么,这个数据库你就懂了大半了,可以在实际环境使用了。那么就可以开始运维工作了。

2.安装部署

此处,只会单纯讲解最简单的安装,能用即可。需要先部署好Hadoop和HBase,用啥方法安装好都行。

2.1 安装包下载

首先,下载安装软件:

https://github.com/OpenTSDB/opentsdb/releases

有打包好的,直接下载即可,如果Hadoop和HBase的版本有点特殊的话,那么就麻烦各位大佬自己用源码包自己编译一波吧。这个编译难度不大,很稳,自己去折腾吧。

现在也有做好的RPM包,也可以直接使用。

2.2 配置修改

其安装目录下的文件结构如下:

其中配置文档位于:./etc/opentsdb.conf ;其中主要定于各个配置信息:

  1. tsd.network.bind =0.0.0.0
  2. tsd.network.port =4242
  3. tsd.storage.hbase.data_table = tsdb
  4. tsd.storage.hbase.uid_table = tsdb-uid
  5. tsd.storage.hbase.zk_basedir = /hbase
  6. tsd.storage.hbase.zk_quorum = localhost
  7. tsd.http.query.allow_delete =True
  8. tsd.storage.fix_duplicates =True
  9. tsd.core.timezone=Asia/Shanghai

其中主要的参数如上,zk修改为HBase的zookeeper 地址信息即可。默认的存储表只有tsdb,tsdb-uid,其他表需要额外开启对应的索引。

2.3 数据库初始化

软件配置完毕后,在服务启动之前,还需要在HBase中建立对应的HBase表信息。对应的建表语句为: tools/create_table.sh

如果可以的话,修改下表中的压缩格式和TTL,这样可以有效控制数据利用率。

  1. # LZO requires lzo2 64bit to be installed + the hadoop-gpl-compressionjar.
  2. COMPRESSION=${COMPRESSION-'SNAPPY'}
  3. TSDB_TTL=${TSDB_TTL-'315360000'}

然后直接在命令行运行创建语句:./tool/create_table.sh

图片

2.4 启动验证

为了方便管理,可以使用系统的服务管理组件来做启动服务。

  1. ln-s /opt/app/opentsdb/etc/opentsdb /etc/opentsdb
  2. ln-s /opt/app/opentsdb/etc/systemd/system/opentsdb.service /lib/systemd/system
  3. systemctldaemon-reload

然后使用命令:systemctl start opentsdb 即可启动服务。

服务启动后,使用浏览器访问:http://ipaddr:4242能看到页面证明就安装成功了。

接下来就可以使用1.2 章节的案例进行数据案例测试了。

3.自动化实现

我们在上章2中使用了systemctl进行了该服务的管理。但是问题来了,我这里有一个完整的大数据部署平台Ambari,其他组件都在这个列表里可以点点点了。但是OpenTSDB却需要到服务器上去维护。如果我集群规模大了,谁还记得那台主机安装了啥东西呢?

所以,在这个大需求的情况下,作为项目经理的我给大数据平台开发(我)提出了如下需求:

  1. 需要将OpenTSDB集成到Ambari管理平台。

  2. OpenTSDB需要支持多实例需求。

  3. 不同实例之间存储分离

3.1 需求分析

根据以上分析,我们整体结构可以使用Ambari的开发框架来进行主体实现。这个难度不大,可以参考以前发布的过的文章《Amabri二开-DolphinScheduler》来参考。

至于多实例的实现和存储的隔离,这…(头发还能保住吗)。

接下来要分析TSDB的存储结构和配置信息。看了1.3节后的内容,实际的存储由tsdb,tsdb-uid 表来实现,是不是改这个表配置的话,是不是就可以修改这个配置来实现吗?接下来就先验证一波(背地里暗暗得搞)。最后通过笔者熬了一个通宵后,终于搞出了可行的技术方案:

  1. OpenTSDB的主要存储配置中,将opentsdb.conf 和create_table.sh中关于表的信息修改来实现具体的存储隔离。

  2. 接下来同一个Ambari实现多个实例呢?这个可以使用Ambari中的配置组管理来进行隔离。不过有点要注意的是,同一台主机,只能部署同一个类型的实例。

当解决方案想到,并小小测试通过后,就可以去码代码实现了。

3.2 RPM准备

准备安装包

可以去TSDB的官网下载现有的rpm修改。

https://github.com/OpenTSDB/opentsdb/releases

按以上套路解压rpm,修改下OpenTSDB的安装路径等信息。

修改配置

主要修改内容如下:

a. spec 文件中的“%file”内容

将软件安装路径“/opt/app/opentsdb”,修改%file下的安装路径,如下所示:

  1. %files
  2. %attr(0755, root, root)"/usr/bin/tsdb"
  3. %dir %attr(0755, root, root)"/opt/app/opentsdb"
  4. %dir %attr(0755, root, root)"/opt/app/opentsdb/bin"
  5. %attr(0644, root, root)"/opt/app/opentsdb/bin/mygnuplot.bat"

b. /bin/tsdb

修改家目录文件的定义:默认在“/usr/lib/opentsdb”,修改为“/opt/app/opentsdb”:

  1. [root@ bin]# vim tsdb
  2. ...
  3. pkgdatadir='/opt/app/opentsdb'
  4. ...

c. opentsdb.conf

配置文件,修改点默认配置,主要改路径:

  1. [root@ opentsdb]# vim /opt/app/opentsdb/etc/opentsdb
  2. tsd.network.port =8242
  3. tsd.network.bind =0.0.0.0
  4. tsd.http.staticroot = /opt/app/opentsdb/static/
  5. tsd.http.cachedir = /opt/app/opentsdb/cache
  6. tsd.core.plugin_path = /opt/app/opentsdb/plugins
  7. tsd.storage.hbase.data_table = tsdb
  8. tsd.storage.hbase.uid_table = tsdb-uid
  9. tsd.storage.hbase.zk_basedir = /hbase
  10. tsd.storage.hbase.zk_quorum = localhost

d. opentsdb.service

定义TSDB的服务启动信息。将pid文件定义删除,系统版本问题,这个配置项目读取不到,不能正常启动服务。

  1. [root@ system]# cat /opt/app/opentsdb/etc/systemd/system/opentsdb.service
  2. [Unit]
  3. Description=OpenTSDBonport
  4. After=network-online.target
  5. Before=shutdown.target
  6. [Service]
  7. Type=simple
  8. User=opentsdb
  9. Group=opentsdb
  10. LimitNOFILE=65535
  11. Environment=JAVA_HOME=/opt/wzapp/jdk
  12. Environment='JVMARGS=-Xmx2048m -DLOG_FILE=/opt/app/opentsdb/log/%p.log -DQUERY_LOG=/opt/app/opentsdb/log/%p_queries.log-XX:+ExitOnOutOfMemoryError -enableassertions -enablesystemassertions'
  13. ExecStart=/usr/bin/tsdb tsd --config /etc/opentsdb/opentsdb.conf
  14. Restart=always
  15. StandardOutput=journal

rpm制作

Step1:使用rpm制作

使用rpmbuild制作压缩包后拷贝到repo源位置,更新repo源。【参考以上操作文档中的步骤】

Step2:验证rpm安装

寻找任意一台主机,配置内部源的repo信息,执行安装OpenTSDB操作。

a. 添加repo源配置;

  1. [root@ services]# cat /etc/yum.repos.d/ambari.repo
  2. [HDP]
  3. name="Ambari 3.1.0.0-5"
  4. baseurl=http://ipaddr/HDP/3.1.0.0-5
  5. enabled=1
  6. gpgcheck=0

b. 更新repo源,检查TSDB是否有:

  1. [root@ services]# yum makecache
  2. Ambari |2.9kB00:00:00
  3. HDP |2.9kB00:00:00
  4. HDP-2.6-repo-1|2.9kB00:00:00
  5. HDP-GPL |2.9kB00:00:00
  6. [root@ services]# yum list |grep opentsdb
  7. opentsdb.noarch2.4.0-1HDP

Step3:手动安装确认

手动安装一下TSDB,查看是否可以安装并启动。

  1. [root@***]# yum install opentsdb
  2. 正在解决依赖关系
  3. --> 正在检查事务
  4. ---> 软件包 opentsdb.noarch.0.2.4.0-1将被 安装
  5. --> 正在处理依赖关系 gnuplot,它被软件包 opentsdb-2.4.0-1.noarch 需要
  6. --> 正在检查事务
  7. .....
  8. 已安装:
  9. opentsdb.noarch0:2.4.0-1
  10. 作为依赖被安装:
  11. gd.x86_640:2.0.35-26.1.al7 gnuplot.x86_640:4.6.2-3.1.al7 gnuplot-common.x86_640:4.6.2-3.1.al7 libXpm.x86_640:3.5.12-1.1.al7
  12. 完毕!
  13. [root@***]# systemctl start opentsdb
  14. [root@***]# systemctl status opentsdb
  15. ● opentsdb.service - OpenTSDBonport
  16. Loaded: loaded (/opt/app/opentsdb/etc/systemd/system/opentsdb.service;static; vendor preset: disabled)
  17. Active: active (running) since 一2020-11-0916:17:20CST;6s ago
  18. Main PID:14376(java)
  19. Tasks:58
  20. Memory:93.4M
  21. CGroup: /system.slice/opentsdb.service
  22. └─14376java -Xmx2048m -DLOG_FILE=/opt/app/opentsdb/log/opentsdb.log -DQUERY_LOG=/opt/app/opentsdb/log/opentsdb_queries.log-XX:+ExitOnOutOfMemoryError -enableassertions -enablesystemassertions -classpath/opt/app/opentsdb/*.jar:/opt/app/opentsdb:/op...
  23. 11月 09 16:17:20 andesserver-vbj01-3 systemd[1]: Started OpenTSDB on port.

验证目录和文件都OK,那么RPM制作成功。

3.3 Ambari开发

接下来就开始搞集成开发了

开发ambari的开发脚本。参考官网:

https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=38571133

所有代码放到一个文件夹OPENTSDB下面,存到放Ambari-Server的Stack目录:

/var/lib/ambari-server/resources/stacks/HDP/3.3/services

代码结构

代码文件目录结构如下:

主服务定义

OPENTSDB/metainfo.xml

用于描述这个服务,服务的组件和管理脚本用于执行命令。一个组件的服务可以是MASTER,SLAVE或CLIENT类别。这个<category>告诉Ambari默认命令应该用于管理和监控组件。为每个组件指定<commandScript >执行命令时使用。有一个默认命令定义组件必须支持。

  1. <?xml version="1.0"?>
  2. <metainfo>
  3. <schemaVersion>2.0</schemaVersion>
  4. <services>
  5. <service>
  6. <name>OPENTSDBDEMO</name>
  7. <displayName>OpenTSDB</displayName>
  8. <comment>时序数据库OpenTSDB</comment>
  9. <version>2.4.0</version>
  10. <components>
  11. <component>
  12. <name>OPENTSDB_MASTER</name>
  13. <displayName>OpenTSDB</displayName>
  14. <category>MASTER</category>
  15. <cardinality>1</cardinality>
  16. <commandScript>
  17. <script>scripts/master.py</script>
  18. <scriptType>PYTHON</scriptType>
  19. <timeout>5000</timeout>
  20. </commandScript>
  21. </component>
  22. </components>
  23. <osSpecifics>
  24. <osSpecific>
  25. <osFamily>redhat7</osFamily>
  26. <packages>
  27. <package><name>gnuplot</name></package>
  28. </packages>
  29. </osSpecific>
  30. </osSpecifics>
  31. <configuration-dependencies>
  32. <config-type>opentsdb-config</config-type>
  33. </configuration-dependencies>
  34. <restartRequiredAfterChange>false</restartRequiredAfterChange>
  35. </service>
  36. </services>
  37. </metainfo>

安装脚本

OPENTSDB/package/scripts/master.py

书写OpenTSDB的安装程序,其他读取配置等的可参考HADOOP的进行编辑和修改。

其中安装命令:yum install -y opentsdb;

获取并写入pid文件(用于ambari检查):

echo"`ps -aux |grep opentsdb |grep -v grep |awk \'{print$2}\'`"

数据表初始化:

env COMPRESSION=NONE HBASE_HOME=/usr/hdp/current/hbase-client ./src/create_table.sh
  1. importsys, os, pwd, signal, time
  2. fromresource_managementimport*
  3. fromsubprocessimportcall
  4. classMaster(Script):
  5. definstall(self, env):
  6. # Install packages listed in metainfo.xml
  7. self.install_packages(env)
  8. self.configure(env)
  9. importparams
  10. ifnotos.path.exists(params.install_dir):
  11. os.makedirs(params.install_dir)
  12. Execute('yum install -y opentsdb >> '+params.log)
  13. Execute('mkdir -p '+ params.log +' >> '+params.log,ignore_failures=True)
  14. ifparams.create_schema:
  15. Execute('cd '+ params.install_dir +'; env COMPRESSION=NONE HBASE_HOME=/usr/hdp/current/hbase-client ./src/create_table.sh;>> '+params.log)
  16. defconfigure(self, env):
  17. importparams
  18. env.set_params(params)
  19. defstop(self, env):
  20. importparams
  21. importstatus_params
  22. env.set_params(status_params)
  23. self.configure(env)
  24. #kill child processes
  25. Execute (format('systemctl stop opentsdb'))
  26. defstart(self, env):
  27. importparams
  28. importstatus_params
  29. self.configure(env)
  30. ifnotos.path.exists(status_params.opentsdb_piddir):
  31. os.makedirs(status_params.opentsdb_piddir)
  32. Execute('echo Starting process: '+ params.install_dir + params.start_cmd )
  33. Execute(params.start_cmd)
  34. Execute('echo "`ps -aux |grep opentsdb |grep -v grep |awk \'{print $2}\'`" >'+ params.opentsdb_pidfile)
  35. defstatus(self, env):
  36. importstatus_params
  37. env.set_params(status_params)
  38. check_process_status(status_params.opentsdb_pidfile)
  39. if__name__ =="__main__":
  40. Master().execute()

其他功能自行观察。

修改配置

OPENTSDB/configuration/opentsdb-config.xml

定义在web页面可以修改的配置。

  1. <?xml version="1.0"?>
  2. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
  3. <configuration>
  4. <propertyrequire-input="true">
  5. <name>opentsdb.install_dir</name>
  6. <value>/opt/app/opentsdb</value>
  7. <description>Directory under which OpenTSDP will be installed (e.g. /opt/app/opentsdb).Will be created if not already exists.</description>
  8. </property>
  9. <propertyrequire-input="true">
  10. <name>opentsdb.zk.quro</name>
  11. <value>master1:2181,master2:2181,master3:2181</value>
  12. <description>Directory under which OpenTSDP will be installed (e.g. /opt/app/opentsdb).Will be created if not already exists.</description>
  13. </property>
  14. <propertyrequire-input="true">
  15. <name>opentsdb.download_url</name>
  16. <value>http://master2:80/locationx/soft/opentsdb-2.4.0.tar.gz</value>
  17. <description>Online location to download OpenTSDB .tar.gz package from</description>
  18. </property>
  19. <propertyrequire-input="true">
  20. <name>opentsdb.create_schema</name>
  21. <value>true</value>
  22. <description>Whether OpenTSDB schema should be created. Hbase must be started if thisis selected</description>
  23. </property>
  24. <property>
  25. <name>opentsdb.start_cmd</name>
  26. <value>/build/tsdb tsd --zkbasedir=/hbase-unsecure --port=8242 --zkquorum=master1:2181,master2:2181,master3:2181--cachedir=/data/tmp/tsd --staticroot=build/staticroot --auto-metric</value>
  27. <description>Command to launch demo daemon that Ambari will monitor. Port, zk basedir, zk quorum, cache dir can be customized</description>
  28. </property>
  29. <property>
  30. <name>opentsdb.log</name>
  31. <value>/data/log/opentsdb/opentsdb.log</value>
  32. <description>Log file (required)</description>
  33. </property>
  34. <property>
  35. <name>tsd.network.port</name>
  36. <value>4242</value>
  37. <description>服务端口</description>
  38. </property>
  39. <property>
  40. <name>tsd.network.bind</name>
  41. <value>0.0.0.0</value>
  42. <description>服务端口</description>
  43. </property>
  44. </configuration>

效果图(有中文乱码,忽略):

变量获取

OPENTSDB/package/scripts/params.py

获取配置的方法,读取web上面的配置。写入变量中,提供后续安装时候调用。

  1. #!/usr/bin/env python
  2. from resource_management import *
  3. # server configurations
  4. config = Script.get_config()
  5. opentsdb_user="opentsdb"
  6. opentsdb_group="opentsdb"
  7. install_dir = config['configurations']['opentsdb-config']['opentsdb.install_dir']
  8. conf_dir = config['configurations']['opentsdb-config']['opentsdb.conf_dir']
  9. tsd_storage_hbase_zk_quorum = config['configurations']['hbase-site']['hbase.zookeeper.quorum']
  10. tsd_storage_hbase_zk_basedir = config['configurations']['hbase-site']['zookeeper.znode.parent']
  11. tsd_storage_hbase_data_table = config['configurations']['opentsdb-config']['tsd_storage_hbase_data_table']
  12. tsd_storage_hbase_uid_table = config['configurations']['opentsdb-config']['tsd_storage_hbase_uid_table']
  13. tsd_storage_hbase_tree_table = config['configurations']['opentsdb-config']['tsd_storage_hbase_tree_table']
  14. tsd_storage_hbase_meta_table = config['configurations']['opentsdb-config']['tsd_storage_hbase_meta_table']
  15. start_cmd = config['configurations']['opentsdb-config']['opentsdb.start_cmd']
  16. log_dir = config['configurations']['opentsdb-config']['opentsdb.log']
  17. #tsdb
  18. jvm_xmx=config['configurations']['opentsdb-config']['jvm_xmx']
  19. opentsdb_piddir = config['configurations']['opentsdb-env']['opentsdb_piddir']
  20. opentsdb_pidfile = format("{opentsdb_piddir}/opentsdb.pid")
  21. #config
  22. tsd_port = config['configurations']['opentsdb-config']['tsd.network.port']

最后上传OPENTSDB代码包到Ambari-server的service目录,并重启Ambari-server服务。

  1. [root@**** tools]# cp OPENRSDB /var/lib/ambari-server/resources/stacks/HDP/3.3/services/
  2. [root@**** tools]# ambari-server restart

在ambari-server的web安装页面即可查看到此服务。

3.4 安装部署验证

安装部署啥的,在页面上点点点就可以了。各位大佬读者看着安装即可。这里主要演示多实例的部署,主要需要使用Ambari的组管理

在【Ambari】组件【OpenTSDB】的【配置管理页面】:

添加对应的组和主机归属:

然后在详细的配置中,切换不同组,修改对应的表信息:

注意:四个表都得改:tsdb,tsdb-uid,tsdb-meta,tsdb-tree

最后,在不同的主机上,进行对应的安装。安装完成后的页面:

接下来双重验证,点击不同的链接,确认是否都可用。

在HBase中,确认下是否都有建立对应的存储表。

最后的最后,搞点虚拟数据验证下,看看数据读写都否都OK。然后就可以开启正常的运维生活了(玩着手机看开发各种花式掉头发)。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/561384
推荐阅读
相关标签
  

闽ICP备14008679号