Druid0.10.0分布式部署配置

来源:互联网 发布:历年nba选秀体测数据 编辑:程序博客网 时间:2024/06/05 02:39

转载请注明出处:http://blog.csdn.net/u012842205/article/details/73469992

一、部署环境

三个节点:

hostnameOSipzookeeperDruid节点内存ezkalicomKali 2.0 Rolling192.168.56.1无无Druid节点,只跑MySQL16Gvubuntuez1Ubuntu16.04192.168.56.101vubuntuez1:2181middleManager,historical4Gvcentosez2CentOS Linux release 7.2.1511 (Core)192.168.56.102vcentosez2:2181coordinator,overlord2Gvdebianez3Debian 8.7 x86_64192.168.56.103vdebianez3:2181broker4G

第一个节点是我本机电脑,也就是宿主机,剩下三个是本机virtualbox虚拟出的节点,四节点在192.168.56.*网段。


Druid使用版本:0.10.0

JDK:Oracle JDK1.8.1_101

Apache Zookeeper:3.4.8

Apache Hadoop(HDFS):2.7.3

MySQL:10.1.21-MariaDB-5+b1 Debian 9.0


以上组件确保已经安装完成且运行正常。


二、安装配置

由于Druid各个节点角色不一样,只能分别配置。上一篇博客提到过,Druid配置文件目录比较清晰,各个进程有自己专门的配置文件目录,所以我们可以先将所有配置设在一个节点的上,再复制到其他节点。各个节点进程启动只会读自己配置目录中的配置文件。

先从Druid官网下载部署包,详细见上一篇博客。以下所有配置操作都在vubuntuez1节点进行。

我的HDFS(Hadoop)服务运行的系统用户为hdfs,这里我将Druid也运行在这个用户下(之前尝试过将Druid运行在系统用户druid下,但后来做静态文件导入时出现权限问题,看起来是与HDFS相关的权限,一直没有解决,这个后续有研究再补充说明吧)。


解压到/home/hdfs/druid/目录下,产生druid-0.10.0目录。确保这个路径下所有文件目录所有者都是hdfs。

1、公共配置

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


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

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

(2)配置Zookeeper访问URL。

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

(3)配置RDBMS Metastore相关信息。

druid.metadata.storage.type=mysqldruid.metadata.storage.connector.connectURI=jdbc:mysql://ezkalicom:3306/druiddruid.metadata.storage.connector.user=druiddruid.metadata.storage.connector.password=123456

(4)配置底层存储。路径是HDFS路径。

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

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

druid.indexer.logs.type=hdfsdruid.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。

(1)jvm.config

-server-Xms1g-Xmx3g-XX:MaxDirectMemorySize=2048m-Duser.timezone=UTC-Dfile.encoding=UTF-8-Djava.io.tmpdir=/home/hdfs/druid/druid-data/tmpdir-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager
每个配置项一行即可,这个文件是用shell 的xargs工具处理的,每一行最后都会拼接成一条空格隔开的字符串。都是JVM参数。java.io.tmpdir路径手动创建出来。说说内存配置。这个关乎是否能正常运行。-Xms,初始堆内存大小,设置了1g,-Xmx,最大堆内存大小,设置了3g。historical节点将在4G内存的vubuntuez1节点运行,这个配置合适。

有个参数是MaxDirectMemorySize,有个公式:

druid.processing.buffer.sizeBytes*(druid.processing.numThreads+1+druid.processing.numMergeBuffers) <= MaxDirectMemorySize
而MaxDirectMemorySize不能大于Xmx。公式左边的参数都在runtime.properties文件中配置。


(2)runtime.properties

