内容简介
第Ⅰ部分 Hadoop架构与Hadoop集群介绍
第1章 Hadoop与Hadoop环境介绍
Hadoop简介
Hadoop的特性
Hadoop与大数据
Hadoop的典型应用场景
传统数据库系统
数据湖
大数据、数据科学和Hadoop
Hadoop集群与集群计算
集群计算
Hadoop集群
Hadoop组件和Hadoop生态
Hadoop管理员需要做些什么
Hadoop管理——新的范式
关于Hadoop管理你需要知道的
Hadoop管理员的工具集
Hadoop 1和Hadoop 2的关键区别
架构区别
高可用性
多计算引擎
分离处理和调度
Hadoop 1和Hadoop 2中的资源分配
分布式数据处理:MapReduce和Spark、Hive、Pig
MapReduce
Apache Spark
Apache Hive
Apache Pig
数据整合:Apache Sqoop、Apache Flume和Apache Kafka
Hadoop管理中的关键领域
集群存储管理
集群资源分配
作业调度
Hadoop数据安全
总结
第2章 Hadoop架构介绍
Hadoop与分布式计算
Hadoop架构
Hadoop集群
主节点和工作节点
Hadoop服务
数据存储——Hadoop分布式文件系统
HDFS特性
HDFS架构
HDFS文件系统
NameNode操作
利用YARN(Hadoop操作系统)进行数据处理
YARN的架构
ApplicationMaster如何与ResourceManager协作进行资源分配
总结
第3章 创建和配置一个简单的Hadoop集群
Hadoop发行版本和安装类型
Hadoop发行版本
Hadoop安装类型
设置一个伪分布式Hadoop集群
满足操作系统的要求
修改内核参数
设置SSH
Java需求
安装Hadoop
创建必要的Hadoop用户
创建必要的目录
Hadoop初始配置
环境变量配置文件
只读默认配置文件
site专用配置文件
其他Hadoop相关的配置文件
配置文件的优先级
可变扩展和配置参数
配置Hadoop守护进程环境变量
配置Hadoop的核心属性(使用core-site.xml文件)
配置MapReduce(使用mapred-site.xml文件)
配置YARN(使用yarn-site.xml文件)
配置HDFS(使用hdfs-site.xml文件)
操作新的Hadoop集群
格式化分布式文件系统
设置环境变量
启动HDFS和YARN服务
验证服务启动
关闭服务
总结
第4章 规划和创建一个完全分布式集群
规划Hadoop集群
集群规划注意事项
安排服务器
节点选择的标准
从单机架到多机架
调整Hadoop集群
CPU、内存和存储选择的一般性原则
主节点的特殊要求
关于服务器大小的几点建议
集群增长
大型集群指南
创建一个多节点集群
如何设置测试集群
修改Hadoop的配置
更改HDFS的配置(hdfs-site.xml文件)
更改YARN的配置
修改MapReduce的配置
启动集群
使用脚本启动和关闭集群
快速检查新集群的文件系统
配置Hadoop服务、Web界面和端口
服务配置和Web界面
设置Hadoop服务的端口
Hadoop客户端
总结
第Ⅱ部分 Hadoop应用架构
第5章 在集群上运行一个应用——MapReduce框架和Hive、Pig
MapReduce框架
MapReduce模型
MapReduce怎样工作
MapReduce作业处理
一个简单的MapReduce程序
通过运行WordCount程序理解Hadoop作业的处理过程
MapReduce输入/输出目录
Hadoop如何展示作业细节
Hadoop Streaming
Apache Hive
Hive数据组织
使用Hive表
将数据导入Hive
使用Hive查询
Apache Pig
Pig执行模型
一个简单的Pig示例
总结
第6章 集群上的应用——Spark框架介绍
Spark是什么
为什么使用Spark
速度
易用性
通用框架
Spark和Hadoop
Spark技术栈
安装Spark
Spark示例
Spark的主要文件和目录
编译Spark二进制文件
减少Spark日志
Spark运行模式
本地模式
集群模式
集群管理器
独立集群管理器
基于Apache Mesos的Spark
基于YARN的Spark
YARN和Spark如何协同合作
设置基于Hadoop集群的Spark
Spark和数据获取
从Linux文件系统加载数据
从HDFS加载数据
从关系型数据库获取数据
总结
第7章 运行Spark应用程序
Spark编程模型
Spark编程和RDD
Spark编程
Spark应用程序
RDD基础
创建RDD
RDD操作
RDD持久化
Spark应用的结构
Spark术语
Spark应用程序的组件
交互式运行Spark应用程序
Spark shell和Spark应用程序
Spark shell
使用Spark shell
Spark集群执行概述
创建和提交Spark应用
构建Spark应用
在独立的Spark集群上运行应用
使用spark-submit执行应用
在Mesos上运行Spark应用
在Hadoop YARN集群上运行Spark应用
使用JDBC/ODBC服务
配置Spark应用
Spark的配置属性
运行spark-submit时的配置
监控Spark应用
使用Spark Streaming处理流式计算
Spark Streaming如何工作
Spark Streaming示例,又是WordCount
使用Spark SQL处理结构化数据
数据框架
HiveContext和SQLContext
使用Spark SQL
创建DataFrames
总结
第Ⅲ部分 管理和保护Hadoop数据和高可用性
第8章 NameNode的作用和HDFS的工作原理
HDFS——NameNode与DataNode之间的交互
客户端和HDFS之间的交互
NameNode与DataNode之间的通信
机架感知与拓扑逻辑
如何在集群中配置机架感知策略
找出集群的机架信息
HDFS数据副本
HDFS数据组织和数据块
数据复制
文件块和副本状态
客户端如何读写HDFS数据
客户端如何读取HDFS数据
客户端如何向HDFS写数据
了解HDFS恢复过程
生成戳
租约恢复
块恢复
管道恢复
HDFS中的集中式缓存管理
Hadoop和OS的页面缓存
集中式缓存管理的关键原则
集中式缓存管理如何工作
配置缓存
缓存指令
缓存池
使用缓存
Hadoop归档存储、SSD和内存(异构存储)
不同存储类型的性能特点
对异构HDFS存储的需求
存储体系结构的变化
文件的存储首选项
设置归档存储
管理存储策略
移动数据
实现归档
总结
第9章 HDFS命令、HDFS权限和HDFS存储
使用HDFS Shell命令管理HDFS
使用hdfs dfs实用程序来管理HDFS
列出HDFS文件和目录
创建HDFS目录
删除HDFS文件和目录
更改文件和目录所有权和组
使用dfsadmin实用程序执行HDFS操作
dfsadmin-report命令
管理HDFS权限和用户
HDFS文件权限
HDFS用户和超级用户
管理HDFS存储
检查HDFS磁盘使用情况
分配HDFS空间配额
重新均衡HDFS数据
HDFS数据不均衡的原因
运行均衡器以均衡HDFS数据
使用hdfs dfsadmin使事情更简单
何时运行均衡器
回收HDFS空间
删除文件和目录
降低复制因子
总结
第10章 数据保护、文件格式和访问HDFS
保护数据
使用HDFS回收站防止意外数据删除
使用HDFS快照保护重要数据
通过文件系统检查确保数据完整性
数据压缩
常用压缩格式
评估各种压缩方案
MapReduce的各个阶段的压缩
Spark的压缩
数据序列化
Hadoop文件格式
确定正确文件格式的标准
Hadoop支持的文件格式
理想文件格式
Hadoop小文件问题和合并文件
使用NameNode联合架构克服小文件问题
使用Hadoop Archives管理小文件
减小小文件的性能影响
使用Hadoop WebHDFS和HttpFS
WebHDFS——Hadoop REST API
使用WebHDFS API
了解WebHDFS命令
使用HttpFS网关从防火墙后面访问HDFS
总结
第11章 NameNode操作、高可用性和联合
了解NameNode操作
HDFS元数据
NameNode启动过程
NameNode和DataNode如何协同工作
检查点操作
Secondary NameNode、检查点节点、备份节点和Standby NameNode
配置检查点操作频率
管理检查点性能
检查点的机制
NameNode安全模式操作
自动安全模式操作
将NameNode置于安全模式
NameNode如何进行安全模式转换
备份和恢复NameNode元数据
配置HDFS高可用性
NameNode HA架构(QJM)
设置HDFS HA Quorum集群
部署高可用性NameNode
管理HA NameNode设置
HA手动和自动故障转移
HDFS联合
联合NameNode的体系结构
总结
第Ⅳ部分 数据迁移、资源分配、作业调度及安全
第12章 将数据导入和导出Hadoop
Hadoop数据传输工具简介
通过命令行将数据加载到HDFS
使用-cat命令转储文件的内容
检测HDFS文件
从HDFS或向HDFS复制或移动文件
使用-get命令移动文件
向HDFS或从HDFS移动文件
使用-tail和head命令
使用DistCp在HDFS集群之间复制数据
如何使用DistCp命令移动数据
DistCp选项
使用Sqoop从关系型数据库获取数据
Sqoop架构
部署Sqoop
使用Sqoop移动数据
使用Sqoop导入数据
将数据导入Hive
使用Sqoop导出数据
通过Flume从外部来源采集数据
Flume架构简介
配置Flume agent
简单的Flume示例
使用Flume将数据移动到HDFS
更复杂的Flume示例
与Kafka交互数据
Kafka的优点
Kafka是如何工作的
设置Apache Kafka集群
将Kafka与Hadoop和Storm集成
总结
第13章 Hadoop集群中的资源分配
Hadoop中的资源分配
管理集群的工作负载
Hadoop的资源调度器
FIFO调度器
容量调度器
队列和子队列
集群如何分配资源
抢占申请
启用容量调度器
一个典型的容量调度器
公平调度器
队列
配置公平调度器
作业是如何被放置到队列中的
公平调度器中的应用抢占
安全和资源池
一个fair-scheduler.xml示例文件
将作业提交到调度器
在队列之间移动应用程序
监控公平调度器
容量调度器和公平调度器的对比
两个调度器之间的相似之处
两个调度器之间的差异
总结
第14章 使用Oozie管理作业工作流
使用Apache Oozie调度作业
Oozie架构
Oozie服务器
Oozie客户端
Oozie数据库
在集群中部署Oozie
安装和配置Oozie
为Oozie配置Hadoop
了解Oozie工作流
工作流、控制流和节点
使用workflow.xml文件定义工作流
Oozie如何运行一个动作
配置动作节点
创建Oozie工作流
配置控制节点
配置作业
运行Oozie工作流作业
指定作业属性
部署Oozie作业
创建动态工作流
Oozie协调器
基于时间的协调器
基于数据的协调器
基于时间和数据的协调器
从命令行提交Oozie协调器
管理和治理Oozie
常见的Oozie命令
Oozie故障排除
Oozie cron调度和Oozie SLA
总结
第15章 Hadoop安全
Hadoop安全概览
认证、授权和审计
使用Kerberos进行Hadoop认证
Kerberos及其工作原理
Kerberos认证过程
Kerberos互信
一个特殊主体
将Kerberos添加到集群中
Hadoop相关的Kerberos设置
使用Kerberos保护Hadoop集群
Kerberos如何验证用户和服务
管理Kerberized Hadoop集群
Hadoop授权
HDFS权限
服务级授权
基于角色的Apache Sentry权限设置
Hadoop审计
审计HDFS操作
审计YARN操作
Hadoop数据安全
HDFS透明加密
加密转换中的数据
其他Hadoop安全举措
使用Apache Knox网关保护Hadoop基础设施
Apache Ranger安全管理
总结
第Ⅴ部分 监控、优化和故障排除
第16章 管理作业、使用Hue和执行常规任务
使用YARN命令管理Hadoop作业
查看YARN应用程序
检查应用程序的状态
Kill正在执行的作业
检查节点状态
检查YARN的队列状态
获取作业的日志
YARN管理命令
下线和上线节点
包含和剔除主机
下线DataNodes和NodeManagers
重新上线节点
关于下线和重新上线的注意事项
添加新的DataNode和NodeManager
高可用性ResourceManager
高可用性ResourceManager架构
设置高可用性ResourceManager
ResourceManager故障转移
使用ResourceManager高可用性命令
执行常规管理任务
将NameNode移动到不同的主机
管理高可用性NameNode
使用关闭/启动脚本来管理集群
均衡HDFS
均衡DataNodes上存储
管理MySQL数据库
配置MySQL数据库
配置高可用性MySQL
备份重要集群数据
备份HDFS元数据
备份Metastore数据库
使用Hue管理集群
允许用户使用Hue
安装Hue
配置集群以使用Hue
管理Hue
使用Hue
使用HDFS的附加功能
在多宿主网络中部署HDFS和YARN
短路本地读取
可挂载的HDFS
使用NFS网关将HDFS挂载到本地文件系统
总结
第17章 监控、指标和Hadoop日志
监控Linux服务器
Linux系统监控基础
Linux系统监控工具
Hadoop指标
Hadoop指标类型
使用Hadoop指标
收集文件系统的指标
使用Ganglia进行监测
Ganglia架构
Ganglia和Hadoop整合
设置Hadoop指标
Hadoop日志记录
Hadoop日志消息
守护进程和应用程序日志以及如何查看这些日志
应用程序日志记录的工作原理
Hadoop如何使用HDFS目录和本地目录
NodeManager如何使用本地目录
通过日志聚合将作业日志存储在HDFS中
使用Hadoop守护程序日志
使用Hadoop的Web UI进行监控
使用ResourceManager Web UI监控作业
JobHistoryServer Web UI
使用NameNode Web UI进行监控
监控其他Hadoop组件
监控Hive
监控Spark
总结
第18章 调优集群资源,优化MapReduce作业和基准测试
如何分配YARN内存和CPU
分配内存
配置CPU内核数量
内存与CPU之间的关系
配置高性能
推测执行
减少系统上的I/O负载
调整map和reduce任务,管理员可以做什么
map任务调优
输入和输出
reduce任务调优
MapReduce shuffle进程调优
优化Pig和Hive作业
优化Hive作业
优化pig作业
对集群进行基准测试
使用TestDFSIO测试I/O性能
使用TeraSort进行基准测试
使用Hadoop的Rumen和GridMix进行基准测试
Hadoop计数器
文件系统计数器
作业计数器
MapReduce框架计数器
自定义Java计数器
限制计数器数量
优化MapReduce
map-only与map及reduce作业
使用combiners提升MapReduce性能
使用partitioner提高性能
在MapReduce过程中压缩数据
太多的map和reduce任务
总结
第19章 在YARN上配置和调优Apache Spark
在YARN上配置Spark的资源分配
分配CPU
分配内存
如何把资源分配给Spark
Spark应用程序的资源分配限制
将资源分配给驱动程序
为执行器配置资源
Spark如何使用内存
要注意的事情
集群或客户端模式
配置Spark相关网络参数
YARN Spark动态资源分配
动态和静态资源分配
如何管理动态资源分配
启用动态资源分配
存储格式和压缩数据
存储格式
文件大小
压缩
监控Spark应用程序
使用Spark Web UI了解性能
Spark系统和Metrics REST API
YARN上的Spark历史记录服务器
从命令行跟踪作业
调优垃圾回收
垃圾回收机制
如何收集GC统计数据
调优Spark Streaming应用程序
减少批处理时间
设置正确的批次间隔
调优内存和垃圾回收
总结
第20章 优化Spark应用程序
重新审视Spark执行模型
Spark执行模型
shuffle操作以及如何减少shuffle操作
WordCount示例(再一次展示)
shuffle操作的影响
配置shuffle参数
分区和并行性(任务数)
并行度
极少数任务的问题
设置默认分区数
如何增加分区数量
使用Repartition(重新分区)和Coalesce(合并)操作来更改RDD中的分区数
两种类型的分区器
数据分区和如何避免shuffle
数据的序列化和压缩优化
数据序列化
配置压缩
Spark的SQL查询优化器
优化步骤
Spark的推测执行功能
数据本地化的重要性
缓存数据
缓存容错
如何指定缓存
总结
第21章 Hadoop故障排除——样例
空间相关问题
处理Linux文件系统100%使用的情况
HDFS空间问题
本地目录以及日志目录空间超出
磁盘容错
处理卡住的YARN作业
JVM内存分配与垃圾回收策略
理解JVM垃圾回收
优化垃圾回收
Analyzing Memory Usage
内存不足问题
ApplicationMaster内存问题
处理不同类型的错误
处理守护进程失败的情况
启动Hadoop守护进程失败
任务和作业失败
Spark作业故障排除
Spark的容错机制
杀死Spark作业
一个作业的最大尝试次数
一个作业最大的失败次数
调试Spark应用
通过日志聚合访问日志
当日志聚合未开启时访问日志
重新审视启动环境
总结
附录A 安装VirtualBox和Linux以及虚拟机的克隆