返回APP

分享到

航运大数据技术课程实验指南,持续更新....
 
Notifications
Clear all

航运大数据技术课程实验指南,持续更新...

页 1 / 2

杨春
Eminent Member
已加入: 4 年 前
帖子: 20
Topic starter  

一、Postgresql下载地址:

https://www.enterprisedb.com/downloads/postgres-postgresql-downloads

根据本机的操作系统类型,选择下载安装包文件。如下图。

image

 

以下以Windows操作系统为例,介绍在Windows下的安装、初始化和导入数据的步骤和注意事项:

 

二、为防止最后初始化数据库失败而提前采取的措施:

具体情况介绍和采取的措施参考:

https://blog.51cto.com/u_15677788/5437054

比如,如果要打算把postgresql数据库服务器安装在C:\postgresql 文件夹下,可以先在C盘新建该文件夹,然后按照上方链接的介绍,修改这个文件夹的访问权限。

 

三、执行数据库的安装

1,以管理员身份运行下载的数据库服务器安装文件,如下图:

image

注意:要检查下载文件大小,以防在下载过程中出错,下载的文件不完整,导致不能正常安装。

右键点击安装文件,从右键菜单中,选择“以管理员身份运行”,如下图:

image

注意:windows操作系统可能会弹出安全警示对话框,类似如下:

image

请点击“运行”。

 

如果计算机的用户名是中文的话,在后续的安装环节中可能会出错,此时可以参考如下帖子针对处理:

https://blog.csdn.net/m0_64375126/article/details/138679449

 

2,后续步骤图如下:

image

 

image

 

image

 

image

 

image

 

image

 

image

 

image

 

image

 

image

 

image

3,安装客户端工具和PostGIS组件

安装结束后,会自动跳转到如下安装界面:

image

后续的安装步骤图如下:

image

1,展开Add-ons, tools and utilities,勾选pgAgent for PostgreSQL,这个组件是postgresql数据库服务器的客户端软件。

2,展开Spatial Extensions,勾选下方的PostGIS 3.4 Bundle for PostgreSQL,这个是postgresql的空间扩展组件。

还可以用另外一种方式安装postgis组件。即跳过此步骤,不要联网安装postgis组件,而是在安装好postgresql后,下载离线的postgis安装包,再进行postgis组件的安装。

postgis的安装包下载地址如下:

https://download.osgeo.org/postgis/windows/

请根据postgresql的版本挑选相应的postgis安装包下载。如本机安装的postgresql的版本是16,则下载下图所示的postgis组件安装:

image

 

如果要联网下载postgis组件并安装,操作步骤如下图:

image

选择组件安装文件下载目录,建议:保持默认,如下图:

image

下载组件,这一步会等待较长时间,请耐性等待,保持网络连接正常。如下图:

 

image

下载组件完毕后,会自动跳转到安装组件界面,如下图:

image

后续的安装步骤图如下:

image

 

image

 

image

 

image

 

image

 

image

 

image

 

image

 

image

至此,安装完成。

 

This topic was modified 2 年 前 by HIFLEET
This topic was modified 9 月 前 by HIFLEET

引用
杨春
Eminent Member
已加入: 4 年 前
帖子: 20
Topic starter  

在Postgresql中建数据库、Schema和数据表操作介绍

以下以在windows操作系统中为例:

一、启动pgAdmin,连接Postgresql数据库服务器

1,启动pgAdmin,方式图解如下:

image

启动界面如下:

image

2,连接Postgresql数据库服务器,图解如下:

image

 

image

 

image

3,创建新的数据库和Schema,图解如下:

image

 

image

 

image

 

image

 

image

 

image

4,创建新的数据表,图解如下:

image

 

image

 

image

 

 

image

 

image

 

image

至此,新建数据库,Schema,数据表操作结束。


回复引用
杨春
Eminent Member
已加入: 4 年 前
帖子: 20
Topic starter  

在Postgresql中导入数据操作介绍

以下以在windows操作系统中,向已经建立好的ais_data 下的static_ships 表中导入本帖附件中的数据为例。

1,打开Query Tool窗口,图解如下:

image

 

image

 

2,在Query区域,输入类似如下命令:

COPY AIS_DATA.STATIC_SHIPS (ID,MMSI,IMO,CALLSIGN,SHIPNAME,SHIPTYPE, TO_BOW,TO_STERN,TO_STARBOARD,TO_PORT,ETA,DRAUGHT,DESTINATION,TS) FROM 'd:/static_ships_from_pg/static_ships_from_pg.txt';

注意:红字部分表示要导入的数据文件在哪个路径下。请根据要导入的数据文件实际保存位置替换上述红字部分的内容。

按如下图解,执行该导入数据命令:

image

3,查看导入的数据数量,

输入如下命令,可以查询向static_ships数据表中导入了多少条数据,图解如下:

image

至此,向ais_data.static_ships 表中导入数据完成。

要导入的静态数据文件在这里:


回复引用
杨春
Eminent Member
已加入: 4 年 前
帖子: 20
Topic starter  

在Postgresql中导入船舶ais动态数据操作介绍:

以下以在Windows操作系统中导入船舶ais动态数据为示例:

1,按照上述方法新建一个数据表,数据表名称:dynamic_ships,数据表的字段和主键约束等图示如下:

image

 

image

 

image

 

2,在Query Tool 里输入类似如下命令:

COPY AIS_DATA.dynamic_ships (ID,MMSI,ts,lon,lat,course, speed,heading,rate_of_turn,navigation_status) FROM 'd:/maritime_informatics/dynamic_ships_from_pg.txt';

注意:红字部分要根据下载的待导入数据的存放路径进行修改。

 

3,选中上述命令,开始执行导入。

 

4,导入结束后,可以利用如下命令,查询导入了多少条数据到数据表中:

image

至此,向ais_data.dynamic_ships表中导入船舶ais动态数据操作结束。

 

要导入的动态数据文件在此:

https://hifleet-static-files.oss-cn-beijing.aliyuncs.com/maritime_informatics/dynamic_ships_from_pg.rar


回复引用
杨春
Eminent Member
已加入: 4 年 前
帖子: 20
Topic starter  

1,关于shiptype

按照AIS技术规范(文件附后)第113页表52中的介绍,参考第114页表53的内容,可以获得该字段值对应的船舶类型。

2,关于to_bow, to_stern, to_starboard, to_port:

按照上述规范,参考第113页表52中的介绍,以及参考115页图41的示意。

 

3,关于id

这个是数据表中的主键字段,用于标识数据表中每条数据的唯一标识符。

 

附件:AIS相关的技术规范(现在不一定是最新的版本了,但是仍然具有参考价值)


回复引用
杨春
Eminent Member
已加入: 4 年 前
帖子: 20
Topic starter  

在QGIS中可视化船舶AIS动态数据。

1,QGIS的下载安装

QGIS的下载地址如下:

https://qgis.org/en/site/

安装不复杂,与一般应用软件类似,一路next。此处不再详细介绍。

后续篇幅,以windows操作系统下,QGIS3.0版本为介绍对象。

image

 

2,添加底图图层(以最简单常见的添加瓦片(tile)式图层为例)

(1)安装好QGIS后,打开该软件。

image

 

image

 

Name可以自定义,

以显示必应地图为例,URL地址处填写:

https://t1.dynamic.tiles.ditu.live.com/comp/ch/{q}?mkt=zh-CN&ur=CN&it=G,RL&n=z&og=804&cstl=vb

image

 

image

 

image

 

到此,在QGIS中将必应地图作为底图图层展示操作完毕。

 

3,建立矢量数据表

在PostgreSQL数据库中给dynamic_ships表添加时间和空间字段数据

打开pgAdimin(操作介绍在上面帖子),在Query Tool窗口内,分别依次执行如下命令:

alter table ais_data.dynamic_ships add column t timestamp without time zone;

update ais_data.dynamic_ships set t=to_timestamp(ts); 

这两条命令,给dynamic_ships数据表添加了时间字段;

执行下面的命令,给新添加的时间字段(t),添加索引:

CREATE INDEX idx_dynamic_ships_t ON ais_data.dynamic_ships using btree(t);

 

由于提供的动态数据量多大700多万条数据,为了便于后续的计算处理,防止在硬件配置较低的计算机上处理时出现卡顿现象,建议新建一张新的数据表用于存储少量的数据用作后续的实验。方法如下:

