前言
我写本书的初衷是将自己在企业工作中应用的技术归纳总结,系统地将大数据处理相关技术融合在一起,给已经从事大数据相关技术研发工作的朋友,或是准备从其他行业转行进入大数据领域学习相关技术的朋友提供一份参考资料。希望本书能够帮助更多从事大数据相关工作的人,也希望通过本书结识更多热爱大数据的朋友。
目前,大数据已不只停留在概念阶段,而是在各领域成功落地,并取得了丰硕的成果。大数据已经渗透到生活中的各个方面,距离我们最近且与我们生活息息相关的大数据项目有交通大数据、医疗大数据、金融大数据、社交媒体大数据、互联网大数据等。如此多的大数据项目能够成功落地,关键原因在于数据来源的多样化,数据量的爆发式增长,新兴技术的快速发展,以及市场创新需求的不断增多,这为各种大数据项目提供了庞大的数据源,通过多种技术的综合应用,可不断挖掘出大数据背后的社会价值和商业价值。
随着开源社区的不断发展,越来越多的优秀项目被开源,以处理各种大数据场景下的问题和挑战。作为目前大数据生态系统内的早期开源项目,Hadoop在廉价机器上实现了分布式数据存储和高性能分布式计算,大大降低了数据存储和计算成本。Hadoop提供的分布式存储系统HDFS、大数据集并行计算编程模型MapReduce、资源调度框架YARN已经被广泛应用,为大数据生态系统的发展奠定了坚实的基础。如今,Hadoop大数据生态圈发展已经非常全面,涉及领域众多,在大数据处理系统中常用的技术框架包括数据采集、数据存储、数据分析、数据挖掘、批处理、实时流计算、数据可视化、监控预警、信息安全等。下图展示了大数据生态系统内比较流行并且已经在生产环境验证过的开源技术。
(1)Spark
Spark是由加州大学伯克利分校AMP实验室开源的分布式大规模数据处理通用引擎,具有高吞吐、低延时、通用易扩展、高容错等特点。Spark内部提供了丰富的开发库,集成了数据分析引擎Spark SQL、图计算框架GraphX、机器学习库MLlib、流计算引擎Spark Streaming。Spark在函数式编程语言Scala中实现,提供了丰富的开发API,支持Scala、Java、Python、R等多种开发语言。同时,它提供了多种运行模式,既可以采用独立部署的方式运行,也可以依托Hadoop YARN、Apache Mesos等资源管理器调度任务运行。目前,Spark已经在金融、交通、医疗、气象等多种领域中广泛使用。
大数据生态系统中的开源技术
(2)Druid
Druid是由美国MetaMarkets公司创建并开源的分布式提供海量时序数据存储、支持实时多维数据分析的OLAP系统,主要应用于广告数据分析、网络系统监控等场景。Druid具有高吞吐、易扩展、高容错、低延迟、按时间序列存储等特点。
(3)Flume
Flume是由Cloudera公司开发的分布式、高可用的日志收集系统,是Hadoop生态圈内的关键组件之一,目前已开源给Apache。Flume的原始版本为Flume-OG,经过对整体架构的重新设计,现已改名为Flume-NG。Flume发展到现在已经不局限于日志收集,还可以通过简单的配置收集不同数据源的海量数据并将数据准确高效地传输到不同的中心存储。目前Flume可对接的主流大数据框架有Hadoop、Kafka、ElasticSearch、Hive、HBase等。在使用Flume的过程中,通过配置文件就可以实现整个数据收集过程的负载均衡和故障转移,而不需要修改Flume的任何代码。得益于优秀的框架设计,Flume通过可扩展、插件化、组合式、高可用、高容错的设计模式,为用户提供了简单、高效、准确的轻量化大数据采集工具。
(4)Kafka
Kafka是由LinkedIn开源的分布式消息队列,能够轻松实现高吞吐、可扩展、高可用,并且部署简单快速、开发接口丰富。目前,各大互联网公司已经在生产环境中广泛使用,而且已经有很多分布式处理系统支持使用Kafka,比如Spark、Strom、Druid、Flume等。
(5)InfluxDB
InfluxDB是一款开源分布式时序数据库,非常适合存储监控系统收集的指标数据。时序数据库顾名思义就是按照时间顺序存储指标数据,即监控系统的场景大部分是按照时间顺序存储各项指标数据,过期时间太长的指标可能将不会再关注,所以为了提高数据库的存储率,提高查询性能,需要定期删除过期指标。InfluxDB的诸多特性非常适合监控系统的使用场景。
本书将详细介绍上述技术的原理,通过实践演示每种技术的实际应用场景。希望通过理论与实践相结合的方式使内容更通俗易懂,帮助读者根据实际的业务场景选择合适的技术方案,相信大数据在未来的发展中还会创造更多的价值。
内容概述
本书分三部分展开介绍:
第一部分(第1章)主要介绍了企业大数据系统的前期准备工作,包括如何构建企业大数据处理系统的软件环境和集群环境。
第二部分(第2~7章)首先介绍了Spark的基本原理,Spark 2.0版本的Spark SQL、Structured Streaming原理和使用方法,以及Spark的多种优化方式;然后,介绍了Druid的基本原理、集群的搭建过程、数据摄入过程,以及在查询过程中如何实现Druid查询API;接着介绍了日志收集系统Flume的基本架构和关键组件,以及分层日志收集架构的设计与实践;最后介绍了分布式消息队列Kafka的基本架构和集群搭建过程,以及使用Java语言实现客户端API的详细过程。
第三部分(第8~9章)主要介绍了企业大数据处理的两个实际应用案例,分别是基于Druid构建多维数据分析平台和基于JMX指标的监控系统。
目标读者
本书适合从事大数据及相关工作的工程师阅读,也适合准备进入大数据领域的大数据爱好者学习、参考。
读者反馈
本书是在业余时间完成的,由于水平有限,编写时间仓促,书中可能会出现介绍不够详细或者有错误的地方,敬请读者谅解。如果遇到任何问题或者寻求技术交流都可以通过如下联系方式与笔者进行沟通。
大数据爱好者交流QQ群:124154694
个人邮箱:xiaoguanyu_java@163.com
致谢
感谢在本书的写作过程中帮助过笔者的朋友、同事、老师,感谢你们一次又一次的帮助和支持!
感谢机械工业出版社杨福川老师,本书从2016年6月份开始筹划,确定了基本的框架,虽然由于笔者个人原因导致写作速度缓慢,但是杨老师一直积极推动本书的出版,并且不断指导笔者写作,感谢杨老师给予的理解、帮助与支持。感谢机械工业出版社编辑李艺老师,李艺老师用严谨的工作态度为本书做了专业的编辑工作,并且耐心指导笔者完成了本书的编写工作。
感谢乐视智能中心大数据部的同事们,感谢他们在工作中帮助笔者分担工作任务;感谢上级领导的耐心指导,使笔者能够顺利地完成工作任务并腾出时间进行写作。在此特别感谢技术总监罗宏宇、技术经理陆松林、刘韦宏、姚会航、张迪等。
感谢家人在工作和生活中对笔者的帮助和照顾。感谢父母,平时因工作原因很少回家看望,但他们一直在背后支持我、鼓励我。感谢妻子为家庭和工作的付出。家人的陪伴与支持是笔者不断学习、努力奋斗的强大后盾!