这是一部教你如何从0到1架构与实现一个企业级大数据平台的著作,是作者在大数据和系统架构领域超过20000小时的经验总结。作者从横向视角出发,手把手教你如何拉通Hadoop体系技术栈,以此搭建一个真实可用、安全可靠的大数据平台。通过阅读本书,一定能从本书的内容中找到灵感和思路来应对实际工作中面对的问题。
目前市面上有很多Hadoop体系相关技术的书籍,比如像Hadoop、Spark这类火爆的技术已经有大量的专业书籍进行讲解。但是这类书籍多是以纵向的视角去讲解某一个具体的技术。而本书以横向的视角出发,横向拉通Hadoop体系技术栈,以构建一个真实可用、安全可靠的企业级大数据平台为目标来撰写,本书以讲解实际操作部署为主,其中特别描述了安全部分。同时在讲解的过程中穿插介绍各种技术栈核心概念和背景, 帮助读者进行知识的应用与整合。目前市场上这类横向拉通Hadoop体系技术栈的数据并不多见。
Preface?前 言为什么要写这本书近年来,大数据这个概念越来越火爆,特别是在国家层面,大数据被提升到了国家战略的高度。在这样的背景下,很多传统企业开始涉足大数据领域并研发自己的大数据技术平台。在这股技术升级与转型的浪潮中,传统领域的程序员纷纷转型投向大数据的怀抱。目前大数据技术开源领域以Hadoop生态构建的技术体系为主。现在市面上有很多与Hadoop体系相关的技术书籍,Hadoop、Spark这类火爆的技术已经有大量优秀的专业书籍进行讲解。但我发现这类书籍多是以纵向的视角去讲解某一类具体的技术,而大数据领域涉及的知识繁多,在构建大数据平台的过程中我们不仅需要精通单个技术组件的知识,还需要拥有横向整合拉通Hadoop体系技术栈的能力。而这类横向拉通Hadoop体系技术栈的书籍并不多见。所以我将自己在构建大数据平台上的一些经验和实践进行了整理,分享给各位读者。希望本书能够为各位读者构建大数据平台或解决方案提供一定的帮助。
读者对象想了解大数据技术,想进入大数据领域的工程师:作为一个想进入大数据领域的“新人”,你可以通过本书从宏观的视角迅速对大数据的基础设施和技术栈有一个全面的认识和了解。本书可以作为你的入门指南和技术栈索引目录。
大数据领域的中高级工程师:作为一个大数据领域的中高级工程师,对Hadoop生态体系的技术应该早已运用自如。通过本书的学习,相信你对大数据领域多种技术栈的整合会有一个更深刻的认识。同时本书中的一些平台级方案也会帮助你提升在平台架构方面的造诣。
平台架构师:作为一个平台架构师,本书中的一些解决方案和设计思路可以作为你进行系统架构的参考资料。
本书主要内容本书从企业的实际需求出发,完整地介绍了构建一个真实可用、安全可靠的企业级大数据平台所需要运用的知识体系,并详细地描述了构建企业级大数据平台的设计方案和实施步骤。
本书逻辑上可分为3大部分,共8章,每个章节循序渐进:
第一部分(第1、2章)描述了企业级大数据平台的需求和能力。
第二部分(第3~5章)着重讲述了如何去搭建并配置一个大数据平台,以及如何构建非常重要的平台安全方案。
第三部分(第6~8章)以实战的形式讲解如何以Java编码的方式实现平台的基础管理功能,以提升其易用性与可用性。
具体各章内容如下:
第1章 阐述企业级大数据平台的重要性,并解释了为什么需要构建一个统一的企业级大数据平台。接着介绍作为一个企业级大数据平台应当具备的能力,并解释其原因。
第2章 介绍通过Hadoop生态体系去构建一个企业级大数据平台可以使用的技术栈,如HDFS、HBase、Spark等,并一一介绍了它们的核心概念。
第3章 介绍集群管理工具Ambari,并站在集群服务器的角度分类解释如何去设计一个Hadoop集群,详细描述了如何使用Ambari来安装、管理和监控一个Hadoop集群。
第4章 介绍企业级大数据平台中非常重要的安全部分。首先阐述了企业级大数据平台面临的一些安全隐患,接着展示了一套初级解决方案并介绍了如何使用Knox和Ranger解决访问控制和数据授权与管理的问题。
第5章 着重介绍Hadoop服务的安全方案,并说明如何通过Kerberos协议等一系列措施来保障Hadoop集群的安全。
第6章 阐述大数据平台在易用性上的一些遗留问题,接着介绍如何通过CAS实现平台的单点登录功能,最后描述如何使用Java程序实现统一的用户管理服务。
第7章 简单阐述服务化的重要性以及如何将大数据平台管理端的功能封装成RESTful服务。首先介绍了如何使用Spring-Boot快速搭建一套RESTful服务的程序框架,接着详细描述如何实现Kerberos用户查询、Hive数据仓库查询和元数据查询等一系列RESTful服务。
第8章 介绍如何使用Java程序实现Spark的任务提交与任务调度功能。首先着重介绍使用Java程序实现Spark任务提交到YARN的三种方式,接着描述如何通过Quartz实现任务调度功能。
如何阅读本书本书内容会涉及大数据领域相关的技术知识,所以假定读者已具有一定的编程经验,了解分布式、多线程、集群等概念。本书部分内容涉及集群服务的实战安装示例,所以需要准备至少两台用于搭建测试环境的Linux服务器或虚拟机。
勘误和支持由于水平有限,编写时间仓促,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正。为此,我特意创建了一个提供在线支持与应急方案的站点https://github.com/nauu/bigdatabook。你可以将书中的错误发布在Bug勘误表页面中,如果你遇到任何问题,也可以访问Q&A页面,我将尽量在线上为读者提供最满意的解答。如果你有更多的宝贵意见,也欢迎发送邮件至邮箱yawface@gmail.com或者访问新浪微博http://weibo.com/boness,期待能够得到你们的真挚反馈。
致谢感谢我的家人,如果没有你们的悉心照顾和鼓励,我不可能完成本书。
感谢我的公司远光软件,为我提供了学习和成长的环境,本书中的很多知识都来自工作中的实践。
感谢我的挚友李根,为本书提出了许多宝贵的建议。
感谢我的同事兼伙伴们——解来甲、张琛、杨柯、潘登、胡艺、李国威、陈世宾、陈泽华,以及名单之外的更多朋友,感谢你们在工作中的照顾和支持,十分荣幸能够与你们在这个富有激情和活力的团队共事。
感谢机械工业出版社华章公司的编辑杨福川老师、孙海亮老师,在这一年多的时间中始终支持我的写作,你们的鼓励和帮助引导我顺利地完成全部书稿。
朱 凯
目 录?Contents
推荐序 思者常新,厚积薄发
前 言
第1章 浅谈企业级大数据平台的重要性 1
1.1 缺乏统一大数据平台的问题 2
1.1.1 资源浪费 2
1.1.2 数据孤岛 2
1.1.3 服务孤岛 3
1.1.4 安全存疑 3
1.1.5 缺乏可维护性和可扩展性 3
1.1.6 缺乏可复制性 4
1.2 构建统一大数据平台的优势 4
1.3 企业级大数据平台需要具备的基本能力 6
1.3.1 集群管理与监控 7
1.3.2 数据接入 7
1.3.3 数据存储与查询 7
1.3.4 数据计算 8
1.3.5 平台安全与管理 10
1.4 平台辅助工具 12
1.5 本章小结 13
第2章 企业级大数据平台技术栈介绍 15
2.1 HDFS 16
2.1.1 概述 16
2.1.2 RAID技术 17
2.1.3 核心设计目标 18
2.1.4 命名空间 19
2.1.5 数据模型 20
2.1.6 Namenode和Datanode 20
2.1.7 使用场景 21
2.2 Zookeeper 22
2.2.1 概述 22
2.2.2 核心特性 23
2.2.3 命名空间 24
2.2.4 数据模型 24
2.2.5 节点状态监听 25
2.2.6 原子消息广播协议 25
2.2.7 使用场景 32
2.3 HBase 33
2.3.1 概述 33
2.3.2 数据模型 34
2.3.3 Regions 34
2.3.4 HBase Master 35
2.3.5 Region Server 36
2.3.6 MemStore与HFile 37
2.3.7 使用场景 37
2.4 YARN 38
2.4.1 概述 38
2.4.2 资源模型和Container 40
2.4.3 ResourceManager 40
2.4.4 ApplicationMaster 40
2.4.5 NodeManager 41
2.4.6 单一集群架构 41
2.4.7 工作流程 41
2.4.8 使用场景 43
2.5 Spark 43
2.5.1 概述 43
2.5.2 数据模型 45
2.5.3 编程模型和作业调度 45
2.5.4 依赖 46
2.5.5 容错 47
2.5.6 集群模式 47
2.5.7 使用场景 48
2.6 本章小结 49
第3章 使用Ambari安装Hadoop集群 50
3.1 概述 50
3.2 集群设计 52
3.2.1 主控节点 52
3.2.2 存储与计算节点 53
3.2.3 安全认证与管理节点 54
3.2.4 协同管理与其他节点 54
3.3 Ambari的安装、配置与启动 55
3.3.1 安装前的准备 55
3.3.2 安装Ambari-Server 62
3.3.3 Ambari-Server目录结构 64
3.3.4 配置Ambari-Server 65
3.3.5 启动Ambari-Server 66
3.4 新建集群 67
3.4.1 设置集群名称并配置HDP安装包 67
3.4.2 配置集群 69
3.5 Ambari控制台功能简介 77
3.5.1 集群服务管理 78
3.5.2 集群服务配置 80
3.5.3 辅助工具 82
3.6 本章小结 86
第4章 构建企业级平台安全方案 87
4.1 浅谈企业级大数据平台面临的安全隐患 88
4.1.1 缺乏统一的访问控制机制 88
4.1.2 缺乏统一的资源授权策略 88
4.1.3 缺乏Hadoop服务安全保障 89
4.2 初级安全方案 89
4.2.1 访问控制 89
4.2.2 数据授权与管理 97
4.3 本章小结 110
第5章 Hadoop服务安全方案 111
5.1 Kerberos协议简介 111
5.2 使用FreeIPA安装Kerberos和LDAP 113
5.2.1 安装FreeIPA 115
5.2.2 IPA-Server管理控制台功能介绍 119
5.2.3 IPA CLI功能介绍 122
5.3 开启Ambari的Kerberos安全选项 127
5.3.1 集成前的准备 127
5.3.2 集成IPA 129
5.3.3 测试Kerberos认证 133
5.4 本章小结 136
第6章 单点登录与用户管理 137
6.1 集成单点登录 139
6.1.1 CAS简介 140
6.1.2 安装CAS-Server 141
6.1.3 集成Knox网关与CAS-
Server 148
6.1.4 集成Ranger与CAS-Server 151
6.1.5 集成Ambari与CAS-Server 152
6.2 实现统一的用户管理系统 155
6.3 使用Java程序调用脚本 161
6.4 创建Ranger扩展用户 166
6.5 本章小结 169
第7章 搭建平台管理端RESTful服务 170
7.1 搭建RESTful服务框架 170
7.2 用户查询 174
7.2.1 引入LDAP模块 174
7.2.2 配置LDAP 174
7.2.3 实现持久层 177
7.2.4 实现服务层 181
7.2.5 实现RESTful服务 181
7.2.6 整合用户管理 183
7.3 RESTful服务安全认证 184
7.3.1 用户登录服务 185
7.3.2 使用JWT认证 185
7.3.3 创建用户登录RESTful服务 188
7.3.4 认证过滤器 194
7.3.5 测试服务安全认证 198
7.4 数据仓库数据查询 200
7.4.1 创建JDBC连接 200
7.4.2 Kerberos登录 202
7.4.3 使用JDBC协议查询 202
7.4.4 实现服务层与RESTful服务 206
7.4.5 测试查询 207
7.5 数据仓库元数据查询 208
7.5.1 使用query服务查询数仓元数据 208
7.5.2 引入JdbcTemplate模块 209
7.5.3 增加Hive元数据库配置 210
7.5.4 实现元数据持久层 211
7.5.5 实现元数据服务层与RESTful服务 216
7.5.6 测试元数据查询 218
7.6 本章小结 219
第8章 Spark任务与调度服务 220
8.1 提交Spark任务的3种方式 220
8.1.1 使用Spark-Submit脚本提交 220
8.1.2 使用Spark Client提交 226
8.1.3 使用YARN RESTful API提交 229
8.2 查询Spark日志 234
8.3 任务调度 236
8.3.1 引入Quartz模块 237
8.3.2 增加Quartz配置 237
8.3.