在PostgreSQL数据库参照dynamic_ships的表结构新建一张表,存储少量数据。

create table ais_data.dynamic_ships_mini ( like ais_data.dynamic_ships including indexes including defaults);

然后从dynamic_ships表中向新建的表中插入少量的数据,比如运行如下命令,插入3个小时的数据:

insert into ais_data.dynamic_ships_mini select * from
ais_data.dynamic_ships where t>='2019-09-01 0900' and t<='2019-09-01 1200';

随后的实验就可以在这份少量数据表的基础上继续完成。

 

首先执行如下命令,让PostgreSQL支持空间数据类型:

CREATE EXTENSION postgis ;

再依次执行下面两条命令:

alter table ais_data.dynamic_ships_mini add column geom geometry(Point,4326);

update ais_data.dynamic_ships_mini set geom=st_setSRID(ST_MakePoint(lon,lat),4326);

image

上面两条命令,给dynamic_ships添加空间字段并更新该字段值。

至此,在PostgreSQL数据库以船舶动态AIS数据为基础,建立空间数据表。

 

4,在QGIS中显示矢量数据

4.1:在QGIS中连接PostGIS

右键点击PostGIS,在右键菜单中选择New Connection... 如下:

image

在弹出的窗口中,注意红框处的填写:

image

Name:自定义连接名称;

Service:不要填,保持空白即可;

Host:根据PostgreSQL数据库安装的情况填写,比如,如果PostgreSQL数据库安装在本机,则填写:localhost

Port:根据PostgreSQL数据库安装时的端口填写,如果在安装PostgreSQL数据库时没有改动默认端口,则默认端口是5432

Database: 根据上面帖子中的教程,此处填写:ship_ais

image

测试连接是否成功:

image

 

4.2 展开PostgreSQL数据库中的库表,添加矢量数据图层

image

 

image

4.3 修改矢量图层显示

右键点击“dynamic_ships_mini”图层,在右键菜单上选择“Properties”菜单:

image

在弹出的窗口上,选择“Symbology”选项卡,注意:红框处,可以调节矢量数据显示的颜色,透明度,形状,大小等参数:

image

 

4.4 从矢量数据中筛选显示数据

以在矢量数据中筛选我校育明轮的轨迹数据点为例。

在“dynamic_ships_mini”图层,在右键菜单上选择“Filter...”菜单。在弹出的对话框中输入如下:

image

 

image

4.5 给矢量数据显示标签信息

右键点击“dynamic_ships_mini”图层,在右键菜单上选择“Properties”菜单。在弹出的对话框里选择Labels 选项卡:

image

 

image

 

image

这样,就给轨迹点数据显示了他的时间标签。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

This post was modified 9 月 前 by HIFLEET

回复引用
杨春
Eminent Member
已加入: 4 年 前
帖子: 20
Topic starter  

在QGIS中显示航迹线

1,依次在pgAdmin的Query Tool中执行如下命令,建立轨迹线段数据。

ALTER TABLE ais_data.dynamic_ships_mini ADD COLUMN geom3035 geometry(Point,3035);

UPDATE ais_data.dynamic_ships_mini SET geom3035=ST_Transform(geom, 3035);

为了提高后续执行速度,使用下面的命令,在geom3035字段上加上索引:

CREATE INDEX idx_dynamic_ships_geom3035 ON ais_data.dynamic_ships_mini USING GiST(geom3035);

使用下面的命令,建立轨迹段数据:

create table ais_data.segments as
select mmsi,t1,t2,speed1,speed2,p1,p2,
st_makeline(p1,p2) as segment,
st_distance(p1,p2) as distance,
extract(epoch from (t2-t1)) as duration_s,
(st_distance(p1,p2)/(1+extract(epoch from (t2-t1)))) as speed_m_s
from (
select mmsi,lead(mmsi) over (order by mmsi,t) as mmsi2,
t as t1,
lead(t) over (order by mmsi, t) as t2,
speed as speed1,
lead(speed) over (order by mmsi,t) as speed2,
geom3035 as p1,
lead(geom3035) over (order by mmsi,t) as p2
from ais_data.dynamic_ships_mini) as q1
where mmsi = mmsi2;

 

