druid集群安装

本文档详细介绍了Druid集群的安装步骤和配置过程,包括下载安装、配置信息、启动服务、查看服务状态以及解决常见问题。涉及的配置文件包括common.runtime.properties、jvm.config和runtime.properties等,涉及的角色包括historical、MiddleManager、broker、coordinator和overlord。在配置过程中,需要注意MySQL服务的设置、HDFS的依赖以及时区和版本兼容性问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.下载安装(以下操作均需在所有节点执行)

  1. 创建/opt/druid目录作为安装目录。
  2. 下载最新版本druid wget http://static.druid.io/artifacts/releases/druid-0.12.3-bin.tar.gz
  3. 解压下载后的文件并重命名为druid tar -zxvf druid-0.12.3-bin.tar.gz;mv druid-0.12.3 druid
  4. 配置环境变量,在~/.bashrc中配置export DRUID_HOME=/opt/druid 添加至path ,source ~/.bashrc

二.配置信息

由于Druid各个节点角色不一样,只能分别配置。Druid配置文件目录比较清晰,各个节点进程启动只会读自己配置目录中的配置文件。

目录结构:

  • bin目录:存放启动停止druid服务的脚本
  • conf:配置信息
  • extensions:各种场景外部组件需要用到的jar包依赖
  • quickstart:快速测试案例

1.公共配置:

公共配置在部署目录的conf/druid/_common中,我们先配置common.runtime.properties文件。主要列出重要的配置,其他配置保留默认即可。

配置两个启动加载的扩展。一个是HDFS存储,一个是MySQL元数据。根据上文提到的部署环境来。

druid.extensions.loadList=["druid-hdfs-storage","mysql-metadata-storage"]

配置Zookeeper访问URL。

druid.zk.service.host=vubuntuez1:2181,vcentosez2:2181,vdebianez3:2181
druid.zk.paths.base=/druid

配置MYSQL 相关信息。

druid.metadata.storage.type=mysql
druid.metadata.storage.connector.connectURI=jdbc:mysql://data-237:3306/druid
druid.metadata.storage.connector.user=root
druid.metadata.storage.connector.password=innotech

配置底层存储。路径是HDFS路径。

druid.storage.type=hdfs
druid.storage.storageDirectory=/druid/segments

配置indexing服务的日志存储路径,下面的路径是HDFS路径。

druid.indexer.logs.type=hdfs
druid.indexer.logs.directory=/druid/indexing-logs

由于我们需要访问HDFS,Druid需要将Hadoop的配置文件配置到Classpath,这步骤是启动脚本完成的,我们只需要将HDFS配置文件复制到conf/druid/_common/目录下即可。hdfs-site.xml,core-site.xml,mapred-site.xml,yarn-site.xml四个配置文件。

2.historical配置:

配置文件在conf/druid/historical,先配置jvm.config,再配置runtime.properties。

a.jvm.config配置

-server
-Xms256m
-Xmx2g
-XX:MaxDirectMemorySize=1024m
-Duser.timezone=UTC+8
-Dfile.encoding=UTF-8
-Djava.io.tmpdir=/root/druid/druid-data/tmpdir
-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager

每个配置项一行即可,java.io.tmpdir路径手动创建出来。说说内存配置。这个关乎是否能正常运行。-Xms,初始堆内存大小,设置了256M,-Xmx,最大堆内存大小,设置了2g。historical节点将在4G内存的data-241节点运行. 有个参数是MaxDirectMemorySize,有个公式:

druid.processing.buffer.sizeBytes*(druid.processing.numThreads+1+druid.processing.numMergeBuffers) <= MaxDirectMemorySize

而MaxDirectMemorySize不能大于Xmx。公式左边的参数都在runtime.properties文件中配置。如果提交任务时出现

Not enough direct memory. Please adjust -XX:MaxDirectMemorySize, druid.processing.buffer.sizeBytes, druid.processing.numThreads, or druid.processing.numMergeBuffers

可以通过减少druid.processing.buffer.sizeBytes 来解决

b.runtime.properties配置

druid.service=druid/historical
druid.port=8083
# HTTP server threads
druid.server.http.numThreads=2
# Processing threads and buffers
druid.processing.buffer.sizeBytes=67108864
druid.processing.numThreads=1
# Segment storage
druid.segmentCache.locations=[{"path":"/opt/druid/druid-data/segment cache","maxSize":130000000000}]
druid.server.maxSize=130000000000

