说明
Apache IoTDB 始于清华大学软件学院。IoTDB 是一个用于管理大量时间序列数据的数据库,它采用了列式存储、数据编码、预计算和索引技术,具有类 SQL 的接口,可支持每秒每节点写入数百万数据点,可以秒级获得超过数万亿个数据点的查询结果。它还可以很容易地与 Apache Hadoop、MapReduce 和 Apache Spark 集成以进行分析。
iotdb 从 0.12 版本开始支持集群模式。当前最新版本为 0.14.0-preview2
官方地址:https://iotdb.apache.org/zh/
git 代码地址: https://github.com/apache/iotdb.git
代码规模: 总代码: 83 W Java 67 W
系统架构
IoTDB 套件由若干个组件构成,共同形成 “数据收集 - 数据写入 - 数据存储 - 数据查询 - 数据可视化 - 数据分析” 等一系列功能。
如下图展示了使用 IoTDB 套件全部组件后形成的整体应用架构。下文称所有组件形成 IoTDB 套件,而 IoTDB 特指其中的时间序列数据库组件。
在上图中,用户可以通过 JDBC 将来自设备上传感器采集的时序数据、服务器负载和 CPU 内存等系统状态数据、消息队列中的时序数据、应用程序的时序数据或者其他数据库中的时序数据导入到本地或者远程的 IoTDB 中。用户还可以将上述数据直接写成本地(或位于 HDFS 上)的 TsFile 文件。
可以将 TsFile 文件写入到 HDFS 上,进而实现在 Hadoop 或 Spark 的数据处理平台上的诸如异常检测、机器学习等数据处理任务。
对于写入到 HDFS 或者本地的 TsFile 文件,可以利用 TsFile-Hadoop 或 TsFile-Spark 连接器允许 Hadoop 或 Spark 进行数据处理。
对于分析的结果,可以写回成 TsFile 文件。
IoTDB 和 TsFile 还提供了相应的客户端工具,满足用户查看和写入数据的 SQL 形式、脚本形式和图形化形式等多种需求。
在上图中,用户可以通过 JDBC 将来自设备上传感器采集的时序数据、服务器负载和 CPU 内存等系统状态数据、消息队列中的时序数据、应用程序的时序数据或者其他数据库中的时序数据导入到本地或者远程的 IoTDB 中。用户还可以将上述数据直接写成本地(或位于 HDFS 上)的 TsFile 文件。
可以将 TsFile 文件写入到 HDFS 上,进而实现在 Hadoop 或 Spark 的数据处理平台上的诸如异常检测、机器学习等数据处理任务。
对于写入到 HDFS 或者本地的 TsFile 文件,可以利用 TsFile-Hadoop 或 TsFile-Spark 连接器允许 Hadoop 或 Spark 进行数据处理。
对于分析的结果,可以写回成 TsFile 文件。
IoTDB 和 TsFile 还提供了相应的客户端工具,满足用户查看和写入数据的 SQL 形式、脚本形式和图形化形式等多种需求。
源码编译:
前置条件(我本地编译通过的配置):
maven : 3.8.6 ( 3.6 以上 )
jdk : 1.8.0_321 (1.8 以上)
添加 阿里云 Maven 仓库配置: -- 由于京东的 Maven 镜像仓库不全,拉取不到部分 jar 包依赖
在 maven settings.xml 里面添加如下:
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
编译构建:
git clone https://github.com/apache/iotdb.git
切换到 0.14.0-preview2 分支:
编译:
mvn clean install -DskipTests
相关的入口:
在这个目录下,包括相关的 脚本文件,以 shell 文件说明,都包括了如下的信息:
"%JAVA_HOME%\bin\java"
%ILLEGAL_ACCESS_PARAMS% %JAVA_OPTS% %IOTDB_HEAP_OPTS%
-cp %CLASSPATH% %IOTDB_JMX_OPTS%
%MAIN_CLASS%
%CONF_PARAMS%
MAIN_CLASS 标识相关的启动执行的 main 函数:
单机模式:
iotdb 单机模式启动入口: org.apache.iotdb.db.service.IoTDB start-server.sh
新的单机模式入口: org.apache.iotdb.db.service.NewIoTDB start-new-server.sh
具体啥区别后面再分析。
分布式模式: 有关分布式的相关说明,后面单独解释。
datanode : org.apache.iotdb.db.service.DataNode
confignode : org.apache.iotdb.confignode.service.ConfigNode