2,在QGIS中显示轨迹线段

在QGIS中,鼠标右键点击先前建立的PostGIS数据库,选择“Refresh”,刷新数据表,如下图:

image

刷新后,可看到前面建立的轨迹段矢量数据表:

image

双击该数据,QGIS会自动将他添加到图层中:

image

 

image

可见,数据中存在不少问题数据点。可思考、设计相应的算法处理掉。

 

This post was modified 9 月 前 by HIFLEET

回复引用
杨春
Eminent Member
已加入: 4 年 前
帖子: 20
Topic starter  

在上面操作的基础上,利用所提供的船舶AIS动态数据识别停船点,停船区域,并可视化(含“火星坐标”纠偏操作)。

一、识别开始停船、结束停船

在pgAdmin 的 Query Tool 窗口中依次执行如下6条SQL语句:

drop table if exists ais_data.stop_begin;
CREATE TABLE if not exists ais_data.stop_begin AS 
	SELECT mmsi, t2 as t_begin
	FROM ais_data.segments
WHERE speed1 >0.1 AND speed2 <=0.1; 	
CREATE INDEX idx_stop_begin_mmsi_t ON ais_data.stop_begin USING btree(mmsi,t_begin);

drop table if exists ais_data.stop_end;
CREATE TABLE if not exists ais_data.stop_end AS 
	SELECT mmsi , t1 as t_end
	FROM ais_data.segments
WHERE speed1 <=0.1 AND speed2 >0.1; 
CREATE INDEX idx_stop_end_mmsi_t ON ais_data.stop_end USING btree(mmsi,t_end);

 

二、创建停船点数据表

在pgAdmin 的Query Tool窗口依次执行如下SQL语句,在Postgresql中创建stops数据表,并且给该表增加center和nb_pos字段,且center字段的数据类型是Geometry。利用update 语句,更新center字段和nb_pos字段的值。

drop table if exists ais_data.stops;
CREATE TABLE if not exists ais_data.stops AS
	SELECT
		mmsi , 
		t_begin , 
		t_end , 
		extract (epoch FROM (t_end-t_begin)) as duration_s
	FROM ais_data.stop_begin INNER JOIN LATERAL (
		SELECT t_end
		FROM ais_data.stop_end
		WHERE stop_begin.mmsi= stop_end.mmsi AND
		t_begin <= t_end 
		ORDER BY t_end LIMIT 1 
	) AS q2 ON (true);
ALTER TABLE ais_data.stops ADD COLUMN center geometry (Point, 4326);
ALTER TABLE ais_data.stops ADD COLUMN nb_pos integer ;

UPDATE ais_data.stops SET (center, nb_pos ) = (
SELECT st_centroid(st_collect(geom)) , 
count(id) as nb
FROM ais_data.dynamic_ships_mini
WHERE mmsi= stops.mmsi AND
t >= stops.t_begin AND t <= stops.t_end
);

 

三、在QGIS中可视化停船点数据并纠偏

按照上述介绍的步骤,打开QGIS软件,并显示地图,展开PostGIS下的数据表。如下图:

image

 

image

由于众所周知的“火星坐标”问题(请自行百度了解有关情况),轨迹点在图上显示时(准确的说,在我国范围内的地图上显示时),会发生偏移现象,如上图,因此需要“纠偏”处理。即,把正确的轨迹点位置“纠偏”到图上的“正确”位置。

可以利用QGIS的相关插件进行。如下:

(1)在QGIS的菜单栏选择“Plugins”  -- Manage and Install Plugins...

image

(2)搜索安装插件“geohey toolbox”

image

(3)安装完毕后,在QGIS的菜单栏中依次选择:“Processing” -- Toolbox 可以在右侧打开工具箱。

在工具箱中寻找并展开Geohey,可以看到该插件下提供了多种转换工具。进行“火星坐标”转换时,选用的工具是"WGS 2 GJC02",如下图。

image

(4)对停船轨迹点数据进行纠偏

image

 

image

纠偏后的效果如下:

image

到这里,对“火星坐标”进行“纠偏”的操作介绍完毕。后续需要纠偏的操作,以此类同不再重复介绍。

 