大部分配置项我们可以不用管,主要配置的是内存部分和线程。druid.server.http.numThreads,配置了2,可以配置更多,但与内存有很大关系,我们的内存并没有这么大。还得根据上面提到的公式限制MaxDirectMemorySize。另外,数据段存储(Segment storage)部分的缓存路径请手动创建出来,这部分存储在磁盘,注意磁盘大小。

3.MiddleManager配置

配置文件在conf/druid/middleManager/路径下,两个配置文件,和historical一样。

a. jvm.config配置

-server
-Xms256m
-Xmx256m
-Duser.timezone=UTC+8
-Dfile.encoding=UTF-8
-Djava.io.tmpdir=/opt/druid/druid-data/tmpdir
-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager

b. runtime.properties配置

druid.service=druid/middleManager
druid.port=8091

# Number of tasks per middleManager
druid.worker.capacity=3

# Task launch parameters
druid.indexer.runner.javaOpts=-server -Xmx512m -Duser.timezone=UTC+8 -Dfile.encoding=UTF-8 -Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager
druid.indexer.task.baseTaskDir=/opt/druid/druid-data

# HTTP server threads
druid.server.http.numThreads=5

# Processing threads and buffers on Peons
druid.indexer.fork.property.druid.processing.buffer.sizeBytes=67108864
druid.indexer.fork.property.druid.processing.numThreads=1

# Hadoop indexing
druid.indexer.task.hadoopWorkingPath=/opt/druid/druid-data
druid.indexer.task.defaultHadoopCoordinates=["org.apache.hadoop:hadoop-client:2.7.3"]

注意几个内存和线程的配置,保证上面提到的公式。还有一个task launch参数,是创建indexer task时所配置的虚拟机参数。indexer task很像MapReduce的task,每个任务都会产生一个虚拟机。Druid强大之处也是实现了自己的分布式计算框架。大部分配置都可以不用修改。这里我们用的hadoop-client是2.7.3。 我们的测试hdfs环境是2.7.6,这里不能更改。

4、broker配置

配置文件在conf/druid/broker。

a. jvm.config配置

-server
-Xms256m
-Xmx2048m
-XX:MaxDirectMemorySize=1024m
-Duser.timezone=UTC+8
-Dfile.encoding=UTF-8
-Djava.io.tmpdir=/opt/druid/druid-data/tmpdir
-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager

b. runtime.properties配置

druid.service=druid/broker
druid.port=9001

# HTTP server threads
druid.broker.http.numConnections=1
druid.server.http.numThreads=5

# Processing threads and buffers
druid.processing.buffer.sizeBytes=67108864
druid.processing.numThreads=1

# Query cache
druid.broker.cache.useCache=true
druid.broker.cache.populateCache=true
druid.cache.type=local
druid.cache.sizeInBytes=2000000000

5、coordinator配置

配置文件在conf/druid/coordinator/。

a. jvm.config配置

-server
-Xms512m
-Xmx1024m
-Duser.timezone=UTC+8
-Dfile.encoding=UTF-8
-Djava.io.tmpdir=/opt/druid/druid-data/tmpdir
-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager
-Dderby.stream.error.file=/opt/druid/derby.log

b. runtime.properties配置

druid.service=druid/coordinator
druid.port=9002

druid.coordinator.startDelay=PT30S
druid.coordinator.period=PT30S

6、overlord配置

配置文件在conf/druid/overlord/配置文件。

a. jvm.config配置

-server
-Xms512m
-Xmx1024m
-Duser.timezone=UTC+8
-Dfile.encoding=UTF-8
-Djava.io.tmpdir=/opt/druid/druid-data/tmpdir
-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager

b. runtime.properties配置

druid.service=druid/overlord
druid.port=9003

druid.indexer.queue.startDelay=PT30S

druid.indexer.runner.type=remote
druid.indexer.storage.type=metadata

7、MySQL服务配置

创建druid数据库,并且允许远程访问

CREATE DATABASE druid DEFAULT CHARACTER SET utf8;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'innotech' WITH GRANT OPTION;
FLUSH   PRIVILEGES;

三。启动服务

  1. 登录data-237执行: overlord.sh start (统治节点)

启动overlord服务。 overlord.sh脚本内容:

cd $(dirname $0)/../
sh ./bin/node.sh overlord $1

通过node.sh 这个脚本进行启动

