当前位置:   article > 正文

搭建HBase + Phoenix大数据平台_docker load < phoenix.tar.gz

docker load < phoenix.tar.gz

一、介绍   

        因为代驾过程中,需要保存驾驶途中的 GPS 定位,将来计算代驾真实里程的时候,就需要用到这些坐标点。那么这些定位点保存在 MySQL 中可以吗?当然不行,MySQL 单表记录超过两千万就卡的不行。那么保存在 MongoDB 中可以吗?也不行,因为 MongoDB 里面的条件查询真的是超级蹩脚,所以想要用复杂条件检索数据,还是打消用 MongoDB 的念头吧。

        除了 GPS 定位数据之外,还要把代驾过程中的聊天对话的文字内容保存起来。这么看来,我们需要一个既能保存海量数据,又能支持复杂条件检索的数据存储平台。HBase就再合适不过了。

        HBase是一个分布式、版本化、面向列的开源数据库。构建在 Apache Hadoop 和 Apache ZooKeeper 之上。HBase 是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统。利用 HBase 技术可在廉价的 PC server 上搭建大规模结构化存储集群。HBase 不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库,HBase 是基于列的,而不是基于行的模式。

        HBase特点:准实时查询(百豪秒以内);高可靠性,数据存储于HDFS中且依赖于 ZooKeeper进行 Master 和 RegionServer 的协调管理。

        HBase的操作语句很难写。

        Phoenix 是给 HBase 添加了一个语法表示层,允许我们用 SQL 语句读写 HBase 中的数据,可以做联机事务处理。拥有低延迟的特性,这就让我们方便多了。Phoenix 会把 SQL 编译成一系列的 HBase 的 scan 操作,然后把 scan 结果生成标准的 JDBC 结果集。处理千万级行的数据也只用毫秒或秒级就搞定。而且 Phoenix 还支持 MyBatis 框架,正好可以和华夏代驾项目整合到一起。

二、部署 HBase 和 Phoenix

1. 倒入镜像文件

        首先找到 HBase.tar.gz phoenix.tar.gz 镜像文件,然后把这个文件上传到 CentOS系统中,执行命令,把镜像文件导入 Docker 之中。

docker load < phoenix.tar.gz

2. 创建容器

        由于 HBase 需要使用的内存较大,这里我没有规定具体的内存大小,容器会自动使用空闲的内存。容器中数据目录是 /tmp/hbase-root/hbase/data ,把这个目录映射到宿主机的 /root/hbase/data 目录。

  1. docker run -it -d -p 2181:2181 -p 8765:8765 -p 15165:15165 \
  2. -p 16000:16000 -p 16010:16010 -p 16020:16020 \ #映射端口
  3. -v /root/hbase/data:/tmp/hbase-root/hbase/data \ #映射文件
  4. --name phoenix --net mynet --ip 172.18.0.14 \ #分配网络
  5. boostport/hbase-phoenix-all-in-one:2.0-5.0 #镜像名字

 3. 开放端口

        使用 VirtualBox 软件把 Linux 的 2181、8765、15165、16000、16010、16020端口,映射到 Windows 的相应端口上面。

        参考链接:https://blog.csdn.net/qq_32077121/article/details/125908114

4. 初始化Phoenix

        运行命令,进入到 Phoenix 容器中,然后执行命令设置 HBASE_CONF_DIR 环境变量。

  1. docker exec -it phoenix bash
  2. export HBASE_CONF_DIR=/opt/hbase/conf/

 然后就可以使用 Phoenix 自带的命令行客户端通过 SQL 语句操作 HBase数据。

        接下来我们要连接 Phoenix 的命令行客户端。虽然 IDEA 也内置了Phoenix 客户端,但是 Bug 挺多的,用着不方便。所以建议大家使用 Phoenix 自带的命令行客户端更好一些。而且我们要执行的 SQL 语句也并不多,命令行客户端已经足够用了。

  1. /opt/phoenix-server/bin/sqlline.py localhost
  2. #调用 Phoenix 自带的命令行客服端

三、创建逻辑库和数据表

1. 创建逻辑库

        为了存储数据,我们需要像操作 MySQL 一样,先创建逻辑库,再定义数据表。在 Phoenix 的命令行客户端,我们先来执行创建逻辑库的命令。

  1. CREATE SCHEMA hxds #创建
  2. USE hxds #切入

2. 创建数据表

        接下来我们要创建 order_voice_text、order_monitoring 和 order_gps 数据表。其中 order_voice_text 表用于存放司乘对话内容的文字内容;

  1. CREATE TABLE hxds.order_voice_text(
  2. "id" BIGINT NOT NULL PRIMARY KEY, #只能主键加 NOT NULL
  3. "uuid" VARCHAR,
  4. "order_id" BIGINT,
  5. "record_file" VARCHAR,
  6. "text" VARCHAR,
  7. "label" VARCHAR,
  8. "suggestion" VARCHAR,
  9. "keywords" VARCHOR,
  10. "create_time" DATE
  11. );
  12. # ovt 为 order_voice_text 的缩写
  13. #创建自增长的序列
  14. CREATE SEQUENCE hxds.ovt_sequence START WITH 1 INCREMENT BY 1;
  15. #给字段创建索引
  16. CREATE INDEX ovt_index_1 ON hxds.order_voice_text("uuid");
  17. CREATE INDEX ovt_index_2 ON hxds.order_voice_text("order_id");
  18. CREATE INDEX ovt_index_3 ON hxds.order_voice_text("label");
  19. CREATE INDEX ovt_index_4 ON hxds.order_voice_text("suggestion");
  20. CREATE INDEX ovt_index_5 ON hxds.order_voice_text("create_time");

        order_monitoring 表存储 AI 分析对话内容的安全评级结果。命令类似于上面。

        order_gps 表存储代驾过程中的 GPS 定位。命令类似于上面。

  1. #演示查询语句
  2. SELECT * FROM hxds.order_gps;
  3. SELECT * FROM hxds.order_gps WHERE "id"=9527;

 四、编写 hxds-nebula 子系统

        先来看一下 hxds-nebula 子系统的 application.yml 文件,里面的 JDBC 驱动和 URL 路径都是为了连接 Phoenix 的。如果你用的是云主机,别忘了 URL 要写云主机的 IP,而且还要在安全组里面把相关端口开放一下。

  1. datasource:
  2. #驱动类
  3. driver-class-name: org.apache.phoenix.queryserver.client.Driver
  4. url: jdbc:phoenix:thin:url=http://127.0.0.1:8765;serialization=PROTOBUF
  5. type: com.alibaba.druid.pool.DruidDataSource
  6. druid:
  7. test-on-borrow: true
  8. test-while-idle: true
  9. max-active: 8
  10. min-idle: 4

1. 定义 POJO 类

        既然要用 MyBatis 连接 Phoenix,那么持久层的 POJO 类、DAO 接口和 XML 文件都要配齐了才可以。在 com.example.hxds.nebula.db.pojo 包中,创建3个 POJO 类。如下:

  1. @Data
  2. public class OrderMonitoringEntity {
  3. private Long id;
  4. private Long orderId;
  5. private Byte status;
  6. private Integer records;
  7. private String safety;
  8. private Integer reviews;
  9. private Byte alarm;
  10. private String createTime;
  11. }

2. 定义 DAO 接口

        在 com.example.hxds.nebula.db.dao 包中,声明3个 DAO 接口。如下:

  1. public interface OrderGpsDao {
  2. public int insert(OrderVoiceTextEntity entity)
  3. }

3. 定义 XML 文件

        在 resources 目录中创建 mapper 文件夹,定义3个 XML 文件。如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="com.example.hxds.nebula.db.dao.OrderGpsDao">
  6. <insert id="insert" parameterType="com.example.hxds.nebula.db.pojo.OrderVoiceTextEntity">
  7. UPSERT INTO hxds.order_voice_text("id", "uuid", "order_id", "record_file", "text", "create_time")
  8. VALUES(NEXT VALUE FOR hxds.ovt_sequence, '${uuid}', #{orderId}, '${recordFile}', '${text}', NOW())
  9. </INSERT>
  10. </mapper>

4. 运行子系统

        上述内容都配置完成之后,就可以启动 hxds-nebula 子系统了,如果控制台没有报错信息,说明配置都是正确的。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/462435
推荐阅读
相关标签
  

闽ICP备14008679号