编辑推荐
百度资深Hadoop技术专家和高级算法工程师撰写,结合百度大数据实践,直击企业痛点,多位大数据技术专家联袂推荐!
从使用、原理、运维和开发4个方面深度讲解Hadoop核心的技术
内容简介
《Hadoop核心技术》是一本技术深度与企业实践并重的著作,由百度的Hadoop技术工程师撰写,是百度Hadoop技术实践经验的总结。本书从使用、实现原理、运维和开发4个方面对Hadoop的核心技术进行了深入的讲解。
使用:详细讲解了HDFS存储系统、MapReduce计算框架,以及HDFS的命令系统;
原理:结合源代码,深度分析了MapReduce、HDFS、Streaming、Pipes、Hadoop作业调度系统等重要技术和组件的架构设计、工作机制和实现原理;
运维:结合百度的实际生产环境,详细讲解了Hadoop集群的安装、配置、测试以及管理和运维;
开发:详细讲解了HadoopStreaming、Pipes的使用和开发实践,以及MapReduce的编程实践和常见问题。
作者简介
翟周伟,就职于百度,资深Hadoop技术专家,专注于Hadoop&大数据、数据挖掘、自然语言处理等领域。2009年便开始利用Hadoop构建商业级大数据系统,是国内该领域最早的一批人之一,负责设计过多个基于Hadoop的大数据平台和分析系统。2011年合著出版《Hadoop开源云计算平台》。在自然语言处理领域申请过一项发明专利。
精彩书评
★互联网与传统行业结合, 加速了大规模数据的生成和积累。这些数据蕴含了大量有价值的信息,及时有效地挖掘这些信息可以进一步促进行业健康、快速发展。Hadoop是处理大规模数据的有力工具, 在多个行业中被广泛使用,显示出巨大的威力。本书作者在百度长期使用Hadoop处理超大规模的数据, 有着丰富的理论基础和实战经验。 本书是作者经验的结晶, 从基础、高级,实战三个角度,逐步深入地讲解了Hadoop核心技术原理和应用,对于hadoop技术使用者和开发者而言是一本不可多得的学习参考书。
—— 百度网页搜索部技术总监 沈抖 ★本书主要对Hadoop的基本原理和优化配置由浅入深进行了详细分析,最后通过实战案例进一步讲解分析。本书对HDFS、MapReduce以及Hadoop Streaming 和 Pipes的实现机制进行了深度分析;对Hadoop调度作了详细说明,特别是对公平调度器(FairScheduler)的设计理念和配置优化做了详细剖析,无论是对于初学者还是熟悉Hadoop的同学本书都非常适合,特别适合MapReduce的开发人员、Hadoop集群运维人员、分布式计算工程师以及做数据挖掘的工程师和架构师。
—— 大数据资深专家和AdMaster技术副总裁 卢亿雷 ★作为目前使用广泛的大数据处理平台,把Hadoop用起来很容易,但是要“用好”很难。“用好”要充分发挥平台的能力,解决各种复杂的业务需求,高效稳定地将Hadoop应用于生产系统。本书从Hadoop的基本使用开始讲解,逐步深入到实现机制分析,最后回归到实战级的应用开发,对Hadoop的开发、运维人员来说,是“用好”Hadoop的一本不可多得的参考书。
—— 腾讯高级工程师 蔡斌 ★Hadoop很好地解决了大规模数据的存储和计算问题,在百度广泛使用,是核心基础平台之一。本书深入浅出,循序渐进地介绍Hadoop的核心技术,非常适合大家学习参考。
—— 百度网页搜索部Rank主任架构师 朱文佳 目录
前 言
基 础 篇
第1章 认识Hadoop
1.1 缘于搜索的小象
1.1.1 Hadoop的身世
1.1.2 Hadoop简介
1.1.3 Hadoop发展简史
1.2 大数据、Hadoop和云计算
1.2.1 大数据
1.2.2 大数据、Hadoop和云计算的关系
1.3 设计思想与架构
1.3.1 数据存储与切分
1.3.2 MapReduce模型
1.3.3 MPI和MapReduce
1.4 国外Hadoop的应用现状
1.5 国内Hadoop的应用现状
1.6 Hadoop发行版
1.6.1 Apache Hadoop
1.6.2 Cloudera Hadoop
1.6.3 Hortonworks Hadoop发行版
1.6.4 MapR Hadoop发行版
1.6.5 IBM Hadoop发行版
1.6.6 Intel Hadoop发行版
1.6.7 华为Hadoop发行版
1.7 小结
第2章 Hadoop使用之初体验
2.1 搭建测试环境
2.1.1 软件与准备
2.1.2 安装与配置
2.1.3 启动与停止
2.2 算法分析与设计
2.2.1 Map设计
2.2.2 Reduce设计
2.3 实现接口
2.3.1 Java API实现
2.3.2 Streaming接口实现
2.3.3 Pipes接口实现
2.4 编译
2.4.1 基于Java API实现的编译
2.4.2 基于Streaming实现的编译
2.4.3 基于Pipes实现的编译
2.5 提交作业
2.5.1 基于Java API实现作业提交
2.5.2 基于Streaming实现作业提交
2.5.3 基于Pipes实现作业提交
2.6 小结
第3章 Hadoop存储系统
3.1 基本概念
3.1.1 NameNode
3.1.2 DateNode
3.1.3 客户端
3.1.4 块
3.2 HDFS的特性和目标
3.2.1 HDFS的特性
3.2.2 HDFS的目标
3.3 HDFS架构
3.3.1 Master/Slave架构
3.3.2 NameNode和Secondary NameNode通信模型
3.3.3 文件存取机制
3.4 HDFS核心设计
3.4.1 Block大小
3.4.2 数据复制
3.4.3 数据副本存放策略
3.4.4 数据组织
3.4.5 空间回收
3.4.6 通信协议
3.4.7 安全模式
3.4.8 机架感知
3.4.9 健壮性
3.4.10 负载均衡
3.4.11 升级和回滚机制
3.5 HDFS权限管理
3.5.1 用户身份
3.5.2 系统实现
3.5.3 超级用户
3.5.4 配置参数
3.6 HDFS配额管理
3.7 HDFS的缺点
3.8 小结
第4章 HDFS的使用
4.1 HDFS环境准备
4.1.1 HDFS安装配置
4.1.2 HDFS格式化与启动
4.1.3 HDFS运行检查
4.2 HDFS命令的使用
4.2.1 fs shell
4.2.2 archive
4.2.3 distcp
4.2.4 fsck
4.3 HDFS Java API的使用方法
4.3.1 Java API简介
4.3.2 读文件
4.3.3 写文件
4.3.4 删除文件或目录
4.4 C接口libhdfs
4.4.1 libhdfs介绍
4.4.2 编译与部署
4.4.3 libhdfs接口介绍
4.4.4 libhdfs使用举例
4.5 WebHDFS接口
4.5.1 WebHDFS REST API简介
4.5.2 WebHDFS配置
4.5.3 WebHDFS使用
4.5.4 WebHDFS错误响应和查询参数
4.6 小结
第5章 MapReduce计算框架
5.1 Hadoop MapReduce简介
5.2 MapReduce模型
5.2.1 MapReduce编程模型
5.2.2 MapReduce实现原理
5.3 计算流程与机制
5.3.1 作业提交和初始化
5.3.2 Mapper
5.3.3 Reducer
5.3.4 Reporter和OutputCollector
5.4 MapReduce的输入/输出格式
5.4.1 输入格式
5.4.2 输出格式
5.5 核心问题
5.5.1 Map和Reduce数量
5.5.2 作业配置
5.5.3 作业执行和环境
5.5.4 作业容错机制
5.5.5 作业调度
5.6 有用的MapReduce特性
5.6.1 计数器
5.6.2 DistributedCache
5.6.3 Tool
5.6.4 IsolationRunner
5.6.5 Prof?iling
5.6.6 MapReduce调试
5.6.7 数据压缩
5.6.8 优化
5.7 小结
第6章 Hadoop命令系统
6.1 Hadoop命令系统的组成
6.2 用户命令
6.3 管理员命令
6.4 测试命令
6.5 应用命令
6.6 Hadoop的streaming命令
6.6.1 streaming命令
6.6.2 参数使用分析
6.7 Hadoop的pipes命令
6.7.1 pipes命令
6.7.2 参数使用分析
6.8 小结
高 级 篇
第7章 MapReduce深度分析
7.1 MapReduce总结构分析
7.1.1 数据流向分析
7.1.2 处理流程分析
7.2 MapTask实现分析
7.2.1 总逻辑分析
7.2.2 Read阶段
7.2.3 Map阶段
7.2.4 Collector和Partitioner阶段
7.2.5 Spill阶段
7.2.6 Merge阶段
7.3 ReduceTask实现分析
7.3.1 总逻辑分析
7.3.2 Shuffle阶段
7.3.3 Merge阶段
7.3.4 Sort阶段
7.3.5 Reduce阶段
7.4 JobTracker分析
7.4.1 JobTracker服务分析
7.4.2 JobTracker启动分析
7.4.3 JobTracker核心子线程分析
7.5 TaskTracker分析
7.5.1 TaskTracker启动分析
7.5.2 TaskTracker核心子线程分析
7.6 心跳机制实现分析
7.6.1 心跳检测分析
7.6.2 TaskTracker.transmitHeart-Beat()
7.6.3 JobTracker.heartbeat()
7.6.4 JobTracker.processHeartbeat()
7.7 作业创建分析
7.7.1 初始化分析
7.7.2 作业提交分析
7.8 作业执行分析
7.8.1 JobTracker初始化
7.8.2 TaskTracker.startNewTask()
7.8.3 TaskTracker.localizeJob()
7.8.4 TaskRunner.run()
7.8.5 MapTask.run()
7.9 小结
第8章 Hadoop Streaming和Pipes原理与实现
8.1 Streaming原理浅析
8.2 Streaming实现架构
8.3 Streaming核心实现机制
8.3.1 主控框架实现
8.3.2 用户进程管理
8.3.3 框架和用户程序的交互
8.3.4 PipeMapper和PiperReducer
8.4 Pipes原理浅析
8.5 Pipes实现架构
8.6 Pipes核心实现机制
8.6.1 主控类实现
8.6.2 用户进程管理
8.6.3 PipesMapRunner
8.6.4 PipesReducer
8.6.5 C++端HadoopPipes
8.7 小结
第9章 Hadoop作业调度系统
9.1 作业调度概述
9.1.1 相关概念
9.1.2 作业调度流程
9.1.3 集群资源组织与管理
9.1.4 队列控制和权限管理
9.1.5 插件式调度框架
9.2 FIFO调度器
9.2.1 基本调度策略
9.2.2 FIFO实现分析
9.2.3 FIFO初始化与停止
9.2.4 作业监听控制
9.2.5 任务分配算法
9.2.6 配置与使用
9.3 公平调度器
9.3.1 产生背景
9.3.2 主要功能
9.3.3 基本调度策略
9.3.4 FairScheduler实现分析
9.3.5 FairScheduler启停分析
9.3.6 作业监听控制
9.3.7 资源池管理
9.3.8 作业更新策略
9.3.9 作业权重和资源量的计算
9.3.10 任务分配算法
9.3.11 FairScheduler配置参数
9.3.12 使用与管理
9.4 容量调度器
9.4.1 产生背景
9.4.2 主要功能
9.4.3 基本调度策略
9.4.4 CapacityScheduler实现分析
9.4.5 CapacityScheduler启停分析
9.4.6 作业监听控制
9.4.7 作业初始化分析
9.4.8 任务分配算法
9.4.9 内存匹配机制
9.4.10 配置与使用
9.5 调度器对比分析
9.5.1 调度策略对比
9.5.2 队列和优先级
9.5.3 资源分配保证
9.5.4 作业限制
9.5.5 配置管理
9.5.6 扩展性支持
9.5.7 资源抢占和延迟调度
9.5.8 优缺点分析
9.6 其他调度器
9.6.1 HOD调度器
9.6.2 LATE调度器
9.7 小结
实 战 篇
第10章 Hadoop集群搭建
10.1 Hadoop版本的选择
10.2 集群基础硬件需求
10.2.1 内存
10.2.2 CPU
10.2.3 磁盘
10.2.4 网卡
10.2.5 网络拓扑
10.3 集群基础软件需求
10.3.1 操作系统
10.3.2 JVM和SSH
10.4 虚拟化需求
10.5 事前准备
10.5.1 创建安装用户
10.5.2 安装Java
10.5.3 安装SSH并设置
10.5.4 防火墙端口设置
10.6 安装Hadoop
10.6.1 安装HDFS
10.6.2 安装MapReduce
10.7 集群配置
10.7.1 配置管理
10.7.2 环境变量配置
10.7.3 核心参数配置
10.7.4 HDFS参数配置
10.7.5 MapReduce参数配置
10.7.6 masters和slaves配置
10.7.7 客户端配置
10.8 启动和停止
10.8.1 启动/停止HDFS
10.8.2 启动/停止MapReduce
10.8.3 启动验证
10.9 集群基准测试
10.9.1 HDFS基准测试
10.9.2 MapReduce基准测试
10.9.3 综合性能测试
10.10 集群搭建实例
10.10.1 部署策略
10.10.2 软件和硬件环境
10.10.3 Hadoop安装
10.10.4 配置core-site.xml
10.10.5 配置hdfs-site.xml
10.10.6 配置mapred-site.xml
10.10.7 SecondaryNameNode和Slave
10.10.8 配置作业队列
10.10.9 配置第三方调度器
10.10.10 启动与验证
......
精彩书摘
认识Hadoop
认识并掌握一项技术往往需要采用先从整体学习了解再到局部深入的基本方法,在学习Hadoop之前至少需要从宏观上搞清楚两个基本问题:第一,Hadoop是什么;第二,Hadoop可以用来做什么。首先,Hadoop是一个分布式基础架构系统,是Google的云计算基础架构系统的开源实现,Google底层基础设施最核心的组件包括Google FileSystem和MapReduce计算框架,相应的Hadoop最核心的设计就是HDFS和MapReduce,这个系统就像一个集群操作系统一样,可以使廉价的通用硬件形成资源池从而组成威力强大的分布式集群系统,用户可以在不了解分布式底层细节的情况下开发分布式程序。那么Hadoop可以用来做什么呢,Hadoop既然是Google基础设施的开源实现,自然可以做支撑搜索引擎的基础架构,由于又是一个通用的分布式框架,因此可以处理很多和大数据相关的分布式应用。
本章将从整体上介绍Hadoop,包括Hadoop的发展渊源、基本思想架构,以及Hadoop的发展应用现状,从而使读者对Hadoop有一个基本的认识,为进一步深入学习夯实基础。
1.1 缘于搜索的小象
追本溯源,Hadoop起源于Nutch,因此学习Hadoop就有必要了解一下这种渊源及Hadoop的发展简史。
1.1.1 Hadoop的身世
首先我们介绍一下Nutch的发展情况,Nutch是一个以Lucene为基础实现的搜索引擎系统,Lucene为Nutch提供了文本检索和索引的API,Nutch不仅仅有检索的功能,还有网页数据采集的功能。Mike Cafarella和Doug Cutting在2002年开始研发Nutch系统,然而他们很快发现他们的架构很难扩展到数十亿级别的网页规模,因为这样规模的搜索引擎系统要涉及网页的分布式存储问题及分布式建立索引的问题。恰在此时,Google公布了支撑其搜索引擎服务的文件系统架构设计——Google's Distributed Filesystem,这种被称为GFS的基础架构很快引起了他们的注意,并被成功引入Nutch系统中,在Nutch中被命名为Nutch分布式文件系统——NDFS,正是NDFS解决了Nutch搜索引擎系统中网页等海量数据的存储问题。2004年,Google又公布了一种并行计算模型MapReduce的设计论文,紧接着在2005年Nutch就已经实现了这种高效的并行计算模型来解决数十亿级别以上网页的分布式采集及索引构建。很快他们就发现这种NDFS和MapReduce模型不仅可以用来解决搜索引擎中的海量网页问题,同时还具有通用性,可以用来构建一种分布式的集群系统,然后在2006年这两个模块就从Nutch中独立出来,并被命名为Hadoop,因此在Nutch-0.8.0版本之前,Hadoop其实还属于Nutch的一部分,而从Nutch-0.8.0开始
Hadoop核心技术 下载 mobi epub pdf txt 电子书 格式