《深入理解Hadoop(原书第2版)》——导读

前  言

Hadoop已经进入Apache社区发展五年多了,使用Hadoop系统进行开发的工作仍然富于挑战但收获丰厚。本书第1版在若干年前就已经出版了,在这期间,Hadoop系统已经被越来越多的企业使用,自身也得到了飞速发展。

Hadoop2.0基于YARN框架做了全新升级,重写了Hadoop系统的底层平台。本书从Hadoop使用者的角度出发讲解Hadoop的实现原理,浓缩了Hadoop软件系统的精华。作为作者,我们希望可以深入到源代码级别来理解Hadoop的运行原理及其背后的设计目标,渴望与你分享Hadoop带给我们的启迪。通过本书,你不仅能够深入学习Hadoop系统,还可以对Java语言在大数据处理过程中的运用有更深入的认识。

本书总体上介绍了大数据的范畴概念,然后对Hadoop进行了详细讲解。因为如果对大数据没有一个总体上的认知,是不可能真正理解Hadoop系统的。本书的读者对象具备中级Java开发能力的Hadoop开发人员。本书可以让你成为企业中的Hadoop专家。通过本书的学习,你可以获得大量实用技巧,这些技巧都是我们在从事基于Hadoop的分布式数据处理系统实践过程中总结出来的。

本书循序渐进地讲解了大量的实例,会帮助你从Hadoop集群初级使用者成长为能胜任运行任何复杂应用程序的专家。下面是本书的一个内容纲要:

第1章,讲解大数据系统的作用,介绍各种各样的大数据系统。

第2章,高屋建瓴地介绍Hadoop2.0和YARN,讲解Hadoop平台的关键概念。

第3章,开始Hadoop学习,构建你的第一个MapReduce程序。

第4章,讲解Hadoop平台管理的关键概念要素。

第5章、第6章和第7章是本书的重点,深入分析讲解了MapReduce框架。你将会学习MapReduce框架所有知识点。我们以当前广泛使用的语言SQL作为对照,来学习理解MapReduce框架的使用。利用MapReduce框架来实现SQL语言中SELECT、WHERE、GROUP BY和JOIN这些关键字的功能。Hadoop系统一个常用用途就是来做数据ETL。这几章会让你掌握如何使用MapReduce框架支持通用的数据处理功能。我们不仅仅学习MapReduce框架的API,还会学习MapReduce框架中更复杂的概念及其设计理念。

第8章,介绍一种测试框架,这种测试框架支持MapReduce程序的单元测试和集成测试。

第9章,讲解Hadoop框架的监控和日志。

第10章,讲解Hive框架,这是一个基于MapReduce的数据仓库框架。

第11章,讲解Pig和Crunch框架。这些框架可以帮助使用者在Hadoop平台上构建数据处理管道。

第12章,讲解HCatalog框架。该框架帮助企业用户可以像访问数据库中的数据表一样,来访问存放在Hadoop文件系统上的海量数据。

第13章,讲解如何使用Hadoop来分析处理日志流。

第14章,介绍HBase,这是一个基于Hadoop系统的NoSQL数据库。你会学习许多HBase用法范例。

第15章,对数据科学做简要介绍。介绍了MapReduce框架在数学科学上的局限和不足之处。同时引入介绍新的框架,比如Spark、Hama,这些框架突破了MapReduce框架中的某些局限。

第16章,简要介绍了Hadoop系统在云计算中的应用。讲解如何在一个真实的生产环境中的Hadoop集群上工作。

第17章,粗略地介绍Hadoop2.0的一个关键附加功能:在Hadoop上开发一个自己的类似于MapReduce框架的分布式数据处理框架。讲解了如何基于Hadoop2.0开发一个简单的分布式下载服务。

致谢

Hadoop在过去的10年发展过程中,有许多厂商和独立开发者为之贡献代码。Hadoop系统中也使用了大量的开源函数库。我们要感谢为Hadoop系统贡献源码的所有开源作者所付出的辛勤劳动。我们也要感谢那些在论坛上回答了Hadoop系统相关问题的博客作者及专家学者。他们的积极参与,使得Hadoop这样复杂的系统变得易于使用并成为应用主流。

我们还想感谢Apress的全体员工,他们的努力付出使得本书内容清晰易读。
我们最后要感谢我们的家庭、朋友及同事,本书在编写过程中得到他们的一贯支持。

目  录

