时序数据库-3-[IoTDB]的安装与使用

IoTDB官方文档手册
Apache IoTDB(物联网数据库)是一体化收集、存储、管理与分析物联网时序数据的软件系统。 Apache IoTDB 采用轻量式架构,具有高性能和丰富的功能,并与Apache Hadoop、Spark和Flink等进行了深度集成,可以满足工业物联网领域的海量数据存储、高速数据读取和复杂数据分析需求。
在这里插入图片描述

1 单机安装IoTDB

1.1 虚拟环境准备

一、关闭Win10系统Hyper-v虚拟机
控制面板-> 程序 -> 启用或关闭Windows功能 -> 勾选Hyper-v。
启用Hyper-V后,VirtualBox就无法在使用,但是保留所有现有的VirtualBox VM映像。
如果不关闭Hyper-v,在使用VirtualBox时会报如下错误。
在这里插入图片描述

微软的Hyper-V在启用的时候,宿主机也被虚拟化了,
以至于在宿主机上直接访问CPU的其他虚拟技术会失效。
即使VT-X在BIOS里面开了,
Intel的CPU检测工具也会报告CPU不支持VT-X。
可以在管理员命令行下运行
bcdedit /set hypervisorlaunchtype off
之后重启电脑来关闭Hyper-V。

二、安装配置JAVA_HOME

要求:JDK>=1.8 
显示和修改实际指向的候选命令
update-alternatives --config java

三、设置最大文件打开数为 65535

(1)查询
ulimit -n
(2)临时生效
ulimit -n 65535
(3)永久生效
将ulimit -n 65535添加到/etc/profile的最后
echo "ulimit -n 65535" >>/etc/profile
source /etc/profile刷新配置

1.2 Centos7单机二进制安装

一、从下载页面下载最新的安装包,解压后即完成安装。

(1)解压
yum install -y unzip zip
unzip apache-iotdb-0.13.0-all-bin.zip -d /usr/local/
mv apache-iotdb-0.13.0-all-bin/ iotdb
(2)配置环境变量
vi /root/.bashrc
export IOTDB_HOME=/usr/local/iotdb
export PATH=$PATH:$IOTDB_HOME/sbin
source /root/.bashrc
(3)后台启动
nohup start-server.sh >/dev/null 2>&1 &
ps -ef | grep iotdb
(4)命令行连接
start-cli.sh -h 127.0.0.1 -p 6667 -u root -pw root
start-cli.sh -h 192.168.1.10 -p 6667 -u root -pw root
start-cli.sh -h hostname -p 6667 -u root -pw root
(5)停止
stop-server.sh

二、单机安装后的软件目录结构

sbin 启动和停止脚本目录
conf 配置文件目录
tools 系统工具目录
lib 依赖包目录

初始安装后的 IoTDB 中有一个默认用户:root,默认密码为 root。用户可以使用该用户运行 Cli 工具操作 IoTDB。Cli 工具启动脚本为 sbin 文件夹下的 start-cli 脚本。启动脚本时需要指定运行 ip、port、username 和 password。

1.3 Ubuntu单机二进制安装

(1)解压
 sudo dpkg -i unzip_6.0-25ubuntu1.1_amd64.deb
 sudo unzip apache-iotdb-1.0.0-all-bin.zip -d /usr/local/
 一般用户注意给予权限
 sudo chmod 777 apache-iotdb-1.0.0-all-bin/
 
 (2)配置环境变量
vi /home/zb/.bashrc
export IOTDB_HOME=/usr/local/apache-iotdb-1.0.0-all-bin
export PATH=$PATH:$IOTDB_HOME/sbin
source /home/zb/.bashrc

(3)后台启动
nohup start-standalone.sh >/dev/null 2>&1 &nohup start-standalone.sh >/tmp/iotdbout.log 2>&1 &
ps -ef | grep iotdb
启动以后新增了三个目录
/usr/local/apache-iotdb-1.0.0-all-bin/data
/usr/local/apache-iotdb-1.0.0-all-bin/ext
/usr/local/apache-iotdb-1.0.0-all-bin/logs

