本书全面介绍Elasticsearch Hadoop技术用于大数据分析以及数据可视化的方法。共分7章: 环境部署; 初识ES-Hadoop; 深入理解Elasticsearch; 利用Kibana进行大数据可视化; 实时分析; ES-Hadoop配置; 与Hadoop生态系统集成。
Hadoop已经是业界公认的大数据处理的事实标准,对海量数据的存储与处理都是不在话下,不过,随着业务的复杂化以及需求的多变,分析师们迫切地想要看到结果从而进行分析,而目前Hadoop离线+批量处理的方式稍微有点力不从心,有没有一种能够更灵活地使用和加工数据的方法呢?鉴于此,Elasticsearch脱颖而出,Elasticsearch可以很方便地对海量数据进行搜索与聚合,并且能够实时响应,用户无需为每次不同的查询而重新定义Schema或者预处理。
数据科学家可以非常灵活地对数据进行各种维度的钻取与分析,把更多的精力关注在业务本身和挖掘数据本身的价值,并且可以随时根据上一个查询得到的线索随时去构建新的查询从而继续挖掘,这在以前是不敢想象的。另外,Elasticsearch还能和Hadoop进行结合,Hadoop 适合海量数据的归档与离线预处理,Elasticsearch则进行实时检索与分析,而本书是目前介绍这两方面结合使用的非常好的中文资料,相信对您一定会大有裨益。
在2004年到2006年期间,关于Hadoop的核心组件的讨论都是围绕MapReduce的。Hadoop天生具有分布式运算能力和水平扩展能力,这些特性使其在各个行业被广泛应用。那些超大型的组织认识到Hadoop带来的价值,包括处理TB和PB级数据、采集处理社交数据、利用廉价的商业硬件存储海量数据等。然而,大数据解决方案除了这些以外,还需要解决数据处理的实时性问题,尤其是对非结构化数据的实时性处理。
Elasticsearch是一款高效的分布式搜索及分析引擎,可以让你实时了解你的海量数据。它丰富的查询能力可以帮助你进行复杂的全文检索、基于地理位置的分析及异常检测等。Elasticsearch-Hadoop也被简称为ES-Hadoop,是Elasticsearch和Hadoop的连接器,通过它可以非常方便地在Hadoop生态系统和Elasticsearch之间进行数据交互。你也可以将流式数据从ApacheStorm或者ApacheSpark写入Elasticsearch进行实时分析。
本书的目标是让你获得真正的利用Hadoop和Elasticsearch的能力。我将带你一步一步地对海量数据进行数据发现和数据探索。你将学习如何将Elasticsearch与Pig、Hive、Cascading、ApacheStorm和ApacheSpark等Hadoop生态系统工具进行无缝集成。通过本书的学习,你可以使用Elasticsearch创建自己的分析报表。通过强大的数据分析和可视化平台Kibana,你可以对要展示的图形、大小、颜色等进行控制。
在本书中我使用了不少很有意思的数据集,通过这些数据集你将获得真实的数据探索体验。因此,你可以使用我们介绍的工具和技术非常快速地构建基于特定行业的解决方案。我衷心希望阅读本书能够给你带来有趣的学习体验。
贾传青,数据架构师,Oracle OCM,DB2迁移之星,TechTarget特约作家,从数据库向大数据转型的先行者,酷爱摄影。曾服务于中国联通、中国电信、建设银行、PICC等,目前供职于一家大数据解决方案提供商,致力于大数据技术的应用与实践。著有《开源大数据分析引擎Impala实战》一书。
第1章 环境部署 1
1.1 安装部署Hadoop集群 1
Java安装和配置 2
用户添加和配置 2
SSH认证配置 3
Hadoop下载 4
环境变量配置 4
Hadoop配置 5
配置core-site.xml 6
配置hdfs-site.xml 6
配置yarn-site.xml 6
配置mapred-site.xml 7
格式化HDFS 7
启动Hadoop进程 8
1.2 安装Elasticsearch及相关插件 8
下载Elasticsearch 9
配置Elasticsearch 9
安装Head插件 11
安装Marvel插件 11
启动Elasticsearch 12
1.3 运行WordCount示例 13
下载编译示例程序 13
将示例文件上传到HDFS 13
运行第一个作业 14
1.4 使用Head 和 Marvel浏览数据 16
使用Head浏览数据 16
初识Marvel 18
使用Sense浏览数据 19
小结 21
第2章 初识ES-Hadoop 22
2.1 理解WordCount程序 23
理解Mapper 23
理解Reducer 24
理解Driver 25
使用旧的API——org.apache.hadoop.mapred 28
2.2 实际案例——网络数据监控 28
获取并理解数据 28
明确问题 29
解决方案 30
解决方案1——预聚合结果 30
解决方案2——直接查询聚合结果 32
2.3 开发MapReduce作业 33
编写Mapper类 34
编写Driver 37
编译作业 38
上传数据到HDFS 41
运行作业 41
查看TOP N结果 42
2.4 将数据从Elasticsearch写回HDFS 44
了解Twitter数据集 44
导入Elasticsearch 45
创建MapReduce作业 46
编写Tweets2HdfsMapper 46
运行示例 50
确认输出 50
小结 52
第3章 深入理解Elasticsearch 53
3.1 理解搜索 53
观念转换 54
索引 54
类型 55
文档 55
字段 55
3.2 与Elasticsearch交互 56
Elasticsearch的CRUD 56
创建文档 56
获取文档 57
更新文档 58
删除文档 58
创建索引 58
映射 59
数据类型 60
创建映射 61
索引模板 62
3.3 控制索引过程 63
什么是反转索引 63
输入数据分析 64
停止词 64
大小写 65
词根 65
同义词 65
分析器 65
3.4 Elastic查询 67
编写查询语句 68
URI查询 68
match_all查询 68
term查询 68
boolean查询 70
match查询 71
range查询 72
wildcard查询 73
过滤器 73
3.5 聚合查询 75
执行聚合查询 76
terms聚合 76
histogram聚合 78
range聚合 78
geo distance聚合 79
嵌套聚合 81
自测题 82
小结 82
第4章 利用Kibana进行大数据可视化 83
4.1 安装部署 83
Kibana安装 84
准备数据 84
自测题 85
启动Kibana 86
4.2 数据发现 87
4.3 数据可视化 90
饼图 91
堆积柱状图 94
使用堆积柱状图完成日期直方图 96
面积图 97
饼图组图 98
环形图 98
瓦片地图 99
自测题 100
4.4 动态图表 101
小结 104
第5章 实时分析 105
5.1 了解Twitter趋势分析器 105
实现目标 106
Apache Storm安装 107
5.2 将流式数据接入Storm 107
编写Storm spout 108
编写Storm bolt 110
创建Storm topology 112
编译运行Storm作业 113
5.3 趋势分析 114
significant term聚合 114
使用Kibana分析趋势 116
5.4 使用Percolator对推文分类 117
Percolator 118
Percolator优化 120
推文分类 121
小结 124
第6章 ES-Hadoop配置 125
6.1 分布式环境中的Elasticsearch 125
集群和节点 126
节点类型 126
节点发现 128
数据分布 129
分片 129
副本 129
分片分配 130
6.2 ES-Hadoop架构 132
动态并行 132
写入Elasticsearch 133
从Elasticsearch中读取 134
失败捕获 134
数据本地化 135
6.3 生产环境配置 135
硬件 135
内存 135
CPU 135
磁盘 136
网络 136
集群安装 137
集群拓扑结构 137
设置名称 138
设置路径 138
设置内存 139
脑裂问题 140
设置恢复参数 141
预设配置 142
数据导入 142
全文检索 144
快速聚合 144
生产环境部署检查列表 145
6.4 集群管理 146
监控集群健康 146
备份和恢复 149
数据备份 149
数据恢复 150
小结 151
第7章 与Hadoop生态系统集成 152
7.1 与Pig集成 152
Pig安装 154
向Elasticsearch中导入数据 155
从JSON源写数据 157
类型转换 157
从Elasticsearch中读取数据 158
7.2 与Hive集成 158
安装Apache Hive 158
向Elasticsearch中导入数据 159
从JSON源写数据 161
类型转换 161
从Elasticsearch中读取数据 162
7.3 与Cascading集成 163
向Elasticsearch中导入数据 163
编写一个Cascading作业 163
运行作业 164
从Elasticsearch中读取数据 165
编写一个reader作业 165
使用Lingual 165
7.4 与Spark集成 167
安装Spark 168
向Elasticsearch中导入数据 168
使用SparkSQL向Elasticsearch中导入数据 169
从Elasticsearch中读取数据 170
使用SparkSQL从Elasticsearch中读取数据 170
7.5 与YARN集成 171
小结 172
附录 配置 174
基本配置 174
es.resource 174
es.resource.read 174
es.resource.write 175
es.nodes 175
es.port 175
读写配置 175
es.query 175
es.input.json 176
es.write.operation 177
es.update.script 177
es.update.script.lang 177
es.update.script.params 177
es.update.script.params.json 178
es.batch.size.bytes 178
es.batch.size.entries 178
es.batch.write.refresh 178
es.batch.write.retry.count 178
es.batch.write.retry.wait 179
es.ser.reader.value.class 179
es.ser.writer.value.class 179
es.update.retry.on.conflict 179
映射配置 179
es.mapping.id 179
es.mapping.parent 180
es.mapping.version 180
es.mapping.version.type 180
es.mapping.routing 180
es.mapping.ttl 180
es.mapping.timestamp 181
es.mapping.date.rich 181
es.mapping.include 181
es.mapping.exclude 181
索引配置 181
es.index.auto.create 181
es.index.read.missing.as.empty 182
es.field.read.empty.as.null 182
es.field.read.validate.presence 182
网络配置 182
es.nodes.discovery 182
es.nodes.client.only 183
es.http.timeout 183
es.http.retries 183
es.scroll.keepalive 183
es.scroll.size 183
es.action.heart.beat.lead 183
认证配置 184
es.net.http.auth.user 184
es.net.http.auth.pass 184
SSL配置 184
es.net.ssl 184
es.net.ssl.keystore.location 184
es.net.ssl.keystore.pass 184
es.net.ssl.keystore.type 184
es.net.ssl.truststore.location 184
es.net.ssl.truststore.pass 185
es.net.ssl.cert.allow.self.signed 185
es.net.ssl.protocol 185
es.scroll.size 185
代理配置 185
es.net.proxy.http.host 185
es.net.proxy.http.port 185
es.net.proxy.http.user 185
es.net.proxy.http.pass 186
es.net.proxy.http.use.system.props 186
es.net.proxy.socks.host 186
es.net.proxy.socks.port 186
es.net.proxy.socks.user 186
es.net.proxy.socks.pass 186
es.net.proxy.socks.use.system.props 186
第5章实时分析
我们已经了解了如何以批处理方式对不同的数据源进行数据采集、分析和可视化。如果缩短分析的时间周期可以节省时间和金钱成本,那么实时分析就非常有必要了。当金融交易的交易量骤减或者某些商品的库存量变得太小时,我们希望立刻就能看到数据分析的结果来寻找原因,而不是让数据在晚上经历批处理任务,第二天才能从分析师那里看到分析的报告。
在本章中,我们会讨论如何使用ApacheStorm将数据导入Elasticsearch并进行实时分析。在很多场景下我们将要介绍的这些Elasticsearch高级特性会成为我们的瑞士军刀。
在本章中,我们将介绍以下内容:
●了解Twitter趋势分析器
●将流式数据接入Storm
●趋势分析
●使用Percolator对推文分类
5.1了解Twitter趋势分析器
要学习一个东西最好的方式就是运用它。这也正是我们本章要做的。所以,让我们先来了解一下本章要做的东西。
实现目标
Twitter是可能包括你的客户在内的很多人发表自己见解的地方。通过从海量的推文中分析特定的关键字或者话题可以进行趋势分析。在本章中,我们将使用ApacheStorm和Elasticsearch开发自己的Twitter趋势分析器。当然,中间还需要使用ES-Hadoop来做这两个组件的整合。
通常情况下,趋势分析器可以根据关键字或者话题展示其趋势。比如,#elasticsearch和#apachestorm就是上个月的热门话题。我们还可以找出像BigData这样更高级别的热门话题。这个趋势其实是通过字符串进行精确匹配,将所有大数据生态系统的术语进行聚合得到的。类似地,我们可以通过添加和某个类别相关的关键词或者话题来创建一个新的类别。我们将使用分类技术来对流式的推文数据进行类别匹配。不止如此,你还可以以天、周、年等不同的时间周期来查看趋势。
图5-1是我们要开发的趋势分析器的整理流程图。
图5-1
如图5-1中显示,我们将使用StormSpout来接收实时推文数据,将数据按照不同类别分类之后导入Elasticsearch中,在Elasticsearch中使用segnificantterms聚合计算出不同的趋势,然后使用Kibana进行展示。这个流程看起来挺简单,然而基于海量数据完成这个处理流程并不容易。同样的,分类的过程也不简单。我们将使用Elasticsearch中的Percolator来解决分类问题。
我们需要先安装ApacheStorm,用它来接收数据,并把数据导入Storm。
ApacheStorm安装
ApacheStorm是一个分布式实时计算引擎。它可以对那些Hadoop使用批处理模式处理的数据进行实时计算。
使用如下命令下载ApacheStorm的相应版本(撰写本书时,Storm的稳定版本是0.9.5):
$cd/usr/local
$sudowgethttp://www.apache.org/dyn/closer.cgi/storm/apache-storm-0.9.5/apache-storm-0.9.5.tar.gz
使用如下命令将下载的文件解压到storm目录:
$sudotar-zxvfapache-storm-0.9.5.tar.gz
$sudomvapache-storm-0.9.5storm
通过如下命令在~/.bashrc文件中将storm二进制添加到PATH变量中:
$exportPATH=$PATH:/usr/local/storm-0.9.5/bin
我们现在安装的storm是以本地模式安装的。如果你需要在生产环境中以集群模式安装storm,就需要安装Zookeeper,还需要独立的nimbus和supervisor。
5.2将流式数据接入Storm
很多读者可能已经对Storm有了充分的了解。但是,在这里我还是要对那些不太了解Storm的读者进行一个简单的介绍。
Storm为流式数据提供了一个实时计算框架。因此,流是Storm的数据抽象,是由无限制的tuple组成的序列。在Storm术语中,tuple是流式数据的一个单元。
Storm作业的工作组件包括spout和bolt。spout是流的数据源,而bolt消费这些流。你可以通过对spout和bolt进行级联生成topology。topology是我们可以向集群提交执行的顶层抽象。
图5-2是一个Storm的topology示例,显示数据是如何从数据源经过处理并存储的。
图5-2
现在我们编写一个Storm作业,它负责监听实时的推文数据,并把它们导入Elasticsearch中。简单起见,我们只是实现简单的监听功能,不对推文进行分类处理,直接把我们需要的数据导入Elasticsearch中。
图5-3显示了我们将要实现的Twitter趋势分析器的topology。
图5-3
编写Stormspout
我们使用Twitter4jAPI接收实时的Twitter数据流。然后,我们创建了一个状态监听器,它负责接收twitter4j.Status对象中的推文。
从如下代码片段中可以看到监听类是在Stormspout中以内部类的形式定义的:
publicclassTweetsCollectorSpoutextendsBaseRichSpout{