利用Cassandra存储管理海量船舶动态数据
一、关于Cassandra
使用关系型数据库存储海量的船舶动态数据也许不是一个很好的解决方案。利用NonSQL(MongoDB,HBase,Cassandra等)这种列式存储的方式,存储海量的船舶动态数据,可能是一个种比较便捷,经济和方便的方案。
Cassandra可以运行在单节点模式,也可以组成集群模式,并且可以很方便的进行水平扩展。
关于Cassandra的更多介绍请参考: https://cassandra.apache.org/_/index.html
以下以在Windows操作系统中安装和使用Cassandra单节点服务为例进行介绍。
二、下载安装和启动服务
Cassandra的启动需要用到Java虚拟机环境,请事先在计算机中安装和配置java环境,推荐使用JDK8.0.
1,下载和版本选择
截止本知识帖发布时,Cassandra的新版本已经发布到了5.0。但是后续使用到的Cassandra免费版本的客户端只支持到Cassandra 2.1.x版本,因此选择下载2.1.12版。
下载地址:
https://archive.apache.org/dist/cassandra/2.1.12/apache-cassandra-2.1.12-bin.tar.gz
或下载本帖后的附件文件 "apache-cassandra-2.1.12-bin.tar.gz"
文件下载后,可用解压软件解压到本地磁盘。如下图所示的位置:
解压完毕,即部署好了一个单节点的Cassandra服务。
2,启动服务
使用命令行即可快速启动Cassandra服务。具体步骤如下:
(1)打开命令行窗口,使用CD命令,切换到Cassandra安装路径的bin目录下,如:
cd D:\apache-cassandra-2.1.12\bin
注意:请使用管理员身份打开命令行窗口。
切换到该目录后,可在命令行中直接输入“ cassandra ” 即可完成服务的启动。如下图:
在命令行中出现如下信息,表示服务启动成功。
三、Cassandra客户端
1,客户端软件下载和安装
Cassandra有自带的命令行客户端工具,位于Cassandra安装目录(比如上面截图的:D:\apache-cassandra-2.1.12)下的bin目录和tools/bin 目录下。由于命令行工具不够直观,且需要记住较多的命令和选项参数等,推荐使用具有图形界面的客户端工具软件,例如:DBeaver,下载地址:
注:(1)DBeaver是一款收费软件,免费的社区版软件不支持对Cassandra的连接,必须使用企业版或者Pro版,但是这些版本需要license激活。学生可以向该网站申请academic license key。
(2)本帖后附带了较早版本的免费版DBeaver (DBeaver ee 3.5.1,dbeaver-ee-3.5.1-win32.win32.x86_64.rar),可以连接Cassandra服务,但是该版本不支持高于jdk8.0版本之后的jre环境。
该软件解压后即可使用。双击:“dbeaver.exe”,如下图,即可打开该客户端软件。
2,连接Cassandra服务
打开客户端软件后,可以建立到cassandra服务的连接,方法如下:
(1)选择“文件” --》New
将打开新建对话框:
双击“connection”,自动进入下一步。
双击下图中的“Cassandra CQL”,自动进入下一步。
由于我们上面启动的Cassandra服务在本机运行,因此在下图所示的Cassandra连接参数中,可以保持默认的选项。如果Cassandra服务安装在位于其他地址的服务器上,则根据具体情况填写下方的参数。
一路Next,直到最后一步“Finish connection creation”,可以在下图所示的位置,给新建的数据库连接取个名字,如下图所示,然后点击“Finish”,即可完成新建到Cassandra数据库符的连接。
新建连接完成后,在数据库导航栏中可以看到刚才新建的连接:
点击“locahost.cassandra”左边的下拉箭头,将会自动连接上面已经启动完毕的cassandra服务,并展开相关的keyspace信息。如下图:
三、在Cassandra中存储数据
为了能在cassandra中存储数据,需要在数据库系统中建立keyspace和column family。DBeaver 中支持使用cql命令 (一种类似SQL风格的命令)执行相关的操作。
1,建立Keyspace和Column family
首先在DBeaver中打开“SQL编辑器”,如下图:
在打开的SQL编辑器的编辑区域中,输入如下命令:
CREATE KEYSPACE ais WITH REPLICATION = { 'class' : 'org.apache.cassandra.locator.SimpleStrategy', 'replication_factor': '1' } AND DURABLE_WRITES = true;
将光标定位到这条命令中的中间任何位置(不能定位到最后的分号的外面),然后执行这条命令,如下图:
执行成功后,可以在下方的“Statistics”中看到执行结果,刷新左边的“数据库导航”栏中“Keyspaces”,可以看到刚才创建的keyspace : ais, 如下图:
至此,保存数据需要用到的keyspace已经建立完毕。
接着在SQL编辑器的编辑区域内,输入如下命令:
CREATE TABLE ais.ship_trajectory_data ( ship_mmsi int, update_time text, data_value text, PRIMARY KEY (ship_mmsi, update_time) );
执行该命令,将会在ais这个keyspace下创建用于保存数据的表:ship_trajectory_data。执行成功后,刷新 ais 下的 表,可以看到刚才创建的这个数据表,如下图。
2,使用sstableloader导入数据
可以使用Cassandra自带的数据导入工具sstableloader,将从其他数据库中导出的数据文件,导入到新建的数据表中。
从其他数据库系统中导出的数据文件,见本帖附件(1732075590446.rar)。
导入步骤如下:
(1)下载本帖附件文件,并将文件解压到cassandra安装路径的数据目录下。例如,将cassandra安装在了d:\apache-cassandra-2.1.12,则应该将数据解压到:
D:\apache-cassandra-2.1.12\data\data\ais\ship_trajectory_data-e51bc5f0a6ec11ef8640c3160b659e37
如下图:
解压后的文件部署情况如下图:
注意:ship_trajectory_data-e51bc5f0a6ec11ef8640c3160b659e37 是本帖在实验时,在实验计算机上形成的目录名称,操作人员应该根据本机的实际情况修改。
(2)使用sstableloader导入数据
在命令行,使用cd命令切换到cassandra安装路径的bin目录下,如:
cd D:\apache-cassandra-2.1.12\bin
在命令行中输入如下命令:
特别注意:ship_trajectory_data-e51bc5f0a6ec11ef8640c3160b659e37 是本帖在实验时,在实验计算机上形成的目录名称,操作人员应该根据本机的实际情况修改。
执行成功后,界面返回信息如下图:
在DBeaver的SQL编辑器的编辑区域内输入如下命令并执行,可以看到导入的数据。
select * from ais.ship_trajectory_data;
3,手写CQL命令插入数据
可以在DBeaver的SQL编辑器的编辑区域内书写类似于SQL命令风格的语句插入数据。例如:
insert into ais.ship_trajectory_data(ship_mmsi,update_time,data_value)
values (414726000,'2024-10-01 0800','this is data_value');
并执行上述命令,执行结果如下图:
可以在编辑区内再编写查询语句,查询到刚才写入的数据,如:
select * from ais.ship_trajectory_data where ship_mmsi=414726000;
HBase数据库的安装和使用
HBase是一款非常优秀的基于Hadoop的,分布式的,具有优秀扩展性能的海量数据存储。
相关介绍链接: https://hbase.apache.org/
以下,以在Windows 11 操作系统中部署和使用单节点的HBase数据存储为例,介绍HBase的维护和使用。
一、HBase的下载
HBase的下载地址: https://hbase.apache.org/downloads.html
本节以HBase1.3.6版本为例介绍,官网下载地址为:
https://archive.apache.org/dist/hbase/hbase-1.3.6/hbase-1.3.6-bin.tar.gz
也可以从此处下载:
https://hifleet-static-files.oss-cn-beijing.aliyuncs.com/maritime_informatics/hbase-1.3.6-bin.tar.gz
二、安装部署
注意:HBase的运行需要jdk环境,需要保证预先在操作系统中安装部署了不低于JDK8.0版本的java环境(建议使用jdk8)。
1,安装部署
(1)下载和解压Hadoop
单机HBase运行需要Hadoop环境,请下载hadoop-2.6.0文件。
hadoop-2.6.0的下载地址:
https://hifleet-static-files.oss-cn-beijing.aliyuncs.com/maritime_informatics/hadoop-2.6.0.zip
下载后,请在本机解压,如解压到D盘目录下,解压后的目录结构如下图所示:
(2)配置Hadoop
分别打开:/etc/hadoop/ 路径下的:core-site.xml, hdfs-site.xml, mapred-site.xml文件,可参考下图所示,找到上述三个文件,用文本编辑器打开。
在打开的core-site.xml文件里,贴入如下代码:
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> </configuration>
修改后的该配置文件内容如下图所示:
在打开的hfds-site.xml文件里,贴入如下代码:
<configuration> <property> <name>dfs.permissions.enabled</name> <value>false</value> </property> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>/d:/hadoop-2.6.0/data/dfs/namenode</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>/d:/hadoop-2.6.0/data/dfs/datanode</value> </property> </configuration>
贴如代码后,文件内容如下图所示:
在打开的mapred-site.xml文件里,贴入如下代码:
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
贴入代码后,文件内容如下图所示:
配置完成后,需要配置两个环境变量。如下图:
hadoop_home:
path:
再下载下方压缩文件并加压,将解压后获得的两个文件:winutils.exe 和 hadoop.dll ,拷贝到c:/windows/system32 目录下:
2,部署HBase
HBase无需安装,解压后经过简单的配置即可启动使用。
例如,将下载后的压缩文件解压后,部署在D盘,目录结构如下所示:
3,配置HBase
在启动HBase服务前,需要对其进行简单的配置。配置文件在
%HBase_home%conf/hbase-site.xml
如下图:
用文本编辑器打开该文件,可见如下图:
在参数配置处,需要填入一些属性配置信息,配置信息为:
<configuration> <property> <name>hbase.rootdir</name> <value>file:///d:/hbase-1.3.6/tmp/hbase/root</value> </property> <property> <name>hbase.tmp.dir</name> <value>d:/hbase-1.3.6/tmp/hbase/tmp</value> </property> <property> <name>hbase.zookeeper.quorum</name> <value>localhost</value> </property> <property> <name>hbase.zookeeper.property.clientPort</name> <value>2181</value> </property> <property> <name>hbase.zookeeper.property.dataDir</name> <value>d:/hbase-1.3.6/tmp/hbase/zoo</value> </property> <property> <name>hbase.cluster.distributed</name> <value>false</value> </property> <property> <name>hbase.master.info.port</name> <value>60010</value> </property> </configuration>
填写完毕后,配置文件的内容应该为:
注意:由于本机实验时,将HBase安装在了 本机的 d:/hbase-1.3.6/ 下,所以上述配置属性的路径均以:d:/hbase-1.3.6/ 开头。请根据实际部署情况修改此处地址。
修改好配置项后,保存好位置文件,即可启动HBase服务。
三、HBase的启动和监控
1,启动HBase服务
应该通过命令行启动HBase服务。
首先使用cd 命令,将命令行工作目录切换到HBase安装路径的bin目录下,如下图:
在命令行中输入 start-hbase.cmd 命令并回车,即可启动HBase服务,如下图:
系统会重新打开一个命令行窗口,该窗口将显示HBase服务的运行信息。如下图:
2,监控HBase服务的运行情况
当HBase服务启动结束后,可以利用HBase自带的web监控页面,查看服务的运行情况和相关参数。该Web监控服务的默认端口一般为:60010,在本机浏览器中输入如下地址即可打开:
如下图:
可以在Web监控页面查看本服务的数据库中的建表情况以及其他运行参数。
四、HBase的使用
以下介绍通过HBase自带的shell工具,在HBase中进行数据表的创建,对数据进行操作等。
1,使用shell登入HBase
当HBase正常启动后,可以使用HBase自带的shell工具登入服务。
新打开一个命令行窗口,使用cd命令切换工作目录到HBase安装路径的bin目录下。并输入 hbase shell 命令,并回车,即可登入HBase服务,如下图。
此时,即可在命令行中输入其他操作指令操作HBase数据库服务。
2,在HBase中新建数据表
使用:create命令,可以在HBase中建立数据表。示例命令如下:
在HBase的web监控页面,也可以看到此时HBase内已经有了数据表:
也可以在命令行里,使用 list 命令查看HBase中有了哪些数据表:
使用 describe 命令,可以查看数据表的结构和其他相关参数:
3,向数据表中写入数据
在命令行中,可以使用 put 命令,可以向数据表中写入数据。
示例如下:
4,更新数据表中指定rowkey指定列的值
在命令行中,可以使用put命令,指定要更新的rowkey以及列名,更新该rowkey下该列的值。
示例如下:
6,参看指定行,指定列的数据
在命令行中,可以使用get命令,查看指定行指定列的值,示例命令如下:
7,删除指定行指定列的数据
在命令行中,可以使用 delete 命令删除指定行指定列的数据,
如:
查看执行了删除命令后,该行下的数据:
8,删除某一整行的数据
在命令行中,可以使用 deleteall 命令,删除一整个rowkey下的数据,
如:
9,删除整个数据表(此步操作命令供参考,请谨慎操作)
使用disable 和 drop 命令可以将这个数据表删除,
如:
五、停止HBase服务
在启动HBase的命令行中,输入:stop-hbase.cmd 并回车,将会关闭HBase服务,如下图:
请问你用的jdk是什么版本的?建议用jdk8.0。
往HBase中批量导入数据的方法。
1,首先启动HBase服务;
2,如果HBase中已经存在了dynamic_ships表(见上方的操作介绍),则跳过本步骤。否则,参考上方的操作介绍,创建该表。
3,将本帖后的压缩文件下载到本机,解压后获得一个名为:put_data_to_hbase_cmd_5k.txt文件,将该文件保存在本机某目录下(例如D盘根目录下)。然后重新打开一个新的命令行窗口,使用如下命令:
hbase shell < “d:\put_data_to_hbase_cmd_5k.txt”
即可向HBase中导入txt文件中的数据。该文件中包含了5000条YU MING轮的轨迹点数据。
注意:
该方法实际上是将写入数据命令(put命令)都写在了txt文件内,然后一条条的自动执行,效率较低,数据导入速度比较慢,并不适合大量数据的导入。