书籍作者:欧阳辰 | ISBN:9787121306235 |
书籍语言:简体中文 | 连载状态:全集 |
电子书格式:pdf,txt,epub,mobi,azw3 | 下载次数:2197 |
创建日期:2021-02-14 | 发布日期:2021-02-14 |
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板 |
Druid 作为一款开源的实时大数据分析软件,最近几年快速风靡全球互联网公司,特别是对于海量数据和实时性要求高的场景,包括广告数据分析、用户行为分析、数据统计分析、运维监控分析等,在腾讯、阿里、优酷、小米等公司都有大量成功应用的案例。《Druid实时大数据分析原理与实践》的目的就是帮助技术人员更好地深入理解Druid 技术、大数据分析技术选型、Druid 的安装和使用、高级特性的使用,也包括一些源代码的解析,以及一些常见问题的快速回答。
Druid 的生态系统正在不断扩大和成熟,Druid 也正在解决越来越多的业务场景。希望本书能帮助技术人员做出更好的技术选型,深度了解Druid 的功能和原理,更好地解决大数据分析问题。《Druid实时大数据分析原理与实践》适合大数据分析的从业人员、IT 人员、互联网从业者阅读。
欧阳辰,小米商业产品部研发总监,负责广告架构和数据分析平台,擅长数据挖掘,大数据分析和广告搜索架构。之前,在微软工作10年,任微软公司高级开发经理,负责Contextual Ads产品研发,开发Bing Index Serve的核心模块。持有多项关于互联网广告及搜索的美国专利。创办“互联居”公众号,致力于互联网广告技术的繁荣。毕业于北京大学计算机系,获硕士学历。
刘麒赟,现任Testin云测公司技术总监,全面负责领导团队完成数据分析产品的研发。作为资深数据技术专家,曾为多个著名开源项目(Hadoop/Sqoop/Oozie/Druid)贡献源代码,在互联网大数据分析、机器学习和统计学应用等方面拥有丰富的实战经验和相关专利。在企业级产品研发和客户支持方面也有着丰富的经验,并曾为中国多地(包括香港和台湾地区)的龙头企业成功进行实地支持,为美国与新加坡等地客户进行远程支持。之前,曾任OneAPM公司大数据架构师,以及在IBM公司工作七年并任IBM全球大数据平台产品BigInsights的Advisory Software Engineer。
张海雷,资深工程师。目前在优酷土豆广告技术团队负责Druid集群的维护。活跃在Druid中国用户组,Druid、Redis和Storm的开源项目代码贡献者。
高振源,热爱技术,爱智求真的后台开发和数据工程师。先后负责过广告DSP产品、QQ公众号精准投放平台、数据分析产品等研发工作。目前在腾讯SNG企业产品部,负责企点产品的数据平台工作。
许哲,腾讯后台开发高级工程师,先后参与了公司企业产品消息服务后台、QQ公众号后台、QQ公众号精准投放平台等研发,目前在腾讯SNG企业产品部,负责腾讯企点的后台和数据平台开发工作。
精通实时大数据分析!
Druid项目主要创始人杨仿今、蚂蚁金服CTO鲁肃、饿了么CTO张雪峰、Testin云测总裁徐琨、 Druid中国用户组发起人陈冠诚、 TalkingData CTO肖文峰、 OneAPM创始人,董事长何晓阳、Cloudera大中华区技术总监刘隶放、神策数据公司创始人&CEO桑文锋、AdMaster(精硕科技)技术副总裁卢亿雷、微软中国研发中心,高级研发总监 Sherman Tong、AdHoc吆喝科技创始人CEO 王晔联合力荐!
推荐序一
“Druid是一套非常棒的大数据软件,而本书是一本非常棒的Druid课本。”
阅读完欧阳辰等人写的原稿,我很快做出这样的判断,更感叹大数据技术已经彻底迈入一个全新的爆发时代。
作为曾经服务于大数据技术的先驱公司Google的从业者,我个人认为大数据技术有着明显的三个历史发展阶段:
1.探索时代
大家知道,“大数据”与“数据”的核心区别在于数据的完整性。在互联网行业还不成熟的时代,传统行业的数据主要来自于“采样”,数据集并不完备。对小企业来说,数据采集是高成本、高门槛的;即使是对于信息化程度已经很高的大公司,当时的技术也没法很快速地处理TB级别的数据量。
互联网业务特别是数字广告,从第一天开始就尝试解决数据采集的完备性(考虑到按点击收费,客户的微观广告数据必须精细采集),也创新性地研发出能够快速处理大数据的技术解决方案。SSTable、MapReduce和BigTable等非常成功的实践解决方案在这些探索中诞生。当然,还有很多探索性的研发都失败了。
这些成功的新技术慢慢在互联网技术圈传播,随着Apache Hadoop框架的成功,大数据技术开始在行业普及。
2.普及时代
随着社交通信、数字广告、电子商务、网络游戏等商业模式的发展,越来越多的互联网企业诞生。他们都享受了大数据基础技术的红利,从初始就具备比较强大的数据收集、分析和处理能力,并且可以用在业务优化上。
很显然,因为行业的多样性,业务场景变得越来越复杂,对数据处理的要求已经不仅是体量大和速度快,还要数据结构灵活、编程接口强大、系统可扩展、原子化操作、高效备份、读性能加速或者写性能加速等。在这个技术普及的时代,不仅互联网行业有越来越多的技术人员和数据人员开始参与到大数据工作中,而且很多传统软件从业者也慢慢受到吸引,双方互相借鉴,进一步扩大了大数据技术的能力和影响。可以看到,传统的数据库、操作系统、编程语言等技术思想被引入来解决各种复杂的需求。因此而诞生的包括NoSQL、SQL on Hadoop、ElasticSearch这样的新事物,逐渐把我们推进到一个全新的时代。
3.创新时代
本书所介绍的Druid,是大数据技术新时代的产物。现在的新技术,并不只是解决各种技术问题,而是更加贴近复杂的创新型业务的需求场景。我们看到,业内的新框架和新产品,都在探索如何让大数据能为各种不同类型的业务带来更多的优化,解决数据可用性、垂直性、实时性、灵活性、可视化等问题。
如本书所介绍的,Druid以及相关配套的工作,使我们可以非常灵活地实时分析数据,做复杂的维度切割和条件查询,而且可以非常方便地做可视化展示。无论是在互联网企业,还是传统企业,这个工具的使用场景都是非常丰富的,如监控报警、诊断排错、生成业务报表、对接机器学习及策略优化等。
在这个创新时代,还有很多新技术涌现出来,比如强调可编程与实时性的Spark、与Druid类似的Pinot,还有A/B测试(比如我们吆喝科技提供的解决方案)等。
可以看到,大数据相关技术的发展速度是逐渐加快的。原因自然是相关应用的普及(本书有很多详尽的相关案例介绍多家成功公司的应用场景),以及因此而带来的从业人员规模的增长(感谢互联网行业招募和培养了大批人才)。
从MapReduce论文2004年问世到Apache Hadoop框架被广泛使用,经过了5年以上的时间。而从Dremel论文问世到Druid被广泛认可,只用了3年时间。值得指出的是,在这几年时间内,还有很多公司借鉴了Lambda Calculus思想自己研发了闭源系统(Microsoft Dryad、阿里巴巴等)。不过经过几年的实践摸索,业内逐渐形成了以Apache的一系列项目为核心的统一解决方案。大家逐渐意识到,与其对同一问题采取不同的解决方案,不如一个问题一个解决方案,然后大家一起来探索解决更多不同场景的问题。这是现代互联网时代特有的网络效应和规模效应。
本书很大的贡献就是普及Druid(以及如Pinot这样的相似框架),让更多的技术人员、数据人员和互联网业务人员可以快速地熟悉和尝试这个成功的新技术,将它应用在更多场景中,然后能激发更多的创新,进一步推动Druid以及新技术的持续发展。
我在Google总部工作的时候,经常使用Dremel(和Druid类似的工具),也用过基于Dremel的可视化系统PowerDrill。当时的感觉是,一个像SQL一样好用的工具,却能快速查询海量的实时的数据,对业务帮助非常大。举个例子,当时某个广告新产品上线测试后数据不佳,Dremel从实时的数据里发现在某些浏览器里没有点击,于是进一步发现在这些浏览器里渲染有问题,马上改正。如果没有Dremel,这个问题的解决可能需要至少1周以上,而不是几个小时。相信开源的Druid也会像Dremel一样,在很多企业内成为业务数据分析的利器,大幅度提高大家的工作效率。
本书特别出色的地方在于,不仅对Druid的架构以及细节有深入的阐述,而且有非常详尽的代码例子(codelab),甚至有一章专门介绍怎么安装和配置,非常适合工程师一边学习,一边上机实践。在Druid项目文档还不是特别完善的情况下,这本书不仅适合作为大家的学习材料,还能当作日常工作中的手册,已备随时查询。
本书的作者欧阳辰是大数据领域的顶级专家,他现在服务的小米公司在大数据创新上非常积极,对于Druid的使用和贡献也处于业内领先的地位。所以,本书里有非常多的真实业务场景相关的解析,不仅对技术人员,而且对数据人员和业务人员也非常有借鉴价值。
如果你想拥抱大数据的新时代,Druid是你的必学,本书是你的必读。
王晔 AdHoc吆喝科技 创始人 CEO
推荐序二
向在大数据行业从事多年的架构师、正在如火如荼地开展大数据相关工作的工程师,以及正在准备步入大数据行业的新手推荐《Druid实时大数据分析原理与实践》这本书。
在从北京到苏州的高铁上花了5个小时读了这本书,虽然还没有读完,但是我已经可以非常确定地告诉大家这本书“非常引人入胜”。对我这样一个在软件行业做了30年的“码农”、15年以上互联网从业的老兵来说,也别开生面地学了很多新知识,又把脑中的和大数据有关的各种系统知识重新更新了一遍。
本书非常清晰、明确地介绍了Druid是什么、是为什么设计的、特点和特长是什么,以及怎么使用。
本书在介绍美国MetaMarkets公司为什么会设计Druid的同时介绍了业界流行的和大数据有关的大部分系统,以及这些系统诞生的原因及相互之间的比较和特长,比如经典的Hadoop、飞速发展的Spark、用于实时数据流的kafka,非常引人入胜。
本书在介绍为什么和如何使用Druid的同时介绍了Druid的源代码结构,对那些心里痒痒地想给Druid做点贡献的工程师开启了一条入门的道路。
本书最后一章“Druid生态与展望”很好地介绍了在先行使用Druid的用户中逐渐开发的配套设施,以及这些配套设施如何反过来帮助Druid的发展。想使用或者评估Druid的用户都能从这一章得到很多新的启示,并节省用来评估和寻找Druid相关配套设施的时间。
Sherman Tong 微软中国研发中心,高级研发总监
第1 章初识Druid 1
1.1 Druid 是什么1
1.2 大数据分析和Druid 1
1.3 Druid 的产生3
1.3.1 MetaMarkets 简介3
1.3.2 失败总结4
1.4 Druid 的三个设计原则4
1.4.1 快速查询(Fast Query) 5
1.4.2 水平扩展能力(Horizontal Scalability) 5
1.4.3 实时分析(Realtime Analytics) 6
1.5 Druid 的技术特点6
1.5.1 数据吞吐量大6
1.5.2 支持流式数据摄入6
1.5.3 查询灵活且快6
1.5.4 社区支持力度大7
1.6 Druid 的Hello World 7
1.6.1 Druid 的部署环境7
1.6.2 Druid 的基本概念7
1.7 系统的扩展性9
1.8 性能指标10
1.9 Druid 的应用场景10
1.9.1 国内公司11
1.9.2 国外公司12
1.10 小结13
参考资料13
第2 章数据分析及相关软件. 15
2.1 数据分析及相关概念15
2.2 数据分析软件的发展16
2.3 数据分析软件的分类17
2.3.1 商业软件17
2.3.2 时序数据库22
2.3.3 开源分布式计算平台23
2.3.4 开源分析数据库25
2.3.5 SQL on Hadoop/Spark 31
2.3.6 数据分析云服务33
2.4 小结34
参考资料34
第3 章架构详解. 35
3.1 Druid 架构概览35
3.2 Druid 架构设计思想36
3.2.1 索引对树结构的选择37
3.2.2 Druid 总体架构41
3.2.3 基于DataSource 与Segment 的数据结构43
3.3 扩展系统45
3.3.1 主要的扩展45
3.3.2 下载与加载扩展46
3.4 实时节点47
3.4.1 Segment 数据文件的制造与传播47
3.4.2 高可用性与可扩展性48
3.5 历史节点49
3.5.1 内存为王的查询之道49
3.5.2 层的分组功能50
3.5.3 高可用性与可扩展性51
3.6 查询节点51
3.6.1 查询中枢点51
3.6.2 缓存的使用52
3.6.3 高可用性52
3.7 协调节点53
3.7.1 集群数据负载均衡的主宰53
3.7.2 利用规则管理数据生命周期53
3.7.3 副本实现Segment 的高可用性54
3.7.4 高可用性54
3.8 索引服务54
3.8.1 主从结构的架构54
3.8.2 统治节点55
3.8.3 中间管理者与苦工56
3.8.4 任务56
3.9 小结57
第4 章安装与配置. 58
4.1 安装准备58
4.1.1 安装包简介58
4.1.2 安装环境59
4.1.3 Druid 外部依赖60
4.2 简单示例61
4.2.1 服务运行61
4.2.2 数据导入与查询62
4.3 规划与部署65
4.4 基本配置68
4.4.1 基础依赖配置68
4.4.2 数据节点配置调优69
4.4.3 查询节点配置调优69
4.5 集群节点配置示例70
4.5.1 节点规划70
4.5.2 Master 机器配置72
4.5.3 Data 机器配置76
4.6 小结79
第5 章数据摄入. 80
5.1 数据摄入的两种方式80
5.1.1 流式数据源80
5.1.2 静态数据源81
5.2 流式数据摄取81
5.2.1 以Pull 方式摄取82
5.2.2 用户行为数据摄取案例86
5.2.3 以Push 方式摄取89
5.2.4 索引服务任务相关管理接口91
5.3 静态数据批量摄取94
5.3.1 以索引服务方式摄取94
5.3.2 以Hadoop 方式摄取96
5.4 流式与批量数据摄取的结合99
5.4.1 Lambda 架构99
5.4.2 解决时间窗口问题100
5.5 数据摄取的其他重要知识101
5.5.1 数据分片101
5.5.2 数据复制106
5.5.3 索引服务之Tranquility 107
5.5.4 高基数维度优化111
5.6 小结116
第6 章数据查询. 117
6.1 查询过程117
6.2 组件118
6.2.1 Filter 118
6.2.2 Aggregator 121
6.2.3 Post-Aggregator 125
6.2.4 Search Query 129
6.2.5 Interval 129
6.2.6 Context 130
6.3 案例介绍131
6.4 Timeseries 134
6.5 TopN 138
6.6 GroupBy 144
6.7 Select 149
6.8 Search 151
6.9 元数据查询153
6.10 小结156
第7 章高级功能和特性. 157
7.1 近似直方图(Approximate Histogram) 158
7.1.1 分位数和直方图158
7.1.2 实现原理158
7.1.3 如何使用161
7.1.4 近似直方图小结163
7.2 数据Sketch 163
7.2.1 DataSketch Aggregator 163
7.2.2 DataSketch Post-Aggregator 167
7.3 地理查询(Geographic Query) 170
7.3.1 基本原理170
7.3.2 空间索引(Spatial Indexing) 171
7.3.3 空间过滤(Spatial Filter) 171
7.3.4 边界条件(Boundary Condition) 172
7.3.5 地理查询小结172
7.4 Router 172
7.4.1 Router 概览172
7.4.2 路由规则174
7.4.3 配置175
7.4.4 路由策略175
7.5 Kaa 索引服务177
7.5.1 设计背景177
7.5.2 实现178
7.5.3 如何使用182
7.6 Supervisor API 186
7.6.1 创建Supervisor 186
7.6.2 关闭Supervisor 186
7.6.3 获取当前执行的Supervisor 186
7.6.4 获取Supervisor 规范186
7.6.5 获取Supervisor 的状态报告186
7.6.6 获取所有Supervisor 的历史187
7.6.7 获取Supervisor 的历史187
7.7 最佳实践187
7.7.1 容量规划187
7.7.2 Supervisor 的持久化187
7.7.3 Schema 的配置与变更188
7.8 小结188
第8 章核心源代码探析. 189
8.1 如何编译Druid 代码189
8.2 Druid 项目介绍190
8.3 索引结构模块和层次关系192
8.4 Column 结构192
8.5 Segment 195
8.6 Query 模块203
8.6.1 基础组件203
8.6.2 内存池管理206
8.6.3 查询流程概览207
8.6.4 查询引擎225
8.7 Coordinator 模块229
8.8 小结237
第9 章监控和安全. 238
9.1 Druid 监控238
9.1.1 Druid 监控指标238
9.1.2 常用的监控方法245
9.2 Druid 告警250
9.2.1 Druid 告警信息250
9.2.2 Druid 与告警系统的集成250
9.3 Druid 安全251
9.3.1 Druid 与利用Kerberos 加强安全认证的系统集成251
9.3.2 集成外部权限模块完成用户授权255
9.4 小结256
第10 章实践和应用. 257
10.1 小米257
10.1.1 场景一:小米统计服务258
10.1.2 场景二:广告平台实时数据分析260
10.2 优酷土豆262
10.2.1 需求分析262
10.2.2 技术选型及工程实践263
10.2.3 优化策略266
10.3 腾讯267
10.3.1 工程实践267
10.3.2 业务实践270
10.4 蓝海讯通279
10.5 小结284
第11 章Druid 生态与展望. 285
11.1 Druid 生态系统285
11.2 Druid 生态系统资源288
11.2.1 IAP 288
11.2.2 Plywood 289
11.2.3 PlyQL 294
11.2.4 Pivot 297
11.2.5 Druid-Metrics-Kaa 300
11.2.6 Caravel(Airbnb) 301
11.3 Druid 的社区讨论组302
11.4 Druid 展望302
参考资料303
附录A 常见问题(FAQ) 304
附录B 常用参数表. 312