第1章为什么会有大数据
1.1什么是大数据
1.2大数据技术背后的核心思想
1.2.1把数据分发到多个节点
1.2.2把计算逻辑移动到数据附近
1.2.3计算节点进行本地数据处理
1.2.4优选顺序读,次之随机读
1.2.5一个例子
1.3大数据的编程模型
1.3.1大规模并行处理数据库系统
1.3.2内存数据库系统
1.3.3MapReduce系统
1.3.4整体同步并行系统
1.4大数据和事务性系统
1.5我们能处理多大的数据量
1.5.1一个计算密集型的例子
1.5.2Amdhal定律
1.6大数据商业用例
1.7本章小结
第2章Hadoop中的概念
2.1Hadoop简介
2.2MapReduce编程模型简介
2.3Hadoop系统的组成
2.3.1Hadoop 分布式文件系统
2.3.2辅助名称节点
2.3.3任务跟踪器
2.3.4作业跟踪器
2.4Hadoop 2.0
2.4.1容器
2.4.2节点管理器
2.4.3资源管理器
2.4.4应用程序管理器
2.4.5分步详解YARN请求
2.5HDFS 的高可用性
2.6本章小结
第3章初识Hadoop框架
3.1安装类型
3.1.1单机模式
3.1.2伪分布式集群模式
3.1.3多节点集群安装模式
3.1.4基于Amazon EMR预安装模式
3.2使用Cloudera虚拟机搭建开发环境
3.3一个MapReduce程序的组成
3.4第一个Hadoop程序
3.4.1以本地模式运行程序的必要条件
3.4.2使用旧API编写的单词计数程序
3.4.3构建程序
3.4.4在集群模式下运行单词计数程序
3.4.5使用新API编写的单词计数程序
3.4.6构建程序
3.4.7在集群模式下运行单词计数程序
3.5Hadoop作业中的第三方函数库
3.6本章小结
第4章Hadoop系统管理
4.1Hadoop的配置文件
4.2配置Hadoop守护进程
4.3Hadoop配置文件的优先级
4.4深入探究Hadoop配置文件
4.4.1core-site.xml
4.4.2hdfs-*.xml
4.4.3mapred-site.xml
4.4.4yarn-site.xml
4.4.5YARN中的内存分配
4.5调度器
4.5.1计算能力调度器
4.5.2公平调度器
4.5.3公平调度器配置
4.5.4 yarn-site.xml 配置
4.5.5策略文件的格式和配置
4.5.6按照drf策略来确定优势资源的分配
4.6从属文件
4.7机架感知
4.8 集群管理工具
4.8.1检查HDFS
4.8.2 HDFS管理命令行
4.8.3 均衡HDFS上的数据分布
4.8.4从HDFS中复制海量数据
4.9本章小结

时间: 2024-07-28 18:38:06

《深入理解Hadoop(原书第2版)》——导读的相关文章

《深入理解Scala》——第1章,第1.2节当函数式编程遇见面向对象

1.2 当函数式编程遇见面向对象 深入理解Scala 函数式编程和面向对象编程是软件开发的两种不同途径.函数式编程并非什么新概念,在现代开发者的开发工具箱里也绝非是什么天外来客.我们将通过Java生态圈里的例子来展示这一点,主要来看Spring Application framework和Google Collections库.这两个库都在Java的面向对象基础上融合了函数式的概念,而如果我们把它们翻译成Scala,则会优雅得多.在深入之前,我们需要先理解面向对象编程和函数式编程这两个术语的含义

《深入理解Scala》——第1章,第1.4节与JVM的无缝集成

1.4 与JVM的无缝集成 深入理解Scala Scala的吸引力之一在于它与Java和JVM的无缝集成.Scala与Java有很强的兼容性,比如说Java类可以直接映射为Scala类.这种紧密联系使Java到Scala的迁移相当简单,但在使用Scala的一些高级特性时还是需要小心的,Scala有些高级特性是Java里没有的.在Scala语言设计时已经小心地考虑了与Java无缝交互的问题,用Java写的库,大部分可以直接照搬(as-is)到Scala里. 1.4.1 Scala调用Java 从S

《深入理解Scala》——第2章,第2.1节学习使用Scala交互模式(REPL)

第2章 核心规则深入理解Scala 本章包括的内容: • 使用Scala交互模式(Read Eval Print Loop 简称REPL) • 面向表达式编程 • 不变性(Immutability) • Option类 本章内容覆盖了每个新Scala开发者都需要知道的几个主题.本章不会深入到每个主题里,但是会讲到可以让你自己去接着探索的程度.你将学会使用REPL,学会如何利用这个工具做软件的快速原型开发.然后我们会学到面向表达式编程,并从另一个视角来看控制结构是怎么回事.在此基础上,我们来研究不

