有Druid.io经验者么

这篇文章整理的时间较长,目前我们已经使用此引擎,已经广泛覆盖到公司各业务系统中。
我们是在14年2月份选择druid.io作为我们的OLAP引擎,为什么选择它,主要基于以下考虑(应该是druid本身的特性也有说明)
1、时区范围查询
2、任意维度组合(即每个维度都是主键,类似groupby类型)
3、统计指标灵活配置,非常方便进行扩展及二次开发
4、内嵌支持javascript引擎
5、分布式系统该有的特性都具备
当时我们了解的时候,是从一篇文章了解到的《Real-Time Big Data Analytics》,里面就有提到druid.io。并且通过百度(不要吐槽了)搜索并不能发现相关的中文资料,绝大多数都是阿里巴巴的druid数据库连接池(到目前为止百度也还是很难搜出相关资料,所以gg还是靠谱多了)。因为此开源项目还是比较新的,在国内还没有广泛的应用。所以在选型的时候,也经历过反复验证和它的文档介绍,并结果具体的业务场景,发现此引擎很符合我们的需要。
通过一周左右的学习,在我自己的笔记本上,运行其demo程序(当时版本是0.6.52)通过了,不过第一次安装如果maven库不完善,还要重新下载一次。为了更加接近我们的业务使用场合,也模拟了几条记录导入后进行查询,也能得到正确的结果,这时候就申请几台机器,开始搭建真正的分布式集群(毕竟这么多服务都在笔记本上安装还是吃不消啊)。
机器分布如下:
kafka机器2台(版本0.8.0)
2台realtime节点,并安装了zookeeper节点(版本3.4.5)
1台broker节点,
3台historical节点,这几台机器比较独立
1台coordinator节点,并安装了mysql服务(版本5.5),zookeeper节点
因为我们申请的是aws云主机,所以deep storage就是用S3速度还是蛮快的。
第一次安装会比较慢点,因为maven仓库要拉去很多第三方依赖包(快捷的方式,就是将第一台下载好的maven库,拷贝到其它机器上面)。安装完成后,启动各服务(没有其先后顺序),导入自己生成的模拟数据,操作方式参考官方文档中Getting Startd部分,按此方式一个个步骤来,最终都验证成功了。
当时总体感觉还是半成品,例如启动和关闭,还需要自己写shell(虽然说明使用apache的whirr工具);另外查询语句是json格式,虽然比较灵活,但可读性不强,没有用SQL语句的方式,降低其使用学习成本(因为有其特殊性,SQL语句的方式不能全部满足);web管理界面非常简单;社区很薄弱及使用经验介绍较少,查询请求不能cancel等。
在操作的过程中,因配置参数还是蛮多的,稍不注意某些参数就会配置错误导致未知异常;还有就是有些节点使用没有详细的操作步骤,特别是overlord结合middleManager的方式进行批量导数(很多参数只有说明而无使用效果演示)。
源代码开源但绝大多数都是函数式编程并且注释很少。
最重要的实时OLAP要快,硬件资源不可缺少(内存要大,硬盘读写要快,CPU要强劲等)。
另外补充下,很多人在跟我聊到这块的时候,都提到了是否可以使用预先计算和预先设计的方式,这样可以提高计算的速度。但实际我们使用的场景是总共有60几个维度,用户在查询条件的选择上面,是任意选择几个或者几十个,非常随机。这样的场景就没法预先计算和设计了,这种使用的方式决定了与其它使用场景的异同点。也决定了后期需要进行大量的封装开发,最终形成可真正使用的产品。
还有些人问我为什么不用storm,它也是实时计算的,这是因为实时计算跟OLAP是两个场景。
每个开源都不能做到十全十美,能够满足最关注的需求,而其它的问题都可以通过时间来解决。另外druid.io还是蛮稳定的开源项目,比较严重的bug还是很少的。
本文已收录于以下专栏:
相关文章推荐
参考:/archives/.htm
海量数据实时OLAP分析系统-Druid.io安装配置和体验
http://druid.io/docs...
最近在研究一个开源的项目中,发现项目使用的是Druid  JDBC组件,这跟我们平常用的c3po不同,所以研究了下。
先来看对Druid的介绍:
        Druid是一个JDBC组件,它包括三...
