描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787519843984
跟上Apache Drill的步伐!Apache Drill是一个可扩展的分布式SQL查询引擎,它可以从各种主流文件格式中读取数据,比如Parquet、JSON和CSV。它可以访问HDFS或类似S3这样的原生云存储系统,可以与Hive metastore集成,也可以与HBase、MongoDB这样的分布式数据库或传统的关系型数据库集成。它可以在你的笔记本电脑上运行,也可以被部署在超大规模的集群中。
在本书中,Charels Givre和Paul Rogers两位Drill项目的Committer向分析师和数据科学家展示了如何使用这个强大的工具对原始数据进行查询和分析。当今的数据科学家通常需要花费至少80%的时间在收集和清洗数据上,通过阅读本书你会了解到如何使用Drill更高效地分析数据,降低产出数据分析结果所需要的时间。
- 使用Drill来清洗、准备和汇总原始数据供后期分析使用。
- 对日志文件、Parquet文件、JSON和其他复杂的数据文件进行查询。
- 使用标准SQL对Hadoop、关系型数据库、MongoDB和Kafka进行查询。
- 通过各种编程语言访问Drill。
- 使用Drill分析各种结构复杂或存在二义性的数据。
- 通过自定义函数扩展Drill的功能,完成复杂的分析任务。
- 为网络安全、图片元数据或机器学习数据提供分析能力。
目录前言 1第1 章 Apache Drill 入门 7什么是Apache Drill 8Drill 用途广泛 8Drill 非常易用 10有关Drill 的性能 11大数据简史 11大数据生态中的Drill 13Drill 与类似工具的比较 13第2 章 安装与运行 15准备系统环境 16Windows 环境下的特殊配置 16在Windows 上安装Drill 18在Windows 上启动Drill 18在macOS 或Linux 上安装嵌入模式的Drill 19在macOS 或Linux 上以嵌入模式运行Drill 20在macOS 或 Linux 上安装分布式模式的Drill 21为Drill 准备集群环境 22启动分布式模式的Drill 23连接集群 23小结 24第3 章 Apache Drill 概述 25Apache Hadoop 生态 25Drill 是一个低延迟的查询引擎 26使用HDFS 进行分布式数据处理 27Drill 系统结构 27Drill 操作概览 28Drill 是一个查询引擎,不是数据库 29Drill 操作概述 30Drill 组件 30SQL 会话状态 30编译查询语句 31查询语句执行 36低延迟特性38小结 41第4 章 查询包含分隔符的数据 42通过Drill 查询数据的几种方式 42其他操作接口 43Drill SQL 查询格式 44选择数据源44定义工作区46指定默认数据源 47在查询中访问列 49带表头并包含分隔符的数据 51Table 函数 53查询目录中的数据 53理解Drill 的数据类型 55使用字符串处理函数清洗和准备数据 57复杂数据转换函数 59操作Drill 中的日期和时间 60把字符串转换为日期 61对日期进行重新格式化 63日期计算与操作 63Drill 中的日期时间函数 64创建视图 65使用Drill 进行数据分析 66通过聚合函数对数据进行统计 68查询包含分隔符数据的常见问题 75列名中的空格 75列名中的非法字符 76字段名中的保留字 76小结 77第5 章 分析复合与嵌套数据 78数组与Map 78Drill 中的数组 79在Drill 中访问Map(键?C 值对) 81查询嵌套数据 83使用Drill 分析日志文件 91配置Drill 读取httpd Web 服务器的日志 91查询Web 服务器日志 92用Drill 对其他类型的日志进行分析 97小结 100第6 章 把Drill 连接到数据源 101查询多种数据源 102配置新的存储插件 102用Drill 连接关系型数据库 103通过Drill 查询Hadoop 数据 108用Drill 连接并查询HBase 108用Drill 查询Hive 数据 110连接Kafka 查询流数据 113提高Kafka 查询的性能 115连接并查询Kudu 115用Drill 连接并查询MongoDB 数据 116把Drill 连接到云存储 116用Drill 从OpenTSDB 查询时间序列数据 121小结 122第7 章 连接Drill 123理解Drill 的接口 123JDBC 与Drill 124ODBC 与Drill 125Drill 的REST 接口 127使用Python 连接Drill 128使用drillpy 对Drill 发起查询 129使用pydrill 连接Drill 130其他通过Python 连接Drill 的方法 131用R 语言连接Drill 133使用sergeant 在R 中查询Drill 133通过Java 连接Drill 135在PHP 中查询Drill 136使用连接器137在PHP 中执行Drill 查询 137在PHP 中操作Drill 138使用Nodejs 查询Drill 139在BI 工具中使用Drill 作为数据源 139使用Apache Zeppelin 和Drill 分析数据 139使用Apache Superset 分析数据 145小结 151第8 章 用Drill 完成数据工程工作 152读时Schema 152SQL 关系模型 153数据生命周期:数据探索到生产 154Schema 推导 155数据源推导 155存储插件 156存储配置 156工作区 157查询目录 159默认Schema 159文件类型推导 160格式插件与格式配置 160格式推导 161文件格式变种 162Schema 推导概述163分布式扫描 165带分隔符数据的Schema 推导 167CSV 文件处理小结 173JSON 文件的Schema 推导 175二义性数值Schema 178在文件间保证Schema 一致 184JSON 对象 186Drill 中的JSON 列表 189JSON 小结 193在Drill 中使用Parquet 文件格式 194Parquet 中的Schema 进化 195分区数据目录 195定义表工作区 198处理生产环境中的查询 199捕捉Schema 映射视图 199在脚本中运行复杂查询 200小结 201第9 章 在生产环境部署Drill 202安装Drill 202前置需求 203生产环境安装 204配置ZooKeeper 205内存配置 206配置日志 208测试安装是否成功 209分发Drill 可执行文件和配置 210启动Drill 集群 211配置存储 212使用Apache Hadoop HDFS 213使用Amazon S3 214准入控制 217其他配置 219用户自定义函数与自定义插件 219安全 220日志级别 220控制CPU 使用 222监控 223监控Drill 的进程 224监控JMX 指标 224监控查询 225其他部署选项 225MapR 安装程序 226Drill-on-YRAN 226Docker 226小结 227第10 章 搭建开发环境 228安装Maven 228创建Drill 的编译环境 229设置Git 并获取源代码 229从代码编译Drill 230安装IDE 231小结 231第11 章 编写用户自定义函数 232用例:找出合法的信用卡号码 232Drill 中的用户自定义函数是怎么工作的 234Drill 的简单UDF 结构 234pomxml 文件 235函数文件 236简单函数API 240完整的代码241构建与安装UDF 243静态安装UDF 243动态安装UDF 243复合函数:返回Map 或数组的UDF 244例子:解析User Agent 元数据 245ComplexWriter 对象 246编写聚合UDF 248聚合函数API 249聚合UDF 示例:肯德尔秩相关系数 249小结 252第12 章 编写格式插件 253正则表达式格式插件 253基于Easy 框架创建格式插件 255创建Maven 的pomxml 文件 256创建插件包258Drill 模块配置 258格式插件配置 259注意事项 259创建正则表达式格式插件配置类 260版权声明头与代码格式 262测试配置 262解决配置问题 263排查问题 264创建格式插件类 264创建测试文件 267配置RAT 267高效调试 267创建单元测试 268Drill 是如何找到插件的 270记录读取器 270测试读取器的壳 273日志 274出错处理 274初始化 275解析正则表达式 276定义列名 276投影 277记录列投影映射 278空投影 278全投影 279部分投影 279打开文件 281记录批 282Drill 的列存结构 282定义向量 283读取数据 284把数据放入向量 285释放资源 286测试读取器 286测试通配符场景 286测试显式投影 288测试空投影288扩展 288其他细节 290文件块 290默认格式配置 290下一步 292生产版本 292给Drill 贡献代码:使用Pull Request 292维护你的分支 293创建插件项目 293小结 294第13 章 特殊用法 296查找在特定区域拍摄的照片 296分析Excel 文件 297pomxml 文件 298Excel 自定义记录读取器 299使用Excel 格式插件 303用Drill 分析网络数据包(PCAP 文件) 304查询PCAP 数据文件的例子 304使用Drill 分析Twitter 数据 308在机器学习流程中使用Drill 309通过Drill 进行预测 310建立与序列化模型 310编写UDF 封装类 311通过UDF 进行预测 313小结 313附录A Drill 函数列表 315附录B Drill 格式化字符串 331
前言
人类具备了对海量数据进行分析处理的能力,这也许是21 世纪最重要的技术进步之一。但是直到现在,用于大数据集分析的工具还是过于复杂或者昂贵(也可能是既复杂又昂贵)。Apache Drill 具备改变这一现状的潜力。
Apache Drill 为数据分析领域带来了无限新的可能,它允许用户使用一种标准的语言查询各种不同的数据源。
读者对象
我们把本书的目标读者设定为三种类型:数据分析师或其他使用Drill 进行数据查询的人、在生产环境中部署和维护Drill 的系统管理员,以及编写代码扩展Drill 功能的开发人员。
为何编写本书
三年前,Charles 在San Jose 召开的Strata 会议上了解到了Drill,他觉得Drill 很可能为数据分析领域带来一场革命。在与MapR 的首席科学家Ted Dunning 进行了几次交流后,Charles 意识到Drill 在安全领域的数据分析上大有可为。不过在那时,很多Drill 的功能都还没有文档,有关Drill 开发的信息也非常零散或根本找不到。Charles 想要扩展Drill 的功能,但是不知道应该从何入手。如果Charles 现在想重新学习Drill,那本书就包含了他想了解的一切注1。
Paul 在几家商业智能(BI)公司接触过不少数据查询工具和数据库工具。当他看到Drill 时,觉得它集其他很多工具之大成,而且是开源和可扩展的。Paul 加入了Drill的团队,并着手宣传Drill 的功能。
本书向你展示了如何使用Drill 高效地分析数据。本书不能替代Drill 的文档,它定位于学习Drill 的向导。它是使用Drill 多年的经验积累,并且解释了什么是Drill 以及它是如何解决用户问题的。
这本书也是为打算扩展Drill 功能的人准备的。当你开始试用Drill,你就可能想要为它开发一些当前缺失的功能。当Charles 刚开始使用Drill 时,没有足够的文档是一个很大的问题,本书的目标就是解决这个问题。第8~12 章以深入浅出的语言介绍了如何去扩展Drill 的功能。
本书组织结构
本书的读者对象有三种,各自具备不同的知识背景。以下是每个章节内容的设计思路:
• 第1~3 章是对Drill 的基本介绍,并介绍如何把Drill 运行起来。
• 第4~7 章是为数据分析师、数据科学家和其它使用Drill 进行数据查询的人准备的。除了第7 章以外,其他几个章节都需要读者理解SQL。
• 第8、10~12 章介绍了如何扩展Drill 的功能。这些章节需要读者具备Java 开发的基本能力。
• 第9 章介绍了在生产环境中安装和配置Drill 的一些琐碎的细节。如果你是一名系统管理员,这一章就是为你准备的。
• 第13 章介绍了很多Drill 的应用案例。不管你是从事什么工作,阅读这章的内容都可以帮助你进一步领略Drill 的强大功能。
在线资源
本书中使用的所有代码和数据都可以从本书的GitHub 仓库(https://github.com/cgivre/drillbook)下载。可以在GitHub 的Issue 页上报代码中存在的问题。
Drill 本身也有很详尽的在线文档(https://drill.apache.org)可供参考。
本书内容约定
在本书中,按以下约定进行排版:
斜体(italic)
表示新名词、URL、电子邮件地址、文件名以及文件扩展名。
等宽字体(constant width)
用于程序代码,以及在正文中引用变量、函数名称、数据类型、环境变量、语句、关键字等代码中的元素。
等宽粗体(constant width bold)
需要用户输入的命令或其他文本。
等宽斜体(constant width italic)
需要替换成用户自定义的值或根据上下文决定的值。
使用示例代码
本书辅助学习材料(代码示例和练习等)可以从本书的GitHub 仓库https://github.com/cgivre/drillbook 下载。
本书存在的目的就是帮助你完成工作。总的来说,你可以在自己的程序或文档中使用本书所提供的示例代码。如果不是对这些代码进行大规模的分发,就不需要联系我们获取授权。比如,编写一个程序,里面使用了本书中几段示例代码是不需要申请授权的。出售或分发包含O’Reilly 图书完整示例代码的CD-ROM 则需要申请授权。引用书中的部分内容或示例代码来回来问题不需要授权。在你的产品文档中包含本书中大量的示例代码则需要授权。
我们不强制要求署名,但如果你这么做,我们深表感激。署名一般包括书名、作者、出版社和国际标准书号(ISBN)。例如:“Learning Apache Drill by Charles Givreand Paul Rogers (O’Reilly). Copyright 2019 Charles Givre and Paul Rogers, 978-1-492-03279-3”。
如果你觉得你对示例代码的使用行为超出了合理的方式或超出了上述的允许不获取授权的场景,可以与我们取得联系:[email protected]。
O’Reilly 在线学习平台(O’Reilly Online Learning)
近40 年来,O’Reilly Media 致力于提供技术和商业培训、
知识和卓越见解,来帮助众多公司取得成功。
我们拥有独一无二的专家和革新者组成的庞大网络,他们通过图书、文章、会议和我们的在线学习平台分享他们的知识和经验。O’Reilly 的在线学习平台允许你按需访问现场培训课程、深入的学习路径、交互式编程环境,以及O’Reilly 和200 多家其他出版商提供的大量文本和视频资源。有关的更多信息,请访问http://oreilly.com。
访问http://oreilly.com/safari 了解更多信息。
联系我们
任何有关本书的意见或疑问,请按照以下地址联系出版社。
美国:
O’Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
中国:
北京市西城区西直门南大街2 号成铭大厦C 座807 室(100035)
奥莱利技术咨询(北京)有限公司
我们为本书提供了一个网页,上面有勘误表、示例和其他相关的信息,请访问:http://bit.ly/learning-apache-drill。
有关本书的建议或者技术问题,请发邮件到[email protected]。
有关其他图书、讲座、会议、新闻的信息,请访问我们的网站:http://www.oreilly.com。
我们的Facebook:http://facebook.com/oreilly。
我们的Twitter:http://twitter.com/oreillymedia。
我们的YouTube:http://www.youtube.com/oreillymedia。
致谢
感谢Arina Ielchiieva、John Omernik、Aman Sinha 和 Parth Chandra 在百忙之中抽出时间帮助我们进行技术审阅。感谢Jeff Bleiel 和整个O’Reilly 编辑团队与我们的紧密合作。最后还要感谢专注Drill 项目的贡献者,没有他们的帮助,就不会有本书的诞生。
来自Charles 的特别致谢
我想特别感谢我的妻子Alisheva 和孩子们:Mel、Dovie、Rozie 和Goldie,你们原谅我经常缺席家庭活动并因为撰写此书而工作到深夜,还支持我追求Drill 以及其他的极客爱好。没有你们的支持,这本书就无法完成。
我还要感谢Drill 开发委员会中与我一起工作的所有成员,他们教会了我很多有关Java 开发、GitHub 和编写生产级代码的知识。感谢合著者Paul,他提出了无数宝贵的建议,还告诉了我很多Drill 内部实现原理。
最后,感谢Ted Dunning 和Ellen Friedman 邀请我参与这个项目,感谢Drill 项目管理委员(PMC)会认可我对Drill 的贡献,让我成为Drill 的Committer 以及PMC的一员。
来自Paul 的特别致谢
我想特别感谢我的妻子Anne 和孩子们:Delaine、Forrest 和Pauline,因为我常常在晚上或周末消失,埋头撰写本书。
我还想感谢Drill 开发团队在过去的两年中对我的无私帮助,回答我在编写本书过程中遇到的各种问题。这本书是他们把知识传递给其他人的一个途径。感谢Drill 最初的开发者们,他们创造了这个出色的产品,也感谢后来一直参与改进Drill 的其他开发者。我非常荣幸可以成为Drill PMC 的一员,并与如此出色的团队一起工作。感谢Charles 不断推动这本书的创作进程直到完成,并在此过程中分享他从Drill 用户的视角所观察到的东西。
评论
还没有评论。