druid.service=druid/historicaldruid.port=8083# HTTP server threadsdruid.server.http.numThreads=3# Processing threads and buffersdruid.processing.buffer.sizeBytes=536870912druid.processing.numThreads=1# Segment storagedruid.segmentCache.locations=[{"path":"/home/hdfs/druid/druid-data/segment-cache","maxSize"\:130000000000}]druid.server.maxSize=130000000000
大部分配置项我们可以不用管,主要管理的是内存部分和线程。druid.server.http.numThreads,我配置了3,可以配置更多,但与内存有很大关系,我们的内存并没有这么大。还得根据上面提到的公式限制MaxDirectMemorySize。这些配置请自行控制。另外,数据段存储(Segment storage)部分的缓存路径请手动创建出来,这部分存储在磁盘,注意磁盘大小。


3、middleManager配置

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

(1)jvm.config

-server-Xms2g-Xmx3g-Duser.timezone=UTC-Dfile.encoding=UTF-8-Djava.io.tmpdir=/home/hdfs/druid/druid-data/tmpdir-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager
也同historical一样,我们任然看看内存部分,初始化堆大小是2g,最大3g。我们节点内存只能是4g。这样配不太合理,系统在物理内存用尽时会开始使用swap分区,swap有8g,但性能上受到很大影响。作为测试集群,搭建没问题。同样,java.io.tmpdir目录最好手动创建。

(2)runtime.properties

druid.service=druid/middleManagerdruid.port=8091# Number of tasks per middleManagerdruid.worker.capacity=3# Task launch parametersdruid.indexer.runner.javaOpts=-server -Xmx4g -Duser.timezone=UTC -Dfile.encoding=UTF-8 -Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManagerdruid.indexer.task.baseTaskDir=/home/hdfs/druid/druid-data# HTTP server threadsdruid.server.http.numThreads=10# Processing threads and buffersdruid.processing.buffer.sizeBytes=536870912druid.processing.numThreads=2# Hadoop indexingdruid.indexer.task.hadoopWorkingPath=/home/hdfs/druid/druid-datadruid.indexer.task.defaultHadoopCoordinates=["org.apache.hadoop:hadoop-client:2.3.0"]

注意几个内存和线程的配置,保证上面提到的公式。还有一个task launch参数,是创建indexer task时所配置的虚拟机参数。indexer task很像MapReduce的task,每个任务都会产生一个虚拟机。Druid强大之处也是实现了自己的分布式计算框架。大部分配置都可以不用修改。为避免兼容性问题,确保hadoop indexing部分的依赖配置版本。这里我们用的hadoop-client是2.3.0。


4、broker配置

配置文件在conf/druid/broker。

(1)jvm.config

-server-Xms2g-Xmx3g-XX:MaxDirectMemorySize=2048m-Duser.timezone=UTC-Dfile.encoding=UTF-8-Djava.io.tmpdir=/home/hdfs/druid/druid-data/tmpdir-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager

(2)runtime.properties

druid.service=druid/brokerdruid.port=8082# HTTP server threadsdruid.broker.http.numConnections=5druid.server.http.numThreads=25# Processing threads and buffersdruid.processing.buffer.sizeBytes=322122547druid.processing.numThreads=1# Query cachedruid.broker.cache.useCache=truedruid.broker.cache.populateCache=truedruid.cache.type=localdruid.cache.sizeInBytes=2000000000

同理,注意线程配置和内存。


5、coordinator配置

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

(1)jvm.config

-server-Xms24g-Xmx24g-XX:MaxDirectMemorySize=4096m-Duser.timezone=UTC-Dfile.encoding=UTF-8-Djava.io.tmpdir=var/tmp-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager

(2)runtime.properties

druid.service=druid/brokerdruid.port=8082# HTTP server threadsdruid.broker.http.numConnections=5druid.server.http.numThreads=25# Processing threads and buffersdruid.processing.buffer.sizeBytes=536870912druid.processing.numThreads=7# Query cachedruid.broker.cache.useCache=truedruid.broker.cache.populateCache=truedruid.cache.type=localdruid.cache.sizeInBytes=2000000000

6、overlord配置

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

(1)jvm.config

-server-Xms1g-Xmx1g-Duser.timezone=UTC-Dfile.encoding=UTF-8-Djava.io.tmpdir=/home/hdfs/druid/druid-data/tmpdir-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager
(2)runtime.properties