四、利用Postgresql自带的DBSCAN算法识别计算停船点区域

在pgAdmin的Query Tool中依次执行如下SQL命令:

ALTER TABLE ais_data.stops ADD COLUMN center geometry (Point, 4326);
ALTER TABLE ais_data.stops ADD COLUMN nb_pos integer ;

UPDATE ais_data.stops SET (center, nb_pos ) = (
SELECT st_centroid(st_collect(geom)) , 
count(id) as nb
FROM ais_data.dynamic_ships_mini
WHERE mmsi= stops.mmsi AND
t >= stops.t_begin AND t <= stops.t_end
);

ALTER TABLE ais_data.stops ADD COLUMN avg_dist_centroid numeric ;
ALTER TABLE ais_data.stops ADD COLUMN max_dist_centroid numeric ;

UPDATE ais_data.stops
SET (avg_dist_centroid,max_dist_centroid) =(
SELECT avg(d),max(d)
FROM (
SELECT st_distance (center,geom) as d 
FROM ais_data.dynamic_ships_mini
WHERE mmsi= stops.mmsi AND
t >= stops.t_begin AND t <=stops.t_end -- timestamp range
) as q1);

CREATE INDEX idx_stops_center ON ais_data.stops USING gist(center);

-- 注意:
--(1)0.00045,单位:度,大约是50米。计算方式是 0.00045 = 50/(1852*60)
--(2)5,单位:个,即在这个50米的范围内,轨迹点的数量不小于5个
-- (3)60,单位:秒。即船舶停泊的持续时间不小于1分钟
CREATE TABLE if not exists ais_data.cluster_stops AS
SELECT *,ST_ClusterDBSCAN(center,eps:=0.00045, minpoints:=5) OVER() AS cid
FROM ais_data.stops
WHERE duration_s>=60; 

CREATE TABLE if not exists ais_data.cluster_stops_hulls AS
SELECT cid,
ST_ConvexHull(st_collect(center)) as convex_hull,
ST_MinimumBoundingCircle(st_collect(center)) as bounding_circle,
ST_Centroid(st_collect(center)) as centroid,
count(*) as nb_stops,
sum(nb_pos) as nb_pos, 
count(DISTINCT mmsi ) as nb_ships, 
min(duration_s) as min_dur ,
avg(duration_s) as avg_dur ,
max( duration_s) as max_dur
FROM ais_data.cluster_stops
WHERE cid IS NOT NULL 
GROUP BY cid; 

上述SQL命令,会在Postgresql中创建:

cluster_stops, cluster_stops_hulls 表。

在QGIS中可以可是话上述表中的空间数据字段,如下图所示:

image

需要纠偏的,请参照上述纠偏介绍进行处理。

 

 

 

 

This post was modified 2 年 前 by HIFLEET
This post was modified 9 月 前 2 times by HIFLEET

回复引用
杨春
Eminent Member
已加入: 4 年 前
帖子: 20
Topic starter  

在QGIS上展示类google地图的卫星遥感图层

以下介绍在QGIS上展示类似Google Earth的卫星遥感图层。

image

 

image

在URL栏输入:

https://api.mapbox.com/styles/v1/yangchun/cjpy1gzxd10fi2smh0475aexr/wmts?access_token=pk.eyJ1IjoieWFuZ2NodW4iLCJhIjoiY2lyN2hjd2xmMDAwdWlmbm5yd3dtN2xkNCJ9.ymq4Tyc-aS2M4fRuqFPTKQ

 

image

这个图层没有“火星坐标”问题,不需要用Geohey Toolbox进行“纠偏”转换,可以直接将wgs坐标系下的数据显示在图层上。如下图:

image

回复引用
杨春
Eminent Member
已加入: 4 年 前
帖子: 20
Topic starter  

建议做如下尝试:

1,将安装文件放在其他的文件夹下,比如D盘某个路径下,比如D:/postgres_install_file,安装结束后,可以将该安装文件删除掉;

2,安装文件所在的路径以及数据库安装到的目录,其路径都不要包含中文,比如,在C盘新建目录postgresql,然后安装postgresql时,将Postgresql安装到c:/postgresql 