《深入理解Scala》——第1章,第1.3节静态类型和表达力

1.3 静态类型和表达力 深入理解Scala 开发人员中有一个误解,认为静态类型必然导致冗长的代码.之所以如此是因为很多继承自C的语言强制要求程序员必须在代码中多处明确地指定类型.随着软件开发技术和编译器理论的发展,情况已经改变.Scala利用了其中一些技术进步来减少样板(boilerplate)代码,保持代码简洁. Scala做了以下几个简单的设计决策,以提高代码表达力. • 把类型标注(type annotation)换到变量右边. • 类型推断. • 可扩展的语法. • 用户自定义的隐式转

《深入理解Scala》——第1章,第1.5节总结

1.5 总结 深入理解Scala 本章中,你学到了一些Scala的设计理念.设计Scala的初衷在于把不同语言中的多种概念融合起来.Scala融合了函数式和面向对象编程,尽管显然Java也已经这么做了.Scala精选其语法,极大地减少了语言中的繁冗之处,使一些强大的特性可以优雅地表达,比如类型推断.最后,Scala和Java能够紧密集成,而且运行在Java虚拟机上,这或许是让Scala变成一种实用选择的最重要的一点.几乎不花代价就可以把Scala用于我们的日常工作中. 因为Scala融合了多种概

《深入理解Scala》——第1章,第1.1节Scala一种混合式编程语言

第1章 Scala--一种混合式编程语言 Scala是一种将其他编程语言中的多种技巧融合为一的语言.Scala尝试跨越多种不同类型的语言,给开发者提供面向对象编程.函数式编程.富有表达力的语法.静态强类型和丰富的泛型等特性,而且全部架设于Java虚拟机之上.因此开发者使用Scala时可以继续使用原本熟悉的某种编程特性,但要发挥Scala的强大能力则需要结合使用这些有时候相互抵触的概念和特性,建立一种平衡的和谐.Scala对开发者的真正解放之处在于让开发者可以随意使用最适合手头上的问题的编程范式.

《深入理解Scala》——第2章,第2.2节优先采用面向表达式编程

2.2 优先采用面向表达式编程 深入理解Scala 面向表达式编程是个术语,意思是在代码中使用表达式而不用语句.表达式和语句的区别是什么?语句是可以执行的东西,表达式是可以求值的东西.在实践中这有什么意义呢?表达式返回值,语句执行代码,但是不返回值.本节我们将学习面向表达式编程的全部知识,并理解它对简化程序有什么帮助.我们也会看一下对象的可变性,以及可变性与面向表达式编程的关系. 作者注:语句VS表达式 语句是可以执行的东西,表达式是可以求值的东西. 表达式是运算结果为一个值的代码块.Scala

《深入理解Scala》——第2章,第2.3节优先选择不变性

2.3 优先选择不变性 深入理解Scala 编程中的不变性指对象一旦创建后就不再改变状态.这是函数式编程的基石之一,也是JVM上的面向对象编程的推荐实践之一.Scala也不例外,在设计上优先选择不变性,在很多场景中把不变性作为默认设置.对此,你可能一下子会不适应.本节中,我们将学到不变性对于判等问题和并发编程能提供什么帮助. Scala里首先要明白的是不变对象和不变引用(immutable referene)的区别.Scala里的所有变量都是指向对象的引用.把变量声明为val意味着它是个不变"引

《深入理解Scala》——第2章,第2.4节用None不用null

2.4 用None不用null深入理解Scala Scala在标准库里提供了scala.Option类,鼓励大家在一般编程时尽量不要使用null.Option可以视作一个容器,里面要么有东西,要么什么都没有.Option通过两个子类来实现此含义:Some和None.Some表示容器里有且仅有一个东西,None表示空容器,有点类似List的Nil的含义. 在Java和其他允许null的语言里,null经常作为一个占位符用于返回值,表示非致命的错误,或者表示一个变量未被初始化.Scala里,你可以用

《深入理解Scala》——第2章,第2.5节多态场景下的判等

2.5 多态场景下的判等 深入理解Scala 众所周知,为多态的面向对象系统定义合适的判等和散列方法是个特别难的过程.这是因为子类可能在整个过程中造成一些相当怪异的问题,尤其是当类型层次上有多个实体(concrete)级别的时候.一般来说,对于需要比引用判等更强的判等(译者注:比如需要判断对象内部数据)的类,最好避免多层实体类层次.这是什么意思呢?有些时候类只需要引用判等就够了.也就是说只要两个对象不是同一个实例就判为不等.但是如果我们需要判断两个不同实例是否相等,而且又有多层实体类层次(mul