druid.service=druid/overlorddruid.port=8090druid.indexer.queue.startDelay=PT30Sdruid.indexer.runner.type=remotedruid.indexer.storage.type=metadata

7、MySQL服务配置

现在来配置MySQL元数据,MySQL将存储Druid中元数据信息,类似Hive metastore的功能。所以我们这里需要先创建一个mysql用户,我创建的是ez,密码是123456。将增删查改创建drop等权限赋予ez用户,并创建了druid数据库。

CREATE USER 'ez'@'192.168.56.%' IDENTIFIED BY "123456";CREATE DATABASE druid DEFAULT CHARACTER SET utf8;GRANT select,create,insert,update,drop,delete privileges on druid.* to ez@192.168.56.%;flush privileges;

注:若上面语句不正确,请自行查阅资料。这两条语句不太熟悉。

使用工具在各个节点链接MySQL服务器,保证能正确链接。相关MySQL参数已经在上文中提到了。

三、运行

配置完成后,将部署目录复制到各个节点的/home/hdfs/druid路径下,并逐个启动集群节点。所有的启动脚本都在部署路径的bin下,各有各的启动脚本。

# 在vdebianez3启动brokerbin/broker.sh# 在vubuntuez1启动historicalbin/historical.sh# 在vubuntuez1启动middleManagerbin/middleManager.sh# 在vcentosez2启动coordinatorbin/coordinator.sh# 在vcentosez2启动overlordbin/overlord.sh

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

注意,若虚拟机配置了防火墙,需要开放如下端口号:

8081 (Coordinator)8082 (Broker)8083 (Historical)8084 (Standalone Realtime, 我们没有使用)8088 (Router, 我们没有使用)8090 (Overlord)8091 (Druid Middle Manager)8100–8199 这些端口号是middleManager开启作业时各个作业自己的端口号,端口号上限取决于druid.worker.capacity。8200 (Tranquility Server, 我们没有使用)

四、数据导入
作业导出的数据和spec文件同上一篇博客提到的,不同点是,数据文件(CSV格式的为例)需要上传到HDFS上。我们还以上一篇博客的CSV数据文件为例,下面是对应的indexing spec数据导入作业文件:

{"type" : "index_hadoop","spec" : {"ioConfig" : {"type" : "hadoop","inputSpec" : {"type" : "static","paths" : "hdfs://vubuntuez1:9000/user/hdfs/druid-test/device_datas.dat"}},"dataSchema" : {"dataSource" : "device_datas","granularitySpec" : {"type" : "uniform","segmentGranularity" : "day","queryGranularity" : "none","intervals" : ["2017-06-01/2017-06-02"]},"parser" : {"type" : "hadoopyString","parseSpec" : {"format" : "csv","columns":["dev_name","tm","f1"],"dimensionsSpec" : {"dimensions" : ["dev_name"]},"timestampSpec" : {"format" : "millis","column" : "tm"}}},"metricsSpec" : [{"name" : "count","type" : "count"},{"name":"sumf1","type":"doubleSum","fieldName":"f1"}]},"tuningConfig" : {"type" : "hadoop","partitionsSpec" : {"type" : "hashed","targetPartitionSize" : 5000000},"jobProperties" : {}}}}
修改部分在spec.ioConfig.inputSpec,修改path,文件已经上传到HDFS,所以将这个值配置好,我们的数据文件事先上传到hdfs://vubuntuez1:9000/user/hdfs/druid-test/,目录请手动创建。数据文件名称为device_datas.dat。这样,Druid启动导入数据的task后,将会从此路径查找数据文件。


切换到hdfs_index.json所在目录下,启动作业:

curl -X 'POST' -H 'Content-Type:application/json' -d @hdfs_index.json vcentosez2:8090/druid/indexer/v1/task
查看UI界面,没有错误则导入成功。UI界面也能看到Datasource。




原创粉丝点击