回复引用
杨春
Eminent Member
已加入: 4 年 前
帖子: 20
Topic starter  

这个报错信息提示数据库不认识“Geometry"这个数据类型。

出现这个错误的原因应该是在安装Postgresql的时候没有同步安装Postgis。

请参考如下链接再安装一下Postgis:

https://blog.csdn.net/LY1201A/article/details/107080664

也可能是没有在PostgreSQL中执行如下命令:

create extension postgis;

This post was modified 9 月 前 by HIFLEET

回复引用
superman
Active Member
已加入: 1 年 前
帖子: 6
 

hello


回复引用
杨春
Eminent Member
已加入: 4 年 前
帖子: 20
Topic starter  

利用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"

文件下载后,可用解压软件解压到本地磁盘。如下图所示的位置:

image

解压完毕,即部署好了一个单节点的Cassandra服务。

 

2,启动服务

使用命令行即可快速启动Cassandra服务。具体步骤如下:

(1)打开命令行窗口,使用CD命令,切换到Cassandra安装路径的bin目录下,如:

cd D:\apache-cassandra-2.1.12\bin

注意:请使用管理员身份打开命令行窗口。

切换到该目录后,可在命令行中直接输入“ cassandra ” 即可完成服务的启动。如下图:

image

在命令行中出现如下信息,表示服务启动成功。

image

 

三、Cassandra客户端

1,客户端软件下载和安装

Cassandra有自带的命令行客户端工具,位于Cassandra安装目录(比如上面截图的:D:\apache-cassandra-2.1.12)下的bin目录和tools/bin 目录下。由于命令行工具不够直观,且需要记住较多的命令和选项参数等,推荐使用具有图形界面的客户端工具软件,例如:DBeaver,下载地址:

https://dbeaver.io/

