当前位置: 首页 > 工具软件 > PipelineDB > 使用案例 >

PipelineDB流式计算(一)- PipelineDB安装部署

虞修平
2023-12-01

PipelineDB安装部署

系统环境:CentOS 7

安装PostgreSQL

由于PipelineDB作为PostreSQL的扩展运行,所以首先安装PostgreSQL。

# Install the repository RPM:
sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

# Install PostgreSQL:
sudo yum install -y postgresql11-server

PipelineDB目前支持64位架构上的PostgreSQL版本10.1、10.2、10.3、10.4、10.5和11.0。

安装PipelineDB

安装了PostgreSQL后,只需要安装PipelineDB二进制文件,并在PostgreSQL数据库中创建PipelineDB扩展。可以从apt或yum存储库安装二进制文件,也可以从官网的发布页下载包并直接安装。

安装依赖项

除了PostgreSQL数据库,还需要安装ZeroMQ。同时,为了后续实践的便利性,可以安装部分依赖包。

# ZeroMQ
wget  https://github.com/zeromq/libzmq/releases/download/v4.3.2/zeromq-4.3.3.tar.gz
tar -zxvf zeromq-4.3.3.tar.gz
rm -rf zeromq-4.3.3.tar.gz
cd zeromq-4.3.3/
./configure
make && make install

# krb5/psycopg2/libpq
yum install libkrb5-dev python-psycopg2 libpq-dev

安装PipelineDB

yum存储库只需要一次性添加到系统中,之后无需再次运行这些脚本,仅运行安装命令就可以获得PipelineDB的新版本。

wget  https://github.com/pipelinedb/pipelinedb/releases/download/1.0.0-13/pipelinedb-postgresql-11-1.0.0-13.centos7.x86_64.rpm
rpm -ivh pipelinedb-postgresql-11-1.0.0-13.centos7.x86_64.rpm

初始化PostgreSQL

创建postgres用户,及其数据存放目录,并赋予postgres用户该目录访问权限。

useradd postgres
passwd postgres
mkdir /home/postgres
cp -a /etc/skel/.bash* ./postgres
chmod -R 700 postgres
chown postgres:postgres -R postgres

切换当前用户为postgres用户。

su - postgres
cd ~

若出现以下错误提示:

postgres 不在 sudoers 文件中。此事将被报告。

则需要编辑/etc/sudoers,增加postgres用户信息。

# User privilege specification
root    ALL=(ALL:ALL) ALL
postgres    ALL=(ALL:ALL) ALL

通过initdb执行程序,创建新的数据库集簇。

# Optionally initialize the database and enable automatic start:
sudo /usr/pgsql-11/bin/postgresql-11-setup initdb

编辑~/.bash_profile,添加PostgreSQL相关路径至环境变量。

PATH=$PATH:$HOME/.local/bin:$HOME/bin:$PGHOME/bin
export PGHOME=/usr/pgsql-11
export PGDATA=/var/lib/pgsql/11/data

# Reload bash_profile
source ~/.bash_profile

创建PipelineDB扩展

为了让PipelineDB正常运行,必须在postgresql中设置shared_preload_libraries配置参数。将max_worker_processes设置为一个比较大的值,可以为PipelineDB worker进程提供足够的容量。

# At the bottom of /var/lib/pgsql/11/data/postgresql.conf
shared_preload_libraries = 'pipelinedb'
max_worker_processes = 128

若出现以下错误提示:

无法创建锁文件 “/var/run/postgresql/.s.PGSQL.5432.lock”: 权限不够。

则需要为postgres用户授予该目录的访问权限。

chown -R postgres:postgres /var/run/postgresql

启动PostgreSQL数据库,使用pg_ctl驱动程序并将其指向新初始化的数据目录,或者,使用systemctl命令开启PostgreSQL服务。

pg_ctl -D /var/lib/pgsql/11/data -l postgresql.log start
# OR
sudo systemctl enable postgresql-11
sudo systemctl start postgresql-11

要使用默认数据库连接到正在运行的服务器,可以使用PostgreSQL的标准客户端psql,它可以用来创建PipelineDB扩展。

CREATE EXTENSION pipelinedb;

一旦创建了PipelineDB扩展,就可以开始使用PipelineDB了。

默认情况下,PostgreSQL不允许来自远程主机的连接。要启用传入连接,首先在postgresql.conf中设置:

listen_addresses = '*'

添加如下所示的行以允许指定的IP连接(允许从任何主机发起访问):

host    all             all             0.0.0.0/0            md5

快速示例

在这个例子中,我们将计算Wikipedia页面浏览数据的一些基本统计。数据集中的每条记录都包含每个Wikipedia页面每小时的页面视图统计数据。记录格式如下:

hour | project | page title | view count | bytes served

首先,通过SQL语句创建数据流,及其基本统计的连续视图。

-- Stream
CREATE FOREIGN TABLE wiki_stream (
        hour timestamp,
        project text,
        title text,
        view_count bigint,
        size bigint)
SERVER pipelinedb;

-- Continuous View
CREATE VIEW wiki_stats WITH (action=materialize) AS
SELECT hour, project,
        count(*) AS total_pages,
        sum(view_count) AS total_views,
        min(view_count) AS min_views,
        max(view_count) AS max_views,
        avg(view_count) AS avg_views,
        percentile_cont(0.99) WITHIN GROUP (ORDER BY view_count) AS p99_views,
        sum(size) AS total_bytes_served
FROM wiki_stream
GROUP BY hour, project;

通过COPY FROM的方式,将写入STDIN的压缩数据集作为流的数据数据源。由于这个数据集很大,因此curl命令需要运行一段时间。

curl -sL http://pipelinedb.com/data/wiki-pagecounts | gunzip | psql -c "COPY wiki_stream (hour, project, title, view_count, size) FROM STDIN;"

在wiki_stats从输入流wiki_stream摄取数据时,查看连续视图:

postgres=# SELECT * FROM wiki_stats ORDER BY total_views DESC;

        hour         |   project    | total_pages | total_views | min_views | max_views |      avg_views      | p99_views | total_bytes_served 
---------------------+--------------+-------------+-------------+-----------+-----------+---------------------+-----------+--------------------
 2020-11-24 17:20:00 | C-Obj        |           3 |          79 |         9 |        42 | 26.3333333333333333 |     41.79 |               8303
 2020-11-24 17:20:00 | D-Obj        |           2 |          68 |        32 |        36 | 34.0000000000000000 |     35.96 |              15278
 2020-11-24 17:17:00 | A-Obj        |           1 |          46 |        46 |        46 | 46.0000000000000000 |        46 |               2461
 2020-11-24 17:21:00 | B-Obj        |           1 |          41 |        41 |        41 | 41.0000000000000000 |        41 |               9042
 2020-11-24 17:20:00 | E-Obj        |           2 |          22 |         7 |        15 | 11.0000000000000000 |     14.92 |              12590
 2020-11-24 17:20:00 | B-Obj        |           1 |          22 |        22 |        22 | 22.0000000000000000 |        22 |               7331
 2020-11-24 17:21:00 | C-Obj        |           1 |          10 |        10 |        10 | 10.0000000000000000 |        10 |               9132
(7 行记录)

至此,PipelineDB的准备工作告一段落。

 类似资料: