CentOS 7上集群化部署Apache Druid 0.22实时分析数据库(一)

本文涉及的产品
云数据库 PolarDB MySQL 版,列存表分析加速 4核8GB
PolarDB Agent Express,2核4GB
简介: CentOS 7上集群化部署Apache Druid 0.22实时分析数据库

部署准备


Apache Druid依赖深度存储、元数据库和分布式协调器。


深度存储主要是解决数据高可靠问题,也就是说,如果Druid数据节点的持久化数据出现丢失,可以从深度存储中恢复。深度存储可以使用本地文件、Hadoop HDFS、Amazon S3等方式,我们这里选择HDFS。


元数据库存储集群元数据,包括Datasouce、Segments、Supervisors、Tasks、Rules等前期配置元数据与运行期产生的各项元数据。我们可以使用Derby、MySQL、PostgreSQL等方式,我们这里选择PostgreSQL。


分布式协调器是Apache Druid的核心部件,应用于Druid集群不用子服务之间的状态协调。Druid使用的分布式协同器为Zookeeper。


关于CentOS 7、Hadoop HDFS 3、Zookeeper的部署


我们可以在网上找到很多免费文章,帮助你完成这些基础依赖系统的部署,如果仍无法得到解决,可以考虑通过订阅我的CSDN付费专栏,获取最细致的CentOS7、Hadoop3高可用集群及Zookeeper集群的安装文章:


从零开始安装、配置CentOS 7


从零开始部署Hadoop3高可用集群(基于CentOS7,含Zookeeper集群安装)


关于PostgreSQL的安装与配置


我们可以选择MySQL或者PostgreSQL作为元数据库,对于PostgreSQL11的安装,也可以参考:


CentOS7下安装PostgreSQL11数据库


我们需要创建Druid角色数据库:


1. create role druid login password 'YOUR_PASSWORD';
2. create database druid with owner= druid;


部署Druid


硬件配置


Apache Druid是个吃计算资源的巨兽,由于我们首先需要满足的是学习实验需求,因此本次部署旨在探索出集群正常运行并可以进行数据实验的最低硬件配置方案。


硬件宿主机为一台MacBook Pro Intel i7 6核 2.2 GHz,物理内存 16GB,SSD 512GB(USB3.0 外接),运行VMware Fusion 12.0.0,并分配三个虚拟节点,虚拟资源配置如下:


主节点:datanode-1,CPU:2核心,内存:4GB,磁盘最大容量:50GB


数据节点:datanode-2,CPU:2核心,内存:5GB,磁盘最大容量:50GB


查询节点:datanode-3,CPU:2核心,内存:4GB,磁盘最大容量:50GB


总计: CPU 6核心,内存 14GB,磁盘 150GB


从上述资源需求可以看出来,我的Mac笔记本运行起3节点后,基本上占用了大部分的计算资源。不过宿主机依然还能正常工作。


对于实验需求的另外一种方式,可以考虑使用按量计费的云计算服务,最低计算资源需求可以参考上述列表。


部署Druid包和Hadoop配置


首先,进入Apache Druid官网


下载Druid 0.22版本:


https://dlcdn.apache.org/druid/0.22.1/apache-druid-0.22.1-bin.tar.gz


分别解压到datanode-1,datanode-1,datanode-1的/opt目录下,顺便做个软链:


ln -s /opt/apache-druid-0.22.1 /opt/druid


如果当前节点已经安装了Hadoop,那么我们需要使用到Hadoop所在的目录,如果没有安装Hadoop,我们需要从有Hadoop的节点复制Hadoop目录到本机。


分别复制Hadoop目录到datanode-1,datanode-1,datanode-1节点,顺便在/opt目录下做个软链:


ln -s $HADOOP_PARENT_DIR/hadoop-3.3.1 /opt/hadoop


其次,在/opt/druid/hadoop-dependencies/hadoop-client目录下面需要具有Hadoop3.3.1的客户端依赖Jar包集合,那么我就用maven的方式构建出来。

因此最好你的本地配置好Maven环境,具体Maven下载与配置,这里不在赘述。

(1) 构建Maven工程,下面是pom.xml示例,主要是为了配置

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.example</groupId>
    <artifactId>hadoop-client-jar</artifactId>
    <version>1.0-SNAPSHOT</version>
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-client -->
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>3.3.1</version>
        </dependency>
    </dependencies>
</project>

(2) 在$Project目录下执行MVN命令,当前目录下就会生成lib目录

mvn dependency:copy-dependencies -DoutputDirectory=lib


(3) 上传lib目录


scp -r lib root@datanode-1:/opt/druid/hadoop-dependencies/hadoop-client/3.3.1
scp -r lib root@datanode-2:/opt/druid/hadoop-dependencies/hadoop-client/3.3.1
scp -r lib root@datanode-3:/opt/druid/hadoop-dependencies/hadoop-client/3.3.1

也就是说我们在/opt/druid/hadoop-dependencies/hadoop-client目录下面创建了3.3.1子目录,将本地lib目录下面所有的jar复制到了3.3.1目录里面。

最后,我们还需要将Hadoop的配置文件f分别链接到Druid的集群配置目录:

ln -s /opt/hadoop/etc/hadoop/core-site.xml /opt/druid/conf/druid/cluster/_common/
ln -s /opt/hadoop/etc/hadoop/hdfs-site.xml /opt/druid/conf/druid/cluster/_common/
ln -s /opt/hadoop/etc/hadoop/mapred-site.xml /opt/druid/conf/druid/cluster/_common/
ln -s /opt/hadoop/etc/hadoop/yarn-site.xml /opt/druid/conf/druid/cluster/_common/


至此,Hadoop与Druid之间通过配置就衔接上了。


配置Druid集群


在$DRUID_HOME/conf/druid/cluster下面有四个目录,分别是:_common、data、master、query,代表了通用性配置、数据节点配置、主节点配置、查询节点配置。


由于我们是按照最少的硬件资源配置,分配了3个节点,因此,每个节点都只具有1个功能服务。


通用配置,对应了_common目录。


主节点配置:datanode-1,对应master/coordinator-overlord目录,运行coordinator服务、overlord服务。


数据节点配置:datanode-2,对应data/historical,data/middleManager目录,运行historical服务、middleManager服务。


查询节点配置:datanode-3,对应query/broker,query/router目录,运行broker服务、route服务。


1)通用配置


我们先在datanode-1节点上编辑/opt/druid/conf/druid/cluster/_common/common.runtime.properties文件,我将其中需要配置的地方进行列出:

#加入外部扩展项,包括了PostgreSQL元数据库<postgresql-metadata-storage>,HDFS深度存储<druid-hdfs-storage>
#流式摄取<Kafka-indexing-server>,数据流算法库<druid-datasketches>
druid.extensions.loadList=["postgresql-metadata-storage", "druid-hdfs-storage", "druid-kafka-indexing-service", "druid-datasketches"]
#当前Druid节点的主机地址
druid.host=datanode-1
#Hadoop客户端依赖库地址
druid.extensions.hadoopDependenciesDir=/opt/druid/hadoop-dependencies/hadoop-client/3.3.1
#外连Zookeeper集群地址以及Druid在ZK中的基础目录
druid.zk.service.host=datanode-1:2181,datanode-2:2181,datanode-3:2181
druid.zk.paths.base=/druid
#注销derby作为元数据库
#druid.metadata.storage.type=derby
#druid.metadata.storage.connector.connectURI=jdbc:derby://localhost:1527/var/druid/metadata.db;create=true
#druid.metadata.storage.connector.host=localhost
#druid.metadata.storage.connector.port=1527
#启用PostgreSQL作为元数据库
druid.metadata.storage.type=postgresql
druid.metadata.storage.connector.connectURI=jdbc:postgresql://datanode-1:5432/druid
druid.metadata.storage.connector.user=druid
druid.metadata.storage.connector.password=123456
# 注销本地磁盘作为Segments深度存储
#druid.storage.type=local
#druid.storage.storageDirectory=var/druid/segments
# 启用HDFS作为Segments深度存储
druid.storage.type=hdfs
#druid.storage.storageDirectory=/druid/segments
druid.storage.storageDirectory=hdfs://fsnss/druid/segments
# 注销本地磁盘作为Indexing-logs日志存储
#druid.indexer.logs.type=file
#druid.indexer.logs.directory=var/druid/indexing-logs
# 启用HDFS作为Indexing-logs日志存储
druid.indexer.logs.type=hdfs
#druid.indexer.logs.directory=/druid/indexing-logs
druid.indexer.logs.directory=hdfs://fsnss/druid/indexing-logs
#
# 注销安全策略
#
#druid.server.hiddenProperties=["druid.s3.accessKey","druid.s3.secretKey","druid.metadata.storage.connector.password"


