系统环境:CentOS 7
由于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。
安装了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
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
创建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正常运行,必须在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的准备工作告一段落。