文档转自:/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98
欢迎大家使用Druid,常见问题在这里...
最近很久没写blog了,主要是这几个月在带领团队去做一个big data for realtime的项目,因为时间较为紧张。
所以等上线后,再分享其内容
druid.io 是一个比较重型的数据库查询系统,分为5种节点 。
在此就不对数据库进行介绍了,如果有疑问请参考白皮书:
/s/1eSFlIJS  
druid.io包括主要的节点:
这个项目是在2013年底开源出来的,专门针对与广告领域的实时大数据的
最近去做了一次druid科普分享,附上PPT:
ARIMA模型原理及其java实现一.基本原理ARIMA模型是通过将预测对象随时间推移而形成的数据序列当成一个随机序列,进而用一定的数学模型来近似表述该序列。根据原序列是否平稳以及回归中所包含部分的不...
Druid问题总结
他的最新文章
讲师:王哲涵
讲师:韦玮
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)【北京大数据架构师-DNJS0010招聘】多牛传媒招聘大数据架构师-DNJS0010-看准网
大数据架构师-DNJS0010
同行的小伙伴~~~感谢缘分,让你点点手指进入了我们的招聘页面,我们期待,优秀的你尽快加入,结伴fighting!这里有大量的妹子,休闲的别墅办公,超美味的午餐,丰富的娱乐,欢乐的同事,这些你想拥有吗?在这里你再也不是简单的码农,我们带你一起向高富帅的路上狂奔!我们需要你:*负责数据中心数据平台的设计、开发、维护与优化,不断创新,满足上层数据运营体系各项需求;*负责ODS以及数据仓库逻辑模型、物理模型的分析与设计,并与团队共同制定核心模型的演进路线; *负责数据中心日志收集系统,业务分析系统总体技术方案制定、审核、实施;*审核数据平台项目总体技术方案,对各项目进行质量评估; *研究与跟踪大数据新技术发展方向,主持制定大数据平台技术发展战略规划; *负责大数据平台性能优化、问题诊断、bug修改;*研究大数据相关的开源组件我们希望你具备:*计算机或相关专业,本科以上学历,从事大数据开发工作至少3年以上;*熟悉掌握Spark、Kafka、Hbase、Hdfs、Yarn、Redis、Flume等大数据相关技术,并能结合业务场景使用;*熟悉Scala和Python语言,了解Scala原理、底层技术;*熟悉Linux、TCP/IP、HTTP协议,能够写shell脚本;*熟悉分布式系统的架构、设计和优化,对海量数据的清洗、分析处理及存储有相关的实践经验;*有统计学数学知识,海量数据处理、数据分析和挖掘经验者优先;* 有druid(druid.io)使用经验者优先;*良好的责任心强、学习能力、沟通能力、适应能力、团队协作能力。 先来点实际的:*多牛传媒为 每一位员工提供最人性化的薪酬福利,工作环境;*入职缴纳社保公积金,我们义不容辞;*我们关心每一位多牛人的健康,健身房,水果,零食饮料等多项软福利;*每天下午困困哒,不要紧,咖啡无限量供应!*我们有最open的文化氛围,珍视每一位多牛人每一个小小的建议;*多牛传媒,趣,最活力,最学习,最靠谱,最创新;*我们等待你的加入!
北京多牛互动传媒股份有限公司【股票代码 835998】(简称 多牛传媒)是一家传媒方向的大数据集团公司,即以传媒为基础,以大数据、商业智能为核心的互联网公司。旗下业务包括新媒体生态链,新媒体营销服务、大数据研发及服务等。业务范围涵盖了传媒、大数据、商业智能、云计算等领域,构建了一个完整的大数据智能化生态云平台。多牛传媒【股票代码 835998】旗下优势资源众多,其中是中国最早、最权威的科技媒体、社区,是中国IT新闻与动态的集散地、行业交流与业务关系的社交圈。DoNews上每时每刻都活跃着成千上万真实可信的从业者, 其内容在互联网行业内的影响力和公信力常年占据第一,牢牢掌控着互联网行业的舆论话语权。十六年来,已经成为中国互联网行业所有重大事件的见证者,沉淀了诸多知名企业和企业家的历史文献。多牛传媒【股票代码 835998】结合行业发展的趋势,建立了以大数据智能化引擎和由媒体生态链、广告生态链、大数据生态链、创投生态链构成的四大产业生态链为基础的大数据智能化生态云平台。这四大产业生态链的不断壮大发展,也将源源不断的向核心引擎提供海量数据和高价值目标。目前该平台已经获得国内外多个战略合作伙伴的认可并陆续开展合作。
该公司其他工作机会
Duang~我要涨薪!
匿名填写收入情况,立刻获取涨薪20%的机会
来自3个员工
在职员工 -
公司有发展前景,传媒大数据领域第一股,多牛传媒建立了大数据智能化引擎和由媒体生态链、广告生态链、大数...
愿意推荐朋友
公司发展变好
面试难度系数
来自6个员工
匿名用户&&&&面试多牛传媒的&-&&北京
面试经历:
公司在北四环,办公室很nice,一面是HR小哥,非常详细的给你解答一切问题。业务的大楼是栋小别墅,底...
感觉没戏面试整体感受:一般有难度
面试通关必备
最新面试题等你来看
看了该职位的人还看了
免费发布职位/提升职位曝光
看准网()为您免费提供多牛传媒相关信息,包括多牛传媒招聘、工资、面试、评价及员工、工作环境照片,以上信息均由多牛传媒员工匿名提交,看准网整理发布,所有多牛传媒相关内容均不代表看准网意见!
找工作,下载「看准APP」
23982 位HR实时在线
获取职位最新招聘信息
一有该职位最新招聘信息马上通知您
Jojo Yin正在直聘
多牛传媒·
我在boss直聘等你来沟通入职。
500万人安装扫一扫,下载APP
附件简历:
请上传简历!
附件简历:
找工作,下载「看准APP」
23982 位HR实时在线Druid(大数据实时分析数据仓库_白皮书)_CN _百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
Druid(大数据实时分析数据仓库_白皮书)_CN
&&Druid,Druid.io,大数据实时分析数据仓库,论文,原理,白皮书
阅读已结束,下载文档到电脑
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩29页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢海量数据实时OLAP分析系统-Druid.io安装配置和体验
来源:open开发经验库
关键字:druid、druid.io、实时olap、大数据实时分析 
导读: 
一、Druid简介二、Druid架构组成及相关依赖三、Druid集群配置四、Druid集群启动五、Druid查询六、后记 
一、Druid简介 
Druid是一个为大型冷数据集上实时探索查询而设计的开源数据分析和存储系统,提供极具成本效益并且永远在线的实时数据摄取和任意数据处理。 
主要特性: 
为分析而设计——Druid是为OLAP工作流的探索性分析而构建。它支持各种filter、aggregator和查询类型,并为添加新功能提供了一个框架。用户已经利用Druid的基础设施开发了高级K查询和直方图功能。 
交互式查询——Druid的低延迟数据摄取架构允许事件在它们创建后毫秒内查询,因为Druid的查询延时通过只读取和扫描有必要的元素被优化。Aggregate和 filter没有坐等结果。 
高可用性——Druid是用来支持需要一直在线的SaaS的实现。你的数据在系统更新时依然可用、可查询。规模的扩大和缩小不会造成数据丢失。 
可伸缩——现有的Druid部署每天处理数十亿事件和TB级数据。Druid被设计成PB级别。 
就系统而言,Druid功能位于PowerDrill和Dremel之间。它实现几乎所有Dremel提供的工具(Dremel处理任意嵌套数据结构,而Druid只允许一个基于数组的嵌套级别)并且从PowerDrill吸收一些有趣的数据格式和压缩方法。 
Druid对于需要实时单一、海量数据流摄取产品非常适合。特别是如果你面向无停机操作时,如果你对查询查询的灵活性和原始数据访问要求,高于对速度和无停机操作,Druid可能不是正确的解决方案。在谈到查询速度时候,很有必要澄清“快速”的意思是:Druid是完全有可能在6TB的数据集上实现秒级查询。 
二、Druid架构组成及其他依赖 
2.1 Overlord Node (Indexing Service) 
Overlord会形成一个加载批处理和实时数据到系统中的集群,同时会对存储在系统中的数据变更(也称为索引服务)做出响应。另外,还包含了Middle Manager和Peons,一个Peon负责执行单个task,而Middle Manager负责管理这些Peons。 
2.2 Coordinator Node 
监控Historical节点组,以确保数据可用、可复制,并且在一般的“最佳”配置。它们通过从MySQL读取数据段的元数据信息,来决定哪些数据段应该在集群中被加载,使用Zookeeper来确定哪个Historical节点存在,并且创建Zookeeper条目告诉Historical节点加载和删除新数据段。 
2.3 Historical Node 
是对“historical”数据(非实时)进行处理存储和查询的地方。Historical节点响应从Broker节点发来的查询,并将结果返回给broker节点。它们在Zookeeper的管理下提供服务,并使用Zookeeper监视信号加载或删除新数据段。 
2.4 Broker Node 
接收来自外部客户端的查询,并将这些查询转发到Realtime和Historical节点。当Broker节点收到结果,它们将合并这些结果并将它们返回给调用者。由于了解拓扑,Broker节点使用Zookeeper来确定哪些Realtime和Historical节点的存在。 
2.5 Real-time Node 
实时摄取数据,它们负责监听输入数据流并让其在内部的Druid系统立即获取,Realtime节点同样只响应broker节点的查询请求,返回查询结果到broker节点。旧数据会被从Realtime节点转存至Historical节点。 
2.6 ZooKeeper 
为集群服务发现和维持当前的数据拓扑而服务; 
2.7 MySQL 
用来维持系统服务所需的数据段的元数据; 
2.8 Deep Storage 
保存“冷数据”,可以使用HDFS。 
三、Druid集群配置 
3.1 环境信息 
我这里有两台机器,node1有32G内存,上面部署了Histotical Node和Coordinator Node;node2有72G内存,上面部署了其他四个服务。 
3.2 通用配置(Common Configuration) 
##创建MySQL数据库 
CREATE DATABASE `druid` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_
grant all on druid.* to druid@’%’ identified by ‘druid1234′ WITH GRANT OPTION;
##配置文件 
cd $DRUID_HOME/config/_common
vi common.runtime.properties(所有节点) 
##使用Mysql存储元数据
druid.extensions.coordinates=["io.druid.extensions:druid-examples","io.druid.extensions:druid-kafka-eight", "io.druid.extensions:mysql-metadata-storage"]
##zookeeper
druid.zk.service.host=zkNode1:2181,zkNode2:2181,zkNode3:2181
##Mysql配置
druid.metadata.storage.type=mysql
druid.metadata.storage.connector.connectURI=jdbc:mysql://node1:3306/druid
druid.metadata.storage.connector.user=druid
druid.metadata.storage.connector.password=diurd1234
##配置deep storage到HDFS
druid.storage.type=hdfs
druid.storage.storageDirectory=hdfs://cdh5/tmp/druid/storage
##配置查询缓存,暂用本地,可配置memcached
druid.cache.type=local
druid.cache.sizeInBytes=
##配置监控
druid.monitoring.monitors=["com.metamx.metrics.JvmMonitor"]
##配置Indexing service的名字
druid.selectors.indexing.serviceName=druid/overlord
druid.emitter=logging 3.3 Overlord Node(Indexing Service) 
在运行Overlord Node节点上: 
cd $DRUID_HOME/config/overlord
vi runtime.properties 
druid.host=node2
druid.port=8090
druid.service=druid/overlord
# Only required if you are autoscaling middle managers
druid.indexer.autoscale.doAutoscale=true
druid.indexer.autoscale.strategy=ec2
druid.indexer.autoscale.workerIdleTimeout=PT90m
druid.indexer.autoscale.terminatePeriod=PT5M
druid.indexer.autoscale.workerVersion=0
# Upload all task logs to deep storage
druid.indexer.logs.type=hdfs
druid.indexer.logs.directory=hdfs://cdh5/tmp/druid/indexlog
# Run in remote mode
druid.indexer.runner.type=remote
druid.indexer.runner.minWorkerVersion=0
# Store all task state in the metadata storage
druid.indexer.storage.type=metadata 3.4 MiddleManager Node 
在运行MiddleManager Node节点上:
cd $DRUID_HOME/config/middleManager
vi runtime.properties 
druid.host=node2
druid.port=8091
druid.service=druid/middlemanager
druid.indexer.logs.type=hdfs
druid.indexer.logs.directory=hdfs://cdh5/tmp/druid/indexlog
# Resources for peons
druid.indexer.runner.javaOpts=-server -Xmx2g -XX:+UseG1GC -XX:MaxGCPauseMillis=100 -XX:+PrintGCDetails -XX:+PrintGCTimeStamps
druid.indexer.task.baseTaskDir=/tmp/persistent/task/ 3.5 Coordinator Node 
在运行Coordinator Node节点上:
cd $DRUID_HOME/config/coordinator
vi runtime.properties 
druid.host=node1
druid.port=8081
druid.service=coordinator
druid.coordinator.startDelay=PT5M 3.6 Historical Node 
在运行Historical Node节点上:
cd $DRUID_HOME/config/historical
vi runtime.properties 
druid.host=node1
druid.port=8082
druid.service=druid/historical
druid.historical.cache.useCache=true
druid.historical.cache.populateCache=true
druid.processing.buffer.sizeBytes=
druid.processing.numThreads=9
druid.server.http.numThreads=9
druid.server.maxSize=
druid.segmentCache.locations=[{"path": " /tmp/druid/indexCache", "maxSize": }]
druid.monitoring.monitors=["io.druid.server.metrics.HistoricalMetricsMonitor", "com.metamx.metrics.JvmMonitor"] 3.7 Broker Node 
在运行Broker Node节点上:
cd $DRUID_HOME/config/broker
vi runtime.properties 
druid.host=node2
druid.port=8092
druid.service=druid/broker
druid.broker.http.numConnections=20
druid.broker.http.readTimeout=PT5M
druid.processing.buffer.sizeBytes=
druid.processing.numThreads=11
druid.server.http.numThreads=20 3.8 Real-time Node 
在运行Real-time Node节点上:
cd $DRUID_HOME/config/realtime
vi runtime.properties 
druid.host=node2
druid.port=8093
druid.service=druid/realtime
druid.processing.buffer.sizeBytes=
druid.processing.numThreads=5
# Override emitter to print logs about events ingested, rejected, etc
druid.emitter=logging
druid.monitoring.monitors=["io.druid.segment.realtime.RealtimeMetricsMonitor", "com.metamx.metrics.JvmMonitor"] 四、Druid集群启动 
首次启动时候,可以遵循下面的启动顺序。 
4.1 Broker Node 
cd $DRUID_HOME/
cp run_druid_server.sh run_broker.sh
vi run_broker.sh 
替换以下内容: 
SERVER_TYPE=broker
# start process
JAVA_ARGS="${JAVA_ARGS} -Xmx10g -Xms5g -XX:NewSize=2g -XX:MaxNewSize=2g -XX:MaxDirectMemorySize=24g -XX:+UseConcMarkSweepGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps"
JAVA_ARGS="${JAVA_ARGS} -Duser.timezone=GMT+8 -Dfile.encoding=UTF-8"
JAVA_ARGS="${JAVA_ARGS} -Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager -Djava.io.tmpdir=/tmp/druid"
JAVA_ARGS="${JAVA_ARGS} -Dcom.sun.management.jmxremote.port=17071 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Ddruid.extensions.localRepository=${MAVEN_DIR}" 执行./run_broker.sh启动Broker Node: 
4.2 Historical Node 
cd $DRUID_HOME/
cp run_druid_server.sh run_historical.sh 
vi run_historical.sh 
替换以下内容: 
SERVER_TYPE=historical
# start process
JAVA_ARGS="${JAVA_ARGS} -Xmx10g -Xms10g -XX:NewSize=2g -XX:MaxNewSize=2g -XX:MaxDirectMemorySize=16g -XX:+UseConcMarkSweepGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps"
JAVA_ARGS="${JAVA_ARGS} -Duser.timezone=GMT+8 -Dfile.encoding=UTF-8"
JAVA_ARGS="${JAVA_ARGS} -Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager -Djava.io.tmpdir=/tmp/druid"
JAVA_ARGS="${JAVA_ARGS} -Ddruid.extensions.localRepository=${MAVEN_DIR}" 执行命令./run_historical.sh启动Historical Node: 
4.3 Coordinator Node 
cd $DRUID_HOME/
cp run_druid_server.sh run_coordinator.sh
vi run_coordinator.sh 
替换以下内容: 
SERVER_TYPE=coordinator
# start process
JAVA_ARGS="${JAVA_ARGS} -Xmx10g -Xms10g -XX:NewSize=512m -XX:MaxNewSize=512m -XX:+UseG1GC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps"
JAVA_ARGS="${JAVA_ARGS} -Duser.timezone=GMT+8 -Dfile.encoding=UTF-8"
JAVA_ARGS="${JAVA_ARGS} -Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager -Djava.io.tmpdir=/tmp/druid"
JAVA_ARGS="${JAVA_ARGS} -Ddruid.extensions.localRepository=${MAVEN_DIR}" 执行命令./run_coordinator.sh启动Coordinator Node. 
4.4 Middle Manager 
cd $DRUID_HOME/
cp run_druid_server.sh run_middleManager.sh
vi run_middleManager.sh 
替换以下内容: 
SERVER_TYPE=middleManager
# start process
JAVA_ARGS="${JAVA_ARGS} -Xmx64m -Xms64m -XX:+UseConcMarkSweepGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Duser.timezone=GMT+8 -Dfile.encoding=UTF-8"
JAVA_ARGS="${JAVA_ARGS} -Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager -Djava.io.tmpdir=/tmp/druid -Ddruid.extensions.localR
epository=${MAVEN_DIR}" 执行命令./run_middleManager.sh启动MiddleManager Node。 
4.5 Overlord Node 
cd $DRUID_HOME/
cp run_druid_server.sh run_overlord.sh
vi run_overlord.sh 
替换以下内容: 
SERVER_TYPE=overlord
# start process
JAVA_ARGS="${JAVA_ARGS} -Xmx4g -Xms4g -XX:NewSize=256m -XX:MaxNewSize=256m -XX:+UseConcMarkSweepGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps"
JAVA_ARGS="${JAVA_ARGS} -Duser.timezone=GMT+8 -Dfile.encoding=UTF-8"
JAVA_ARGS="${JAVA_ARGS} -Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager -Djava.io.tmpdir=/tmp/druid"
JAVA_ARGS="${JAVA_ARGS} -Ddruid.extensions.localRepository=${MAVEN_DIR}" 执行命令./run_overlord.sh启动Overlord Node: 
4.6 Real-time Node 
cd $DRUID_HOME/
cp run_druid_server.sh run_realtime.sh
vi run_realtime.sh
替换以下内容: 
SERVER_TYPE=realtime
# start process
JAVA_ARGS="${JAVA_ARGS} -Xmx13g -Xms13g -XX:NewSize=2g -XX:MaxNewSize=2g -XX:MaxDirectMemorySize=9g -XX:+UseConcMarkSweepGC -XX:+PrintGCDetails -
XX:+PrintGCTimeStamps -XX:+HeapDumpOnOutOfMemoryError"
JAVA_ARGS="${JAVA_ARGS} -Duser.timezone=GMT+8 -Dfile.encoding=UTF-8"
JAVA_ARGS="${JAVA_ARGS} -Ddruid.realtime.specFile=/home/liuxiaowen/druid-0.8.1/examples/wikipedia/wikipedia_realtime.spec"
JAVA_ARGS="${JAVA_ARGS} -Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager -Djava.io.tmpdir=/tmp/druid"
JAVA_ARGS="${JAVA_ARGS} -Dcom.sun.management.jmxremote.port=17072 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremot
e.ssl=false"
JAVA_ARGS="${JAVA_ARGS} -Ddruid.extensions.localRepository=${MAVEN_DIR}" ##特别需要注意参数: 
-Ddruid.realtime.specFile=/home/liuxiaowen/druid-0.8.1/examples/wikipedia/wikipedia_realtime.spec 
启动RealTime Node需要指定一个realtime数据源的配置文件,本文中使用example提供的wikipedia_realtime.spec,启动后,该数据源从irc.wikimedia.org获取实时数据。 
关于RealTime Node的配置,后续文章将会详细介绍。 
执行命令./run_realtime.sh启动RealTime Node。 
五、Druid查询 
第四部分中启动RealTime Node时候使用了例子中自带的配置文件wikipedia_realtime.spec,启动后,该RealTime Node会从irc.wikimedia.org获取实时数据,本章将以该数据源为例,学习几种最常见的查询。 
5.1 select查询 
首先编辑查询配置文件select_query.json 
"queryType": "select",
"dataSource": "wikipedia",
"dimensions":[],
"metrics":[],
"granularity": "all",
"intervals": [
"pagingSpec":{"pagingIdentifiers": {}, "threshold":10}
} 该配置文件的含义是从数据源”wikipedia”进行select查询所有列,时间区间为/,每10条记录一个分页。 
执行命令查询: 
curl -X POST ‘http://node2:8093/druid/v2/?pretty’ -H ‘content-type: application/json’ -d @select_query.json 
瞬间返回结果: 
5.2 基于时间序列的查询Timeseries query 
编辑查询配置文件timeseries.json 
"queryType": "timeseries",
"dataSource": "wikipedia",
"intervals": [ "/" ],
"granularity": "minute",
"aggregations": [
{"type": "longSum", "fieldName": "count", "name": "edit_count"},
{"type": "doubleSum", "fieldName": "added", "name": "chars_added"}
} 该配置文件的含义是:从数据源” wikipedia”中进行时间序列查询,区间为/,按分钟汇总结果,汇总字段为count和added; 
执行查询命令: 
curl -X POST ‘http://node2:8093/druid/v2/?pretty’ -H ‘content-type: application/json’ -d @timeseries.json 
同样瞬间返回结果: 
5.3 TopN查询 
编辑查询文件topn.json 
"queryType": "topN",
"dataSource": "wikipedia",
"granularity": "all",
"dimension": "page",
"metric": "edit_count",
"threshold" : 10,
"aggregations": [
{"type": "longSum", "fieldName": "count", "name": "edit_count"}
"filter": { "type": "selector", "dimension": "country", "value": "United States" },
"intervals": ["T00:00/T00"]
} 该文件含义是:从数据源” wikipedia”进行TopN查询,其中N=10,维度为page,指标为edit_count,也就是,在page维度上将edit_count汇总后取Top 10. 
执行查询命令: 
curl -X POST ‘http://node2:8093/druid/v2/?pretty’ -H ‘content-type: application/json’ -d @topn.json 
结果为: 
六、后记 
Druid目前已经有很多公司用于实时计算和实时OLAP,而且效果很好。虽然它的配置和查询都比较复杂和繁琐,但如果是真正基于海量数据的实时OLAP,它的威力还是很强大的。我将持续学习和分享Druid的相关技术,验证它在海量数据实时OLAP上的效果,敬请关注。 
参考文章: 
http://druid.io 
http://www.csdn.net/article// 
您可以关注
,随时接收博客更新的通知邮件。 
转载请注明: >>
免责声明:本站部分内容、图片、文字、视频等来自于互联网,仅供大家学习与交流。相关内容如涉嫌侵犯您的知识产权或其他合法权益,请向本站发送有效通知,我们会及时处理。反馈邮箱&&&&。
学生服务号
在线咨询,奖学金返现,名师点评,等你来互动

我要回帖

更多关于 java io 装饰者模式 的文章

 

随机推荐