Druid0.10.1介绍 Druid0.10.1单机版 Druid0.10.1 集群版搭建

1.Druid介绍

1.1druid是什么

Druid的母公司MetaMarket在2011年以前也是Hadoop的拥趸者,但是在高并发环境下,Hadoop并不能对数据可用性以及查询性能给出产品级别的保证,使得MetaMarket必须去寻找新的解决方案,当尝试使用了各种关系型数据库以及NoSQL产品后,他们觉得这些已有的工具都不能解决他们的“痛点”,所以决定在2011年开始研发自己的“轮子”Druid,他们将Druid定义为“开源、分布式、面向列式存储的实时分析数据存储系统”,

druid是针对时间序列数据提供低延迟的数据写入以及快速交互式查询的分布式OLAP数据库。

1.2为什么使用druid
优点:
a:对于大部分的查询场景都可以做到亚秒级的响应,

b:可以同时支持数据实时导入和批量导入两种方式

c:数据写入的时候进行预聚合,节省存储空间提高查询效率

d:集群扩展方便

缺点:
a:druid不支持join操作,

b:druid在大数据量下对明细查询有瓶颈
1.3****为什么出现druid(OLAP&OLTP)
1:OLAP与OLTP的介绍和区别

数据处理大致可以分成两大类:联机事务处理OLTP(on-line transaction processing)、联机分析处理OLAP(On-Line Analytical Processing)。OLTP是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易。OLAP是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。

OLTP:web系统中的关系型数据库的应用;数据的增删改查,CRUD

OLAP:大数据或者数据分析领域中常见的形式,注重对数据分析查询,不涉及或者很少涉及修改操作;
大数据OLAP技术;大数据OLAP能使用SQL进行查询和支持Hadoop。 其实还有很多的框架和技术都被在大数据领域的OLAP中使用,hive,spark,druid,kylin等都是比较常见的技术;druid与常见OLAP技术的对比:

1:由于hive/sparksql主要是注重离线分析,数据的时效性比较差,而且由于hive/sparksql的离线分析指标统计的延时性比较高,很难满足毫秒甚至秒级的要求;

2:Es作为全文索引技术,时效性以及查询延时都能满足要求,但是数据规模在中等规模的时候是比较优秀的,但是在万亿甚至更大规模的场景下,es的查询和写入都会遇到很大的性能问题;

3:kylin和druid是比较相似的技术,两者性能也比较类似,但是druid可以支持数据的实时导入,结合需求我们就采用了druid作为OLAP的技术框架;

2.druid单机版安装

1.官网下载tar.gz druid-0.10.1-bin.tar.gz
到 /export/software/目录下:
解压安装包到/export/servers/:

tar -zxvf druid-0.10.1-bin.tar.gz -C /export/servers/

cd /export/servers/druid-0.10.1/

mv druid-0.10.1/ druid010

重新解压一个zookeeper:

tar -zxvf zookeeper-3.4.6.tar.gz -C /export/servers/druid010/
 然后改名:
 
cd /export/servers/druid010/

mv zookeeper-3.4.6 zk/

cd zk/conf

mv conf/zoo_sample.cfg conf/zoo.cfg

启动:bin/zkServer.sh start

注意:停掉本机原先zk
目录下多出:var目录

启动命令:打开多个终端窗口:

启动historical节点:

java `cat conf-quickstart/druid/historical/jvm.config | xargs` -cp "conf-quickstart/druid/_common:conf-quickstart/druid/historical:lib/*" io.druid.cli.Main server historical

启动broker节点:

java `cat conf-quickstart/druid/broker/jvm.config | xargs` -cp "conf-quickstart/druid/_common:conf-quickstart/druid/broker:lib/*" io.druid.cli.Main server broker

启动coordinator节点:

java `cat conf-quickstart/druid/coordinator/jvm.config | xargs` -cp "conf-quickstart/druid/_common:conf-quickstart/druid/coordinator:lib/*" io.druid.cli.Main server coordinator

启动overlord节点:

