搭建HBase+Phoenix大数据平台

一、大数据平台的技术选择

  1. HBase技术

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

image

HBase的特点

  1. 海量数据存储,HBase中的表可以容纳上百亿行x上百万列的数据。
  2. 列式存储,HBase中的数据是基于列进行存储的,能够动态的增加和删除列。
  3. 准实时查询,HBase在海量的数据量下能够接近准实时的查询(百毫秒以内)
  4. 多版本,HBase中每一列的数据都有多个版本。
  5. 高可靠性,HBase中的数据存储于HDFS中且依赖于Zookeeper进行Master和RegionServer的协调管理。

HBase虽然支持表结构,但是操作起来并不方便。例如下面是个学生表,里面包含了若干的字段。

image

如果我们给学生表添加新的记录,就需要执行下面的命令。

put 'Student', '0001', 'Stulnfo:Name', 'Tom Green', 1

想要获取数据的时候,我们执行get命令就可以了。

get 'student', '0001'

对于我们平时习惯SQL语句的人来说,上面的命令如果简单还行,要是叠加上复杂的条件和函数,那么阅读性就非常差,所以我们要引入Phoenix技术。

scan 'mytest:test01',FILTER=>"RowFilter(=,'substring:202006')",LIMIT=>1
count 'mytest:test01',FILTER=>"RowFilter(=,'substring:202004')",INTERVAL=>10000
  1. Phoenix技术

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

image

二、部署HBase与Phoenix

  1. 导入镜像文件

https://pan.baidu.com/s/1J6f2SZwLOSjO0gbZZXDLBg?pwd=33sf

docker load < phoenix.tar.gz
  1. 创建容器

因为镜像中已经包含和HBase和Phoenix,所以我们只需要创建出容器即可。由于HBase需要使用的内存较大,这里我没有规定具体的内存大小,容器会自动使用空闲的内存。容器中数据目录是/tmp/hbase-root/hbase/data,我把这个目录映射到宿主机的/root/hbase/data目录。

docker run -it -d -p 2181:2181 -p 8765:8765 -p 15165:15165 \
-p 16000:16000 -p 16010:16010 -p 16020:16020 \
-v /root/hbase/data:/tmp/hbase-root/hbase/data \
--name phoenix --net mynet --ip 172.18.0.14 \
boostport/hbase-phoenix-all-in-one:2.0-5.0
  1. 开放端口

我们要把Linux的2181、8765、15165、16000、16010、16020端口,映射到Windows的相应端口上面。

image

  1. 初始化Phoenix

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

docker exec -it phoenix bash

export HBASE_CONF_DIR=/opt/hbase/conf/

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

/opt/phoenix-server/bin/sqlline.py localhost

三、创建逻辑库和数据表

  1. 创建逻辑库

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

CREATE SCHEMA hxds;

USE hxds;
  1. 创建数据表

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

CREATE TABLE hxds.order_voice_text(
    "id" BIGINT NOT NULL PRIMARY KEY, 
    "uuid" VARCHAR,
    "order_id" BIGINT,
    "record_file" VARCHAR,
    "text" VARCHAR,
    "label" VARCHAR,
    "suggestion" VARCHAR,
    "keywords" VARCHAR,
    "create_time" DATE
);


CREATE SEQUENCE hxds.ovt_sequence START WITH 1 INCREMENT BY 1;

CREATE INDEX ovt_index_1 ON hxds.order_voice_text("uuid");
CREATE INDEX ovt_index_2 ON hxds.order_voice_text("order_id");
CREATE INDEX ovt_index_3 ON hxds.order_voice_text("label");
CREATE INDEX ovt_index_4 ON hxds.order_voice_text("suggestion");
CREATE INDEX ovt_index_5 ON hxds.order_voice_text("create_time");

order_monitoring表存储AI分析对话内容的安全评级结果。

CREATE TABLE hxds.order_monitoring
(
    "id"          BIGINT NOT NULL PRIMARY KEY,
    "order_id"    BIGINT,
    "status"      TINYINT,
    "records"     INTEGER,
    "safety"       VARCHAR,
    "reviews"     INTEGER,
    "alarm"       TINYINT,
    "create_time" DATE
);

CREATE INDEX om_index_1 ON hxds.order_monitoring("order_id");
CREATE INDEX om_index_2 ON hxds.order_monitoring("status");
CREATE INDEX om_index_3 ON hxds.order_monitoring("safety");
CREATE INDEX om_index_4 ON hxds.order_monitoring("reviews");
CREATE INDEX om_index_5 ON hxds.order_monitoring("alarm");
CREATE INDEX om_index_6 ON hxds.order_monitoring("create_time");

CREATE SEQUENCE hxds.om_sequence START WITH 1 INCREMENT BY 1;

order_gps表保存的时候代驾过程中的GPS定位。

CREATE TABLE hxds.order_gps(
    "id" BIGINT NOT NULL PRIMARY KEY, 
    "order_id" BIGINT,
    "driver_id" BIGINT,
    "customer_id" BIGINT,
    "latitude" VARCHAR,
    "longitude" VARCHAR,
    "speed" VARCHAR,
    "create_time" DATE
);

CREATE SEQUENCE hxds.og_sequence START WITH 1 INCREMENT BY 1;

CREATE INDEX og_index_1 ON hxds.order_gps("order_id");
CREATE INDEX og_index_2 ON hxds.order_gps("driver_id");
CREATE INDEX og_index_3 ON hxds.order_gps("customer_id");
CREATE INDEX og_index_4 ON hxds.order_gps("create_time");

四、配置JDBC驱动

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

image

posted @ 2026-01-14 17:01  hwq1992  阅读(0)  评论(0)    收藏  举报