Apache IoTDB 系列教程-3:部署运维
今天介绍 IoTDB 的部署运维相关知识,帮助大家玩转 IoTDB!
正文 1859 字,预计阅读时间 5 分钟。
开箱即用
IoTDB 的理念就是系统运维要简单,要一键启动、开箱即用。就从启动开始说起吧,需要安装 jdk8 或者 jdk11,下载发布版,http://iotdb.apache.org/Download/ ,解压缩后是这样的目录结构:
内存在 conf/iotdb-env.sh 里,配置 MAX_HEAP_SIZE,要去掉前边的注释。其他所有配置都在 conf/iotdb-engine.properties 里。
可能需要给脚本加个执行权限,接下来后台启动 server:
nohup sbin/start-server.sh >/dev/null 2>&1 &
目录结构
使用默认配置启动并且写数据之后,项目根目录会生成下面这些文件夹,都在 data 目录下:
其中主要包括 3 部分,数据文件data/data,系统文件data/system,写前日志data/wal。
数据目录:data/data
目录组织方式为 顺序/乱序数据 -> 存储组 -> 分区号(目前默认一个分区) -> 数据文件.tsfile及索引文件.resource。
数据文件 TsFile (Timeseries File) 是我们设计的列存文件格式,主要存储各个时间序列原始数据,TsFile 有单独的 API,可以当做一个独立的工具使用,就像 Parquet、ORC 一样。 数据文件可以配置多目录,通过 data_dirs 参数配置。
系统目录:data/system
里面有几个重要的文件。
mlog.txt:元数据日志,采用追加的方式,记录了所有的元数据操作,包括增删存储组、增删时间序列等。重启的时候会重做这个文件里的日志,遇到错误的会跳过。
system.properties:系统属性,记录了一些启动后不可更改的参数,如分区粒度、时间精度等。
tlog.txt:标签和属性信息,如果没创建,这个文件就是空的。
写前日志目录:data/wal
写入的数据会先记录写前日志,然后写到内存里。当内存里的数据刷盘之后,写前日志才会被清理。当你发现写了一些数据之后,数据目录还是空的,这时候数据就在写前日志和内存里。
写前日志是按照存储组组织的,一个写前日志文件对应一个 TsFile 文件。
如果想强制将内存的数据刷盘,可以通过 CLI 执行 flush 命令。会持久化内存数据,并且清楚写前日志。
系统日志:data/logs
除了上边那三个最重要的,还有系统日志,日志文件按照日期归档,没有日期的就是今天的。
出现问题可以来这里拷日志发给我们。
重新来过
测试了一些之后,想重新来过,很方便,把上边那三个目录都删掉,重新启动就可以了。还是整条街最靓的 IoTDB 。
数据迁移
迁移之前,最好用 CLI 控制台执行一次 flush 命令,持久化内存数据(这样就没有写前日志了)。重启一次 IoTDB 也是类似的效果。迁移的IoTDB版本要相同。
介绍几个场景:
1. 把 A 机器上的 IoTDB 整体迁移到 B 机器上(调试、数据备份等)
可以把整个data目录(包括数据目录、系统目录)都拷过去,在 B 机器配置好根目录,启动 B 机器的 IoTDB 即可。
2. 把 A 机器上的 IoTDB 的部分存储组的数据迁移到 B 机器上
想迁移数据,元数据一定要迁移。首先把 A 机器的 data/system 目录拷贝到 B 机器上,接下来把 A 机器数据目录里的部分存储组目录拷贝到 B 机器,在 B 机器配置好对应的目录。启动 B 机器的 IoTDB 即可。
3. 把 A 机器上的 IoTDB 的元数据迁移到 B 机器上,但是不要数据
把 A 机器的 data/system 目录拷贝到 B 机器的相应位置,启动 B 机器的 IoTDB 即可。
系统监控
监控系统的内存和CPU还是很爽的,现在让大家也爽一下,以下适用于 0.9.2 以后的版本,主要是用 jvisualvm,本地需要有 jdk8。
如果是本机运行 IoTDB,直接在本机命令行输入 jvisualvm 就可以连接本机的 IoTDB 进程了。
如果要在服务器运行 IoTDB,需要先修改配置文件 conf/iotdb-env.sh,
JMX_LOCAL="false"
JMX_IP="the_real_iotdb_server_ip" # 填写实际IoTDB的IP地址
查看 conf/jmx.password,这里记录了默认的 JMX 的用户和密码,可以修改。各个用户的权限在 conf/jmx.access 中。
然后建立远程连接,默认 31999 端口,连上之后就能看到了:
总结
今天介绍了 IoTDB 的目录结构,重新来过和迁移方式,最后介绍了系统监控方式。欢迎关注、转发!
- 检测常见ASP.NET配置安全漏洞
- Flash/Flex学习笔记(56):矩阵变换
- js小技巧:tab页切换
- c#字符串操作方法实例
- Android中Fragment+ViewPager的配合使用
- 结合机器学习与生物医学技术,寻找Uber司机出行模式
- ASP.NET MVC 4 - 测试驱动 ASP.NET MVC
- LVS+Keepalived高可用环境部署梳理(主主和主从模式)
- 随着区块链的火爆,相关顶级域名“矿池”KC.com已建站
- Flash/Flex学习笔记(50):3D线条与填充
- LVM常规操作记录梳理(扩容/缩容/快照等)
- Flash/Flex学习笔记(55):背面剔除与 3D 灯光
- 资源等待类型sys.dm_os_wait_stats
- NVIDIA不再允许数据中心用GeForce驱动,提供区块链服务除外
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 计算机基础之位运算 | 按位取反
- 关于php的ini文件相关操作函数浅析
- PHP中的输出缓冲控制
- SpringCloud微服务:基于Nacos组件,整合Dubbo框架
- [译] 使用 microbundle 打包 TypeScript 组件库
- 3分钟短文 | Laravel 获取模型查询生成的SQL语句
- 基于git的测试用例管理方案
- 【赵渝强老师】MongoDB管理用户的认证机制
- 使用Microsoft Teams Updater执行代码
- 腾讯云 Serverless 云函数实现 CKafka 数据转存到 ES
- 软硬件都开源!基于千兆以太网的温度传感应用
- 【赵渝强老师】使用Docker Compose进行服务编排
- Kubernetes Pod入门指南
- Java线程池深度揭秘
- 蒙特卡洛法求积分