(4)查看进程
jps
7741 DataNode
7885 Jps
7647 ConfigNode

(5)命令行连接
start-cli.sh -h 127.0.0.1 -p 6667 -u root -pw root
start-cli.sh -h 192.168.1.10 -p 6667 -u root -pw root
start-cli.sh -h hostname -p 6667 -u root -pw root

(6)停止
stop-server.sh

1.4 配置文件iotdb-engine.properties

(1)参数timestamp_precision
# Use this value to set timestamp precision as "ms", "us" or "ns".
# Once the precision is been set, it can not be changed.
# Datatype: String
timestamp_precision=ns

(2)参数virtual_storage_group_num
# number of virtual storage groups per user-defined storage group
# a virtual storage group is the unit of parallelism in memory as all ingestions in one virtual storage group are serialized
# recommended value is [virtual storage group number] = [CPU core number] / [user-defined storage group number]
# Datatype: int
# virtual_storage_group_num = 1
virtual_storage_group_num = 8

配置参数修改以后,启动iotdb,与系统有关的配置参数就会写入到data/system/schema/system.properties中。

系统目录:data/system里面有几个重要的文件。
(1)mlog.txt:元数据日志,采用追加的方式,记录了所有的元数据操作,包括增删存储组、增删时间序列等。重启的时候会重做这个文件里的日志,遇到错误的会跳过。
(2)system.properties:系统属性,记录了一些启动后不可更改的参数,如分区粒度、时间精度等。
(3)tlog.txt:标签和属性信息,如果没创建,这个文件就是空的。

1.5 IoTDB时区

在尝试修改时区设置时发现 IoTDB 的 config 文件里居然没有发现时区的相关设置。后来才了解到,IoTDB服务器其实只针对long时间戳进行存储。时区只用来跟客户端进行交互。

如果我的客户端默认的系统时区不正确,如何才能正确的写入和查询数据呢?
(1)如果客户端是CLI命令行,可以通过SQL手动设置时区

IoTDB> show time_zone
Current time zone: America/New_York
IoTDB> set time_zone=+08:00
Time zone has set to +08:00
IoTDB> show time_zone
Current time zone: +08:00

(2)如果客户端是JDBC或者JAVA等原生API,可以通过下面方法设置

JDBC: (IoTDBConnection) connection.setTimeZone("+08:00");
Session: session.setTimeZone("+08:00");
相应的查看的方法为:
JDBC: (IoTDBConnection) connection.getTimeZone();
Session: session.getTimeZone();

2 docker安装iotdb

2.1 查看镜像都有哪些版本

要想查看镜像的版本和TAG,需要在docker hub查看
地址如下:https://hub.docker.com/r/library/。
在这里插入图片描述

2.2 安装指定版本的

可以使用docker volume create命令创建 docker 卷。此命令将在/var/lib/docker/volumes目录中创建一个卷。

docker search iotdb
docker pull apache/iotdb拉取最新
docker pull apache/iotdb:0.13.0-node拉取指定
(1)创建数据文件和日志的 docker 挂载目录
docker volume create mydata
docker volume create mylogs

(2)运行docker容器
docker run --name iotdb  -p 6667:6667 -v mydata:/iotdb/data -v mylogs:/iotdb/logs -d apache/iotdb:latest /iotdb/bin/start-server.sh

(3)可以使用docker ps来检查是否运行成功
(4)获取container的ID
docker container ls
(5)进入容器
docker exec -it iotdb /bin/bash
(6)登陆IotDB
/iotdb/sbin/start-cli.sh -h localhost -p 6667 -u root -pw root

3 windows安装iotdb

下载后直接解压到指定目录即可apache-iotdb-1.1.0-all-bin。

IoTDB 是一个基于分布式系统的数据库。要启动 IoTDB ,你可以先启动单机版(一个 ConfigNode 和一个 DataNode)来检查安装。
用户可以使用 sbin 文件夹下的 start-standalone 脚本启动 IoTDB。
在这里插入图片描述
初始安装后的 IoTDB 中有一个默认用户:root,默认密码为 root。用户可以使用该用户运行 Cli 工具操作 IoTDB。Cli 工具启动脚本为 sbin 文件夹下的 start-cli 脚本。启动脚本时需要指定运行 ip、port、username 和 password。若脚本未给定对应参数,则默认参数为"-h 127.0.0.1 -p 6667 -u root -pw -root"。