java `cat conf-quickstart/druid/overlord/jvm.config | xargs` -cp "conf-quickstart/druid/_common:conf-quickstart/druid/overlord:lib/*" io.druid.cli.Main server overlord

启动middleManager节点:

java `cat conf-quickstart/druid/middleManager/jvm.config | xargs` -cp "conf-quickstart/druid/_common:conf-quickstart/druid/middleManager:lib/*" io.druid.cli.Main server middleManager

如果每个节点正常打印日志则启动成功!!如果需要停止:Ctrl+c即可,如果想启动一个新的集群则可以删除var目录,重新执行bin/init生成新的var目录。

3.druid集群版搭建

druid的分布式集群搭建,配置过程中的几个重要的点:
配置druid的deepstorage为hdfs,依赖zookeeper,元数据存储使用mysql;
coordinator,overlord:hp101;
middlemanager,historical:hp102;
broker:hp103;
重点注意内存和线程配置的时候满足druid的一个计算公式,否则可能启动没有问题但是导入数据的时候会出现错误:
在这里插入图片描述
解压druid安装包到/export/servers/目录下

tar -zxvf druid-0.10.1-bin.tar.gz -C /export/servers/

cd /export/servers/druid-0.10.1

公共配置
公共配置在conf/druid/_common,我们需要编辑common.runtime.properties文件 ,下面主要是我们修改的重要配置,其它配置保留默认即可:
(1)配置两个启动加载的扩展。一个是HDFS存储,一个是MySQL元数据

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

注意扩展依赖需要下载:java -classpath "lib/*" io.druid.cli.Main tools pull-deps --defaultVersion 0.10.1 -c io.druid.extensions:mysql-metadata-storage:0.10.1 -c druid-hdfs-storage -h org.apache.hadoop:hadoop-client:2.7.3
(2)配置Zookeeper地址

druid.zk.service.host=hp101:2181,hp102:2181,hp103:2181
druid.zk.paths.base=/druid

(3)配置 Metastore存储信息`

druid.metadata.storage.type=mysql

druid.metadata.storage.connector.connectURI=jdbc:mysql://hp102:3306/druid

druid.metadata.storage.connector.user=root

druid.metadata.storage.connector.password=000000
 注意:mysql需要提前安装好,并且数据库druid要提前创建好并且指定utf-8编码;

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

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

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

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

(6)因为我们会使用到hdfs作为底层存储所以我们需要告知druid hadoop集群的相关信息,所以我们需要把hadoop相关的配置文件复制到conf/druid/_common/目录中;

hdfs-site.xml,core-site.xml,mapred-site.xml,yarn-site.xml四个配置文件 。

[root@hp101 _common]#ln -s /export/servers/hadoop-2.7.2/etc/hadoop/core-site.xml ./core-site.xml
[root@hp101 _common]#ln -s /export/servers/hadoop-2.7.2/etc/hadoop/mapred-site.xml.template ./mapred-site.xml
[root@hp101 _common]# ln -s /export/servers/hadoop-2.7.2/etc/hadoop/yarn-site.xml ./yarn-site.xml
[root@hp101 _common]# ln -s /export/servers/hadoop-2.7.2/etc/hadoop/hdfs-site.xml ./hdfs-site.xml

common.runtime.properties完整配置

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


# Log all runtime properties on startup. Disable to avoid logging properties on startup:
druid.startup.logging.logProperties=true

#
# Zookeeper
#

druid.zk.service.host=hp101:2181,hp102:2181,hp103:2181
druid.zk.paths.base=/druid

#
# Metadata storage

# For MySQL:
druid.metadata.storage.type=mysql
druid.metadata.storage.connector.connectURI=jdbc:mysql://hp102:3306/druid
druid.metadata.storage.connector.user=root
druid.metadata.storage.connector.password=000000


#
# Deep storage


# For HDFS (make sure to include the HDFS extension and that your Hadoop config files in the cp):
druid.storage.type=hdfs
druid.storage.storageDirectory=/druid/segments

#
# Indexing service logs
#

# For HDFS (make sure to include the HDFS extension and that your Hadoop config files in the cp):
druid.indexer.logs.type=hdfs
druid.indexer.logs.directory=/druid/indexing-logs

#
# Service discovery
#

druid.selectors.indexing.serviceName=druid/overlord
druid.selectors.coordinator.serviceName=druid/coordinator

#
# Monitoring
#

druid.monitoring.monitors=["com.metamx.metrics.JvmMonitor"]
druid.emitter=logging
druid.emitter.logging.logLevel=info

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

vim historical/jvm.config`

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