完成配置,我们将其分发到其他两个节点的相同位置:


scp /opt/druid/conf/druid/cluster/_common/common.runtime.properties root@datanode-2:/opt/druid/conf/druid/cluster/_common
scp /opt/druid/conf/druid/cluster/_common/common.runtime.properties root@datanode-3:/


需要注意的是:我们必须在另外两个节点中编辑common.runtime.properties文件,修改druid.host,等于当前节点的主机地址。


2)主节点配置

我们依旧在datanode-1节点进行主节点配置,将datanode-1打造成主节点,主要运行coordinator和overlord服务,目前两者已经整合为一个服务进程。前者主要协调Segments的深度存储,后者主要接收新任务提交与协调任务下发。


其实主要是对内存的限制调整,保证Druid启动时不会因为内存不够而导致启动和运行失败。

vi /opt/druid/conf/druid/cluster/master/coordinator-overlord/jvm.config


如下参考配置:

-server
-Xms1g
-Xmx2g
-XX:+ExitOnOutOfMemoryError
-XX:+UseG1GC
-Duser.timezone=UTC
-Dfile.encoding=UTF-8
-Djava.io.tmpdir=var/tmp
-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager
-Dderby.stream.error.file=var/druid/derby.log


XMs最小堆内存设置为1GB,XMx最大堆内存设置为2GB

vi /opt/druid/conf/druid/cluster/master/coordinator-overlord/runtime.properties

如下参考配置:

druid.service=druid/coordinator
druid.plaintextPort=18081
druid.coordinator.startDelay=PT10S
druid.coordinator.period=PT5S
# Run the overlord service in the coordinator process
druid.coordinator.asOverlord.enabled=true
druid.coordinator.asOverlord.overlordService=druid/overlord
druid.indexer.queue.startDelay=PT5S
druid.indexer.runner.type=remote
druid.indexer.storage.type=metadata


修改了coordinator端口,改为18081,主要是在实验环境,防止与其他应用端口冲突,若独立部署,则不存在问题。


3)数据节点配置


我们登陆datanode-2节点,进行数据节点配置,将datanode-2打造成数据节点,主要运行historical服务和middleManager服务,前者主要负责已经是历史数据的Segment的管理,后者主要负责新摄取数据的任务管理。


我们先开始配置historical:

vi /opt/druid/conf/druid/cluster/data/historical/jvm.config


如下参考配置:

-server
-Xms1g
-Xmx2g
-XX:MaxDirectMemorySize=3g
-XX:+ExitOnOutOfMemoryError
-Duser.timezone=UTC
-Dfile.encoding=UTF-8
-Djava.io.tmpdir=var/tmp
-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager

XMs最小堆内存设置为1GB,XMx最大堆内存设置为2GB,最大非堆内存设置为3GB

vi /opt/druid/conf/druid/cluster/data/historical/runtime.properties

如下参考配置:

druid.service=druid/historical
druid.plaintextPort=18083
# HTTP server threads
druid.server.http.numThreads=60
# Processing threads and buffers
druid.processing.buffer.sizeBytes=250MiB
druid.processing.numMergeBuffers=2
druid.processing.numThreads=5
druid.processing.tmpDir=var/druid/processing
# Segment storage
druid.segmentCache.locations=[{"path":"var/druid/segment-cache","maxSize":"20g"}]
# Query cache
druid.historical.cache.useCache=true
druid.historical.cache.populateCache=true
druid.cache.type=caffeine
druid.cache.sizeInBytes=256MiB
相关文章
|
10月前
|
存储 关系型数据库 数据库
附部署代码|云数据库RDS 全托管 Supabase服务:小白轻松搞定开发AI应用
本文通过一个 Agentic RAG 应用的完整构建流程,展示了如何借助 RDS Supabase 快速搭建具备知识处理与智能决策能力的 AI 应用,展示从数据准备到应用部署的全流程,相较于传统开发模式效率大幅提升。
附部署代码|云数据库RDS 全托管 Supabase服务:小白轻松搞定开发AI应用
|
10月前
|
数据可视化 BI API
无缝对接云数据库:自定义报表生成工具在混合云环境下的部署指南
自定义报表生成工具通过拖拽设计、多数据源整合及自动化输出,帮助业务人员零代码创建个性化报表,解决传统工具灵活性不足、技术门槛高的问题。文章对比其与传统报表差异,列举行业应用场景(如财务、零售),并给出选型建议与主流工具(如FineReport、Power BI、板栗看板)的优劣势分析。
351 0
|
12月前
|
关系型数据库 MySQL 数据库
【赵渝强老师】数据库不适合Docker容器化部署的原因
本文介绍了在Docker中部署MySQL数据库并实现数据持久化的方法,同时分析了数据库不适合容器化的原因。通过具体步骤演示如何拉取镜像、创建持久化目录及启动容器,确保数据安全存储。然而,由于数据安全性、硬件资源争用、网络带宽限制及额外隔离层等问题,数据库服务并不完全适合Docker容器化部署。文中还提到数据库一旦部署通常无需频繁升级,与Docker易于重构和重新部署的特点不符。
550 19
【赵渝强老师】数据库不适合Docker容器化部署的原因
|
Linux 网络安全 开发工具
centos7部署l2tp ipsec
1、查询操作系统版本 #cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) 2、查询系统是否支持ppp,返回yes代表通过。 #modprobe ppp-compress-18 && echo yes 3、查询系统是否开启了tun,返回File descriptor in bad state代表通过。
8923 0
|
9月前
|
存储 Ubuntu Linux
VMware-安装CentOS系统教程及安装包
虚拟机相当于是一个独立于你电脑的环境,在这个环境上面,你可以安装Linux、Windows、Ubuntu等各个类型各个版本的系统,在这个系统里面你不用担心有病读等,不用担心文件误删导致系统崩溃。 虚拟机也和正常的电脑系统是一样的,也可以开关机,不用的时候,你关机就可以了,也不会占用你的系统资源,使用起来还是比较方便 这里也有已经做好的CentOS 7系统,下载下来解压后直接用VMware打开就可以使用
1471 69
|
8月前
|
存储 分布式计算 Linux
安装篇--CentOS 7 虚拟机安装
VMware 装 CentOS 7 不知道从哪下手?这篇超详细图文教程手把手教你在 VMware Workstation 中完成 CentOS 7 桌面系统的完整安装流程。从 ISO 镜像下载、虚拟机配置,到安装图形界面、设置用户密码,每一步都有截图讲解,适合零基础新手快速上手。装好之后无论你是要搭 Hadoop 集群,还是练 Linux ,这个环境都够你折腾一整天!
3364 3
|
9月前
|
Ubuntu Linux 索引
Centos 7、Debian及Ubuntu系统中安装和验证tree命令的指南。
通过上述步骤,我们可以在CentOS 7、Debian和Ubuntu系统中安装并验证 `tree`命令。在命令行界面中执行安装命令,然后通过版本检查确认安装成功。这保证了在多个平台上 `tree`命令的一致性和可用性,使得用户无论在哪种Linux发行版上都能使用此工具浏览目录结构。
768 78
|
10月前
|
Linux 网络安全 Apache
针对在Centos/Linux安装Apache过程中出现的常见问题集锦
以上每个问题的解决方案应深入分析错误日志、系统消息和各种配置文件,以找到根本原因并加以解决。务必保持系统和Apache软件包更新到最新版本,以修复已知的bugs和安全漏洞。安装和管理Web服务器是一项需要细致关注和不断学习的任务。随着技术的发展,推荐定期查看官方文档和社区论坛,以保持知识的更新。
369 80
|
8月前
|
安全 关系型数据库 MySQL
CentOS 7 yum 安装 MySQL教程
在CentOS 7上安装MySQL 8,其实流程很清晰。首先通过官方Yum仓库来安装服务,然后启动并设为开机自启。最重要的环节是首次安全设置:需要先从日志里找到临时密码来登录,再修改成你自己的密码,并为远程连接创建用户和授权。最后,也别忘了在服务器防火墙上放行3306端口,这样远程才能连上。
1958 16

推荐镜像

更多