start-standalone.bat
start-cli.bat
(1)创建数据库
create database root.ln
(2)查询数据库
show  databases;
(3)创建时间序列
CREATE TIMESERIES root.ln.wf01.wt01.status WITH DATATYPE=BOOLEAN, ENCODING=PLAIN
CREATE TIMESERIES root.ln.wf01.wt01.temperature WITH DATATYPE=FLOAT, ENCODING=RLE
(4)查看时间序列
show timeseries;
SHOW TIMESERIES root.ln.wf01.wt01.status
(5)插入数据
INSERT INTO root.ln.wf01.wt01(timestamp,status) values(100,true);
INSERT INTO root.ln.wf01.wt01(timestamp,status,temperature) values(200,false,20.71)
(6)查询数据
SELECT status FROM root.ln.wf01.wt01
SELECT * FROM root.ln.wf01.wt01

4 应用IoTDB

4.1 命令行操作

数据在IoTDB中的组织形式是以时间序列为单位,每一个时间序列中有若干个数据-时间点对,每一个时间序列属于一个存储组。在定义时间序列之前,要首先定义存储组。

(1)创建存储组
set storage group to root.1n
(2)查看存储组
show storage group

创建时间序列时需要定义数据的类型和编码方式。

(1)创建时间序列
create timeseries root.1n.wf01.wt01.status with datatype=boolean,encoding=plain
create timeseries root.1n.wf01.wt01.temperature with datatype=float,encoding=rle
(2)查看时间序列
show timeseries

插入数据时需要指定时间戳和路径后缀名称。

(1)向单个时间序列中插入数据
insert into root.1n.wf01.wt01(timestamp,status) values(100,true);
(2)向多个时间序列中同时插入数据
这些时间序列同属于一个时间戳:
insert into root.1n.wf01.wt01(timestamp,status,temperature) values(200,false,20.71)

4.2 python操作

要求Python >=3.7
安装pip install apache-iotdb
在这里插入图片描述

# -*- coding: utf-8 -*-
from iotdb.Session import Session
ip = "127.0.0.1"
port_= "6667"
username_ = "root"
password_ = "root"

session = Session(ip,port_,username_,password_)
session.open(enable_rpc_compression=False)
zone = session.get_time_zone()
print("时区", zone)

sql_str1 = "show timeseries"
sql_str2 = "SELECT * FROM root.ln.wf01.wt01"
with session.execute_query_statement(sql_str1) as session_data_set:
    # 查询结果转换为DataFrame
    df1 = session_data_set.todf()
    
with session.execute_query_statement(sql_str2) as session_data_set:
    # 查询结果转换为DataFrame
    df2 = session_data_set.todf()
session.close()
print(df1)
print(df2)

在这里插入图片描述

4.3 导出数据

通过iotdb自带的tools。

(1)编辑待执行脚本到文件0519sql.txt
show timeseries
(2)执行导出
export-csv.bat -h 127.0.0.1 -p 6667 -u root -pw root -td ./ -s 0519sql.txt

【Linux】
sh export-csv.sh  -h 127.0.0.1 -p 6667 -u root -pw root -td ./ -s sql.txt

其中
-h,--host <host>             Host Name (required)
-p,--port <port>             Port (required)
-u,--username <username>     Username (required)
-pw,--password <password>    Password (required)
-td <targetDirectory>        Target File Directory (required)
-f <targetFile>              Export file name (optional)
-s <sqlfile>                 SQL File Path (optional)
(3)输出文件为dump0.csv
如果查询结果较多,会输出多个文件。

4.4 导入数据

在其它环境通过select语句输出到csv中的数据。
IoTDB 具有类型推断的能力,因此在数据导入前创建元数据不是必须的。

import-csv.bat -h 127.0.0.1 -p 6667 -u root -pw root -f dump0_0.csv
  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皮皮冰燃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值