注意1:以上每一行都是JVM参数,保持原样一个配置占用一行。java.io.tmpdir路径需要我们手动创建出来。

关于内存配置。这个关乎该节点是否能正常运行。-Xms,初始堆内存大小,设置了1g,-Xmx,最大堆内存大小,设置了3g。 此外java.io.tmpdir路径需要手动创建

注意2:关于-XX:MaxDirectoryMemortySize,这个配置需要重点关注:直接内存--》堆外内存;

该参数的大小要满足一个公式:

druid.processing.buffer.sizeBytes*(druid.processing.numThreads+1+druid.processing.numMergeBuffers) <= MaxDirectMemorySize ;以上几个参数是在下面的runtime.properties中,druid.processing.numMergeBuffers默认等于2

maxDirectMemorySize<-Xmx(最大堆内存)

runtime.properties配置

druid.service=druid/historical
druid.port=8083

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

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

# Segment storage
druid.segmentCache.locations=[{"path":"/export/servers/druid010/var/druid/segment-cache","maxSize"\:130000000000}]
druid.server.maxSize=130000000000

middleManager的配置

配置文件在conf/druid/middleManager/路径下,两个配置文件
1 jvm.config

-server
-Xms64m
-Xmx64m
-Duser.timezone=UTC+8
-Dfile.encoding=UTF-8
-Djava.io.tmpdir=var/tmp
-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager```



2runtime.properties

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

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

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

druid.indexer.task.baseTaskDir=var/druid/task

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

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

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




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

4 broker配置

1.jvm.config

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

2.runtime.properties

```java
druid.service=druid/broker
druid.port=8082

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

# Processing threads and buffers
druid.processing.buffer.sizeBytes=322122574
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配置

1.jvm.config

-server
-Xms1g
-Xmx2g
-Duser.timezone=UTC+8
-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

2.runtime.properties

druid.service=druid/coordinator
druid.port=8081

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

6 overlord配置

1.jvm.config

-server
-Xms1g
-Xmx1g
-Duser.timezone=UTC+8
-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/overlord
druid.port=8090

druid.indexer.queue.startDelay=PT30S

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


注意:以上是druid的配置信息,此外不要忘记启动mysql(在conf/druid/_common/common.properties中所配置),需要提前创建druid数据库

7 启动druid集群

# 在hp103启动broker
nohup bin/broker.sh start >log/broker.log 2>&1 &

# 在hp102启动historical
nohup bin/historical.sh start >log/historical.log 2>&1 &

# 在hp102启动middleManager
nohup bin/middlemanager.sh start >log/middlemanager.log 2>&1 &

# 在hp101启动coordinator
nohup bin/coordinator.sh start >log/coordinator.log 2>&1 &

# 在hp101启动overlord
nohup bin/overlord.sh start >log/overlord.log 2>&1 &

web界面访问:

hp101:8081 coordinator

hp101:8090 overlord

页面正常访问则证明集群搭建成功否则查看启动日志报错信息,日志目录:druid010/log/…

常用端口补充:

8081 (Coordinator)
8082 (Broker)
8083 (Historical)
8084 (Standalone Realtime, 我们没有使用,已经被弃用)
8088 (Router, 我们没有使用,broker的一个网关,实现请求负载均衡到broker节点)
8090 (Overlord)
8091 (Druid Middle Manager)

8100–8199 这些端口号是middleManager开启作业时各个作业自己的端口号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值