node.sh 脚本内容主要分为两部分 start 和 stop

start主要内容为:

nohup $JAVA `cat $CONF_DIR/$nodeType/jvm.config | xargs` -cp $CONF_DIR/_common:$CONF_DIR/$nodeType:$LIB_DIR/*:$HADOOP_CONF_DIR io.druid.cli.Main server $nodeType >> $LOG_DIR/$nodeType.log 2>&1 &

所以也可以通过这种命令进行启动;

stop主要是记录 pid通过kill 命令停止各个进程,其他脚本类似

2.登录data-238执行:coordinator.sh start (协调节点)

3.登录data-239执行:broker.sh start (查询节点)

4.登录data-241执行: historical start (历史节点)middlemanager.sh start (中间管理者)

四。查看服务

分别在各个节点启动相应的进程,启动完成后,查看log中的日志,各个进程的日志对应名字相同。若能运行稳定,没有抛出异常,则启动成功,我们可以查看Web的UI界面。

登录data-237:9003查看统治节点是否启动成功

登录data-238:9002查看协调节点是否启动成功

需要开放一下端口才能本地访问,

9002 (Coordinator)
9001 (Broker)
8083 (Historical)
8084 (Standalone Realtime, 暂未测试)
8088 (Router, 暂未测试)
9003 (Overlord)
8091 (Druid Middle Manager)

8100–8199 这些端口号是middleManager开启作业时各个作业自己的端口号,端口号上限取决于druid.worker.capacity。
8200 (Tranquility Server, 暂未测试)

五。遇到的问题

1.配置_common类时如果配置了mysql :

druid.extensions.loadList=["druid-hdfs-storage","mysql-metadata-storage"]

需要下载

wget http://static.druid.io/artifacts/releases/mysql-metadata-storage-0.12.3.tar.gz

并且解压到 druid/extensions目录下生成 mysql-metadata-storage文件夹。否则抛异常,因为druid默认没有添加mysql的连接驱动。

2.设置时区问题。

druid中 默认是utc时区需要和hadoop 以及本地时区一致。所以在配置各个文件的时候需要在utc处更改为 utc+8;否则会报 No buckets?? seems there is no data to index. 异常。

3.在从Hadoop导入数据到DRUID时出现了问题

 com.google.inject.util.Types.collectionOf(Ljava/lang/reflect/Type;)Ljava/lang/reflect/ParameterizedType

DRUID依赖的谷歌的guice的版本与hadoop的版本冲突,解决办法:

cp $DRUID_HOME/lib/*guice* $HADOOP_HOME/share/hadoop/yarn/lib/
cp $DRUID_HOME/lib/*guice* $HADOOP_HOME/share/hadoop/mapreduce/lib/

会出现新的异常:

com.google.common.primitives.Longs.tryParse(Ljava/lang/String;)Ljava/lang/Long;

原因跟上面一样,Druid需要guava-16.0.1.jar,而Hadoop中只有guava-11.0.2.jar。将Druid中的guava-16.0.1.jar复制到Hadoop中。

cp $DRUID_HOME/lib/guava-16.0.1.jar $HADOOP_HOME/share/hadoop/yarn/lib/
cp $DRUID_HOME/lib/guava-16.0.1.jar $HADOOP_HOME/share/hadoop/common/lib/
cp $DRUID_HOME/lib/guava-16.0.1.jar $HADOOP_HOME/share/hadoop/hdfs/lib/

如果还是出现此异常 需要在摄入数据的json文件中的job.properties 添加

mapreduce.job.user.classpath.first = true 

官方解释为:

Druid使用了许多可能存在于Hadoop集群中的库,如果这些库发生冲突,Map / Reduce作业可能会失败。启用classloader 可以避免此问题 mapreduce.job.classloader = true。这指示Druid依赖项和Hadoop自己的依赖项使用单独的类加载器。

如果您的Hadoop版本不支持此功能,您还可以尝试设置该属性 mapreduce.job.user.classpath.first = true。这指示Hadoop在发生冲突时加载Druid的库。

通常,您应该只设置其中一个参数,而不是两者。

可以使用以下任一方法设置这些属性:

  • 使用任务定义,例如添加"mapreduce.job.classloader": "true"到索引服务的tuningConfig中的jobProperties
  • 使用系统属性,例如在middleManager上添加druid.indexer.runner.javaOpts=... -Dhadoop.mapreduce.job.classloader=true。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值