注:(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”,如下图,即可打开该客户端软件。

image
image

2,连接Cassandra服务

打开客户端软件后,可以建立到cassandra服务的连接,方法如下:

(1)选择“文件” --》New

image

将打开新建对话框:

image

双击“connection”,自动进入下一步。

双击下图中的“Cassandra CQL”,自动进入下一步。

image

由于我们上面启动的Cassandra服务在本机运行,因此在下图所示的Cassandra连接参数中,可以保持默认的选项。如果Cassandra服务安装在位于其他地址的服务器上,则根据具体情况填写下方的参数。

image

一路Next,直到最后一步“Finish connection creation”,可以在下图所示的位置,给新建的数据库连接取个名字,如下图所示,然后点击“Finish”,即可完成新建到Cassandra数据库符的连接。

image

新建连接完成后,在数据库导航栏中可以看到刚才新建的连接:

image

点击“locahost.cassandra”左边的下拉箭头,将会自动连接上面已经启动完毕的cassandra服务,并展开相关的keyspace信息。如下图:

image

 

 

 

 

 

 

This post was modified 1 年 前 2 times by HIFLEET
This post was modified 12 月 前 by HIFLEET
This post was modified 11 月 前 by HIFLEET

回复引用
杨春
Eminent Member
已加入: 4 年 前
帖子: 20
Topic starter  

三、在Cassandra中存储数据

为了能在cassandra中存储数据,需要在数据库系统中建立keyspace和column family。DBeaver 中支持使用cql命令 (一种类似SQL风格的命令)执行相关的操作。

1,建立Keyspace和Column family

首先在DBeaver中打开“SQL编辑器”,如下图:

image

在打开的SQL编辑器的编辑区域中,输入如下命令:

CREATE KEYSPACE ais WITH REPLICATION = { 'class' : 'org.apache.cassandra.locator.SimpleStrategy', 'replication_factor': '1' } AND DURABLE_WRITES = true;

将光标定位到这条命令中的中间任何位置(不能定位到最后的分号的外面),然后执行这条命令,如下图:

image

执行成功后,可以在下方的“Statistics”中看到执行结果,刷新左边的“数据库导航”栏中“Keyspaces”,可以看到刚才创建的keyspace : ais, 如下图:

image

至此,保存数据需要用到的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 下的 表,可以看到刚才创建的这个数据表,如下图。

image

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

如下图:

image

解压后的文件部署情况如下图:

image

注意:ship_trajectory_data-e51bc5f0a6ec11ef8640c3160b659e37 是本帖在实验时,在实验计算机上形成的目录名称,操作人员应该根据本机的实际情况修改。

(2)使用sstableloader导入数据

在命令行,使用cd命令切换到cassandra安装路径的bin目录下,如:

cd D:\apache-cassandra-2.1.12\bin

image

在命令行中输入如下命令:

sstableloader -d localhost "D:\apache-cassandra-2.1.12\data\data\ais\ship_trajectory_data-e51bc5f0a6ec11ef8640c3160b659e37"

特别注意:ship_trajectory_data-e51bc5f0a6ec11ef8640c3160b659e37 是本帖在实验时,在实验计算机上形成的目录名称,操作人员应该根据本机的实际情况修改。

image

执行成功后,界面返回信息如下图:

image

在DBeaver的SQL编辑器的编辑区域内输入如下命令并执行,可以看到导入的数据。

select * from ais.ship_trajectory_data;

image

 

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');

并执行上述命令,执行结果如下图:

image

 

可以在编辑区内再编写查询语句,查询到刚才写入的数据,如:

select * from ais.ship_trajectory_data where ship_mmsi=414726000;

image

 

This post was modified 1 年 前 by HIFLEET

回复引用
杨春
Eminent Member
已加入: 4 年 前
帖子: 20
Topic starter  

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盘目录下,解压后的目录结构如下图所示:

image

 

(2)配置Hadoop

分别打开:/etc/hadoop/ 路径下的:core-site.xml, hdfs-site.xml, mapred-site.xml文件,可参考下图所示,找到上述三个文件,用文本编辑器打开。

image

在打开的core-site.xml文件里,贴入如下代码:

<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>

修改后的该配置文件内容如下图所示:

image

在打开的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>

贴如代码后,文件内容如下图所示:

image

 

在打开的mapred-site.xml文件里,贴入如下代码:

<configuration>
<property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

贴入代码后,文件内容如下图所示:

image

配置完成后,需要配置两个环境变量。如下图:

hadoop_home:

image

path:

image

再下载下方压缩文件并加压,将解压后获得的两个文件:winutils.exe 和 hadoop.dll ,拷贝到c:/windows/system32 目录下:

2,部署HBase

HBase无需安装,解压后经过简单的配置即可启动使用。

例如,将下载后的压缩文件解压后,部署在D盘,目录结构如下所示:

image

 

3,配置HBase

在启动HBase服务前,需要对其进行简单的配置。配置文件在

%HBase_home%conf/hbase-site.xml

如下图:

image

用文本编辑器打开该文件,可见如下图:

image

在参数配置处,需要填入一些属性配置信息,配置信息为:

<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>
 

填写完毕后,配置文件的内容应该为:

image

注意:由于本机实验时,将HBase安装在了 本机的 d:/hbase-1.3.6/ 下,所以上述配置属性的路径均以:d:/hbase-1.3.6/ 开头。请根据实际部署情况修改此处地址。

修改好配置项后,保存好位置文件,即可启动HBase服务。

 

三、HBase的启动和监控

1,启动HBase服务

应该通过命令行启动HBase服务。

首先使用cd 命令,将命令行工作目录切换到HBase安装路径的bin目录下,如下图:

image

在命令行中输入 start-hbase.cmd 命令并回车,即可启动HBase服务,如下图:

image

系统会重新打开一个命令行窗口,该窗口将显示HBase服务的运行信息。如下图:

image

 

2,监控HBase服务的运行情况

当HBase服务启动结束后,可以利用HBase自带的web监控页面,查看服务的运行情况和相关参数。该Web监控服务的默认端口一般为:60010,在本机浏览器中输入如下地址即可打开:

http://localhost:60010

如下图:

image

可以在Web监控页面查看本服务的数据库中的建表情况以及其他运行参数。

 

四、HBase的使用

以下介绍通过HBase自带的shell工具,在HBase中进行数据表的创建,对数据进行操作等。

1,使用shell登入HBase

当HBase正常启动后,可以使用HBase自带的shell工具登入服务。

新打开一个命令行窗口,使用cd命令切换工作目录到HBase安装路径的bin目录下。并输入 hbase shell 命令,并回车,即可登入HBase服务,如下图。

image
image

此时,即可在命令行中输入其他操作指令操作HBase数据库服务。

 

2,在HBase中新建数据表

使用:create命令,可以在HBase中建立数据表。示例命令如下:

create 'dynamic_ships',{NAME => 'fields_family', COMPRESSION => 'GZ'}
 
该命令将在HBase中新建一个名为“dynamic_ships” 的数据表,该数据表有一个名为“fields_family” 列族,在该列族下可以创建多个列。
建表命令执行完毕后,HBase会反馈建表的信息:
image

在HBase的web监控页面,也可以看到此时HBase内已经有了数据表:

image

也可以在命令行里,使用 list 命令查看HBase中有了哪些数据表:

image

使用 describe 命令,可以查看数据表的结构和其他相关参数:

image

3,向数据表中写入数据

在命令行中,可以使用 put 命令,可以向数据表中写入数据。

示例如下:

put 'dynamic_ships','414726000-1567325862','fields_family:t','2019-09-01 1642'
put 'dynamic_ships','414726000-1567325862','fields_family:lon',120.41596
put 'dynamic_ships','414726000-1567325862','fields_family:lat',32.042835
put 'dynamic_ships','414726000-1567325862','fields_family:course',234.2
put 'dynamic_ships','414726000-1567325862','fields_family:speed',7.8
 
上述四条命令,分别表示向上一步建立的数据表“dynamic_ships”,新建一个rowkey为“414726000-1567325862”的一条数据,为该条数据在其 “fields_family” 列族里,分别建立5个列:t,lon,lat,course,speed,并且分别为这5个列赋值:'2019-09-01 1642',120.41596,32.042835,234.2,7.8
 
命令执行完毕后,可以利用 scan 命令,扫描这个表里的数据。特别要注意是,如果当一个表里的数据量非常多时,不建议使用该命令。
image

4,更新数据表中指定rowkey指定列的值

在命令行中,可以使用put命令,指定要更新的rowkey以及列名,更新该rowkey下该列的值。

示例如下:

put 'dynamic_ships','414726000-1567325862','fields_family:lon',130.41596
image
执行完毕后,可以使用scan命令查看更新后的值:
image

也可以使用:

get 'dynamic_ships','414726000-1567325862','fields_family:lon'
查看修改后的值。
 
5,查看指定行的数据
在命令行中,可以使用get命令查看指定行的值,示例命令如下:
get 'dynamic_ships','414726000-1567325862'
 
image

6,参看指定行,指定列的数据

在命令行中,可以使用get命令,查看指定行指定列的值,示例命令如下:

get 'dynamic_ships','414726000-1567325862','fields_family:t'
执行结果如下:
image

7,删除指定行指定列的数据

在命令行中,可以使用 delete 命令删除指定行指定列的数据,

如:

delete 'dynamic_ships','414726000-1567325862','fields_family:speed'
执行结果:
image

使用:

get 'dynamic_ships','414726000-1567325862'

查看执行了删除命令后,该行下的数据:

image

8,删除某一整行的数据

在命令行中,可以使用 deleteall 命令,删除一整个rowkey下的数据,

如:

deleteall 'dynamic_ships','414726000-1567325862'
删除后的执行结果如下图:
image

9,删除整个数据表(此步操作命令供参考,请谨慎操作)

使用disable 和 drop 命令可以将这个数据表删除,

如:

disable 'dynamic_ships'
drop 'dynamic_ships'
执行情况如下图:
image

再使用list命令,可见该表已经被删除,该表下的数据也均被删除。

五、停止HBase服务

在启动HBase的命令行中,输入:stop-hbase.cmd 并回车,将会关闭HBase服务,如下图:

image

 

 
This post was modified 1 年 前 by HIFLEET
This post was modified 12 月 前 by HIFLEET
This post was modified 8 月 前 by HIFLEET
This post was modified 6 月 前 4 times by HIFLEET

回复引用
页 1 / 2

留下回复

Author Name

Author Email

标题 *

文件不超过 100MB

Preview 0 Revisions Saved

 

滚动到顶部