登入帳戶  | 訂單查詢  | 購物車/收銀台( 0 ) | 在線留言板  | 付款方式  | 運費計算  | 聯絡我們  | 幫助中心 |  加入書簽
會員登入 新用戶登記
HOME新書上架暢銷書架好書推介特價區會員書架精選月讀2023年度TOP分類瀏覽雜誌 臺灣用戶
品種:超過100萬種各類書籍/音像和精品,正品正價,放心網購,悭钱省心 服務:香港台灣澳門海外 送貨:速遞郵局服務站

新書上架簡體書 繁體書
暢銷書架簡體書 繁體書
好書推介簡體書 繁體書

八月出版:大陸書 台灣書
七月出版:大陸書 台灣書
六月出版:大陸書 台灣書
五月出版:大陸書 台灣書
四月出版:大陸書 台灣書
三月出版:大陸書 台灣書
二月出版:大陸書 台灣書
一月出版:大陸書 台灣書
12月出版:大陸書 台灣書
11月出版:大陸書 台灣書
十月出版:大陸書 台灣書
九月出版:大陸書 台灣書
八月出版:大陸書 台灣書
七月出版:大陸書 台灣書
六月出版:大陸書 台灣書

『簡體書』Hadoop技术内幕:深入解析Hadoop Common和HDFS架构设计与实现原理(腾讯资深Hadoop技术专家撰写,EasyHadoop和51CTO等专业技术社区联袂推荐!从源代码角度深入分析Common和HDFS的架构设计与实现原理)

書城自編碼: 2055162
分類:簡體書→大陸圖書→計算機/網絡程序設計
作者: 蔡斌
國際書號(ISBN): 9787111417668
出版社: 机械工业出版社
出版日期: 2013-04-01
版次: 1 印次: 1
頁數/字數: 512/
書度/開本: 16开 釘裝: 平装

售價:HK$ 235.9

我要買

 

** 我創建的書架 **
未登入.


新書推薦:
财之道丛书·如何让人投资你:股权激励融资全揭秘
《 财之道丛书·如何让人投资你:股权激励融资全揭秘 》

售價:HK$ 101.2
PyTorch深度学习与计算机视觉实践
《 PyTorch深度学习与计算机视觉实践 》

售價:HK$ 90.9
新任经理 100 天实战指南
《 新任经理 100 天实战指南 》

售價:HK$ 89.7
日本百鬼画谱
《 日本百鬼画谱 》

售價:HK$ 71.3
大明拐点 : 天启党争
《 大明拐点 : 天启党争 》

售價:HK$ 66.7
纲鉴易知录评注(布面精装  全8册)
《 纲鉴易知录评注(布面精装 全8册) 》

售價:HK$ 572.7
官商跃迁:中国古代政商关系简史
《 官商跃迁:中国古代政商关系简史 》

售價:HK$ 101.2
当代学术·乡族与国家:多元视野中的闽台传统社会(修订本)
《 当代学术·乡族与国家:多元视野中的闽台传统社会(修订本) 》

售價:HK$ 101.2

 

建議一齊購買:

+

HK$ 183.2
《Hadoop权威指南(第3版)》
+

HK$ 153.4
《Hadoop实战手册》
+

HK$ 169.0
《Hadoop基础教程》
+

HK$ 156.4
《Hadoop技术详解(“十二五”国家重点图书出版规划项目)》
+

HK$ 179.4
《Hadoop技术内幕:深入解析YARN架构设计与实现原理》
+

HK$ 182.9
《深入浅出Node.js【国内第一本深入讲解Node的图书】》
內容簡介:
“Hadoop技术内幕”共两册,分别从源代码的角度对“Common+HDFS”和MapReduce的架构设计和实现原理进行了极为详细的分析。《Hadoop技术内幕:深入解析Hadoop
Common和HDFS架构设计与实现原理》由腾讯数据平台的资深Hadoop专家、X-RIME的作者亲自执笔,对Common和HDFS的源代码进行了分析,旨在为Hadoop的优化、定制和扩展提供原理性的指导。除此之外,本书还从源代码实现中对分布式技术的精髓、分布式系统设计的优秀思想和方法,以及Java语言的编码技巧、编程规范和对设计模式的精妙运用进行了总结和分析,对提高读者的分布式技术能力和Java编程能力都非常有帮助。本书适合Hadoop的二次开发人员、应用开发工程师、运维工程师阅读。
全书9章,共分为三个部分:第一部分(第1章)主要介绍了Hadoop源代码的获取和源代码阅读环境的搭建;第二部分(第2~5章)对Hadoop公共工具Common的架构设计和实现原理进行了深入分析,包含Hadoop的配置信息处理、面向海量数据处理的序列化和压缩机制、Hadoop的远程过程调用,以及满足Hadoop上各类应用访问数据的Hadoop抽象文件系统和部分具体文件系统等内容;第三部分(第6~9章)对Hadoop的分布式文件系统HDFS的架构设计和实现原理进行了详细的分析,这部分内容采用了总分总的结构,第6章对HDFS的各个实体和实体间接口进行了分析;第7章和第8章分别详细地研究了数据节点和名字节点的实现原理,并通过第9章对客户端的解析,回顾了HDFS各节点间的配合,完整地介绍了一个大规模数据存储系统的实现。
關於作者:
蔡斌,资深Hadoop技术专家,基于Hadoop的开源项目X-RIME的作者之一。国内Hadoop应用和源代码研究领域的先驱之一,有10余年开发经验,先后任职于朗讯科技、IBM中国研究院等国内外知名企业,目前担任腾讯数据平台部的高级工程师,从事Hadoop相关技术的研究、应用和实施,实战经验非常丰富。对分布式计算、电信增值业务、网络管理等领域有深刻的认识和理解,拥有近10项发明专利,其中两项为美国专利,大部分与海量数据处理相关。近期关注海量数据的流式处理、Hadoop上的大数据应用与挖掘等。
陈湘萍,北京大学计算机系博士,目前就职于中山大学,专注于Hadoop、云计算、软件中间件、模型驱动的软件工程等技术的研究和实践。拥有发明专利5项,参与1项国家电子行业标准的制定,发表学术论文10余篇。
目錄
前 言
第一部分 环境准备
第1章 源代码环境准备
1.1 什么是Hadoop
1.1.1 Hadoop简史
1.1.2 Hadoop的优势
1.1.3 Hadoop生态系统
1.2 准备源代码阅读环境
1.2.1 安装与配置JDK
1.2.2 安装Eclipse
1.2.3 安装辅助工具Ant
1.2.4 安装类UNIX Shell环境Cygwin
1.3 准备Hadoop源代码
1.3.1 下载Hadoop
1.3.2 创建Eclipse项目
1.3.3 Hadoop源代码组织
1.4 小结
第二部分 Common的实现
第2章 Hadoop配置信息处理
2.1 配置文件简介
2.1.1 Windows操作系统的配置文件
2.1.2 Java配置文件
2.2 Hadoop Configuration详解
2.2.1 Hadoop配置文件的格式
2.2.2 Configuration的成员变量
2.2.3 资源加载
2.2.4 使用get*和set*访问设置配置项
2.3 Configurable接口
2.4 小结
第3章 序列化与压缩
3.1 序列化
3.1.1 Java内建序列化机制
3.1.2 Hadoop序列化机制
3.1.3 Hadoop序列化机制的特征
3.1.4 Hadoop Writable机制
3.1.5 典型的Writable类详解
3.1.6 Hadoop序列化框架
3.2 压缩
3.2.1 Hadoop压缩简介
3.2.2 Hadoop压缩API应用实例
3.2.3 Hadoop压缩框架
3.2.4 Java本地方法
3.2.5 支持Snappy压缩
3.3 小结
第4章 Hadoop远程过程调用
4.1 远程过程调用基础知识
4.1.1 RPC原理
4.1.2 RPC机制的实现
4.1.3 Java远程方法调用
4.2 Java动态代理
4.2.1 创建代理接口
4.2.2 调用转发
4.2.3 动态代理实例
4.3 Java NIO
4.3.1 Java基本套接字
4.3.2 Java NIO基础
4.3.3 Java NIO实例:回显服务器
4.4 Hadoop中的远程过程调用
4.4.1 利用Hadoop IPC构建简单的分布式系统
4.4.2 Hadoop IPC的代码结构
4.5 Hadoop IPC连接相关过程
4.5.1 IPC连接成员变量
4.5.2 建立IPC连接
4.5.3 数据分帧和读写
4.5.4 维护IPC连接
4.5.5 关闭IPC连接
4.6 Hadoop IPC方法调用相关过程
4.6.1 Java接口与接口体
4.6.2 IPC方法调用成员变量
4.6.3 客户端方法调用过程
4.6.4 服务器端方法调用过程
4.7 Hadoop IPC上的其他辅助过程
4.7.1 RPC.getProxy和RPC.stopProxy
4.7.2 RPC.getServer和Server的启停
4.8 小结
第5章 Hadoop文件系统
5.1 文件系统
5.1.1 文件系统的用户界面
5.1.2 文件系统的实现
5.1.3 文件系统的保护控制
5.2 Linux文件系统
5.2.1 Linux本地文件系统
5.2.2 虚拟文件系统
5.2.3 Linux文件保护机制
5.2.4 Linux文件系统API
5.3 分布式文件系统
5.3.1 分布式文件系统的特性
5.3.2 基本NFS体系结构
5.3.3 NFS支持的文件操作
5.4 Java文件系统
5.4.1 Java文件系统API
5.4.2 URI和URL
5.4.3 Java输入输出流
5.4.4 随机存取文件
5.5 Hadoop抽象文件系统
5.5.1 Hadoop文件系统API
5.5.2 Hadoop输入输出流
5.5.3 Hadoop文件系统中的权限
5.5.4 抽象文件系统中的静态方法
5.5.5 Hadoop文件系统中的协议处理器
5.6 Hadoop具体文件系统
5.6.1 FileSystem层次结构
5.6.2 RawLocalFileSystem的实现
5.6.3 ChecksumFileSystem的实现
5.6.4 RawInMemoryFileSystem的实现
5.7 小结
第三部分 Hadoop分布式文件系统
第6章 HDFS概述
6.1 初识HDFS
6.1.1 HDFS主要特性
6.1.2 HDFS体系结构
6.1.3 HDFS源代码结构
6.2 基于远程过程调用的接口
6.2.1 与客户端相关的接口
6.2.2 HDFS各服务器间的接口
6.3 非远程过程调用接口
6.3.1 数据节点上的非IPC接口
6.3.2 名字节点和第二名字节点上的非IPC接口
6.4 HDFS主要流程
6.4.1 客户端到名字节点的文件与目录操作
6.4.2 客户端读文件
6.4.3 客户端写文件
6.4.4 数据节点的启动和心跳
6.4.5 第二名字节点合并元数据
6.5 小结
第7章 数据节点实现
7.1 数据块存储
7.1.1 数据节点的磁盘目录文件结构
7.1.2 数据节点存储的实现
7.1.3 数据节点升级
7.1.4 文件系统数据集的工作机制
7.2 流式接口的实现
7.2.1 DataXceiverServer和DataXceiver
7.2.2 读数据
7.2.3 写数据
7.2.4 数据块替换、数据块拷贝和读数据块检验信息
7.3 作为整体的数据节点
7.3.1 数据节点和名字节点的交互
7.3.2 数据块扫描器
7.3.3 数据节点的启停
7.4 小结
第8章 名字节点实现
8.1 文件系统的目录树
8.1.1 从i-node到INode
8.1.2 命名空间镜像和编辑日志
8.1.3 第二名字节点
8.1.4 FSDirectory的实现
8.2 数据块和数据节点管理
8.2.1 数据结构
8.2.2 数据节点管理
8.2.3 数据块管理
8.3 远程接口ClientProtocol的实现
8.3.1 文件和目录相关事务
8.3.2 读数据使用的方法
8.3.3 写数据使用的方法
8.3.4 工具dfsadmin依赖的方法
8.4 名字节点的启动和停止
8.4.1 安全模式
8.4.2 名字节点的启动
8.4.3 名字节点的停止
8.5 小结
第9章 HDFS客户端
9.1 认识DFSClient
9.1.1 DFSClient的构造和关闭
9.1.2 文件和目录、系统管理相关事务
9.1.3 删除HDFS文件目录的流程
9.2 输入流
9.2.1 读数据前的准备:打开文件
9.2.2 读数据
9.2.3 关闭输入流
9.2.4 读取HDFS文件数据的流程
9.3 输出流
9.3.1 写数据前的准备:创建文件
9.3.2 写数据:数据流管道的建立
9.3.3 写数据:数据包的发送
9.3.4 写数据:数据流管道出错处理
9.3.5 写数据:租约更新
9.3.6 写数据:DFSOutputStream.sync的作用
9.3.7 关闭输出流
9.3.8 向HDFS文件写入数据的流程
9.4 DistributedFileSystem的实现
9.5 HDFS常用工具
9.5.1 FsShell
9.5.2 DFSAdmin
9.6 小结
內容試閱
第一部分
环 境 准 备
本部分内容
源代码环境准备
第1章 源代码环境准备
数据!数据!数据!
今天,我们正被数据包围。全球43亿部电话、20亿位互联网用户每秒都在不断地产生大量数据,人们发送短信给朋友、上传视频、用手机拍照、更新社交网站的信息、转发微博、点击广告等,使得机器产生和保留了越来越多的数据。数据的指数级增长对处于市场领导地位的互联网公司,如Facebook、谷歌、雅虎、亚马逊、腾讯等提出了挑战。它们需要对TB级别和PB级别的数据进行分析处理,以发现哪些网站更受欢迎,哪些商品更具有吸引力,哪些广告更吸引用户。传统的工具对于处理如此规模的数据集越来越无能为力。
现在,Hadoop应运而生,庞大的信息流有了新的处理平台。
1.1 什么是Hadoop
Hadoop是Apache基金会下的一个开源分布式计算平台,以Hadoop分布式文件系统(Hadoop Distributed
File
System,HDFS)和MapReduce分布式计算框架为核心,为用户提供了底层细节透明的分布式基础设施。HDFS的高容错性、高伸缩性等优点,允许用户将Hadoop部署在廉价的硬件上,构建分布式系统;MapReduce分布式计算计算框架则允许用户在不了解分布式系统底层细节的情况下开发并行、分布的应用程序,充分利用大规模的计算资源,解决传统高性能单机无法解决的大数据处理问题。
Apache Hadoop是目前分析海量数据的首选工具。
1.1.1 Hadoop简史
谈到Hadoop的历史,就不得不提到Lucene和Nutch。Hadoop开始时是Nutch的一个子项目,而Nutch又是Apache
Lucene的子项目。这3个项目都是由Doug Cutting创立,每个项目在逻辑上都是前一个项目的演进。
Lucene是引擎开发工具包,提供了一个纯Java的高性能全文索引,它可以方便地嵌入各种实际应用中实现全文搜索索引功能。Nutch项目开始于2002年,是以Lucene为基础实现的搜索引擎应用。Lucene为Nutch提供了文本搜索和索引的API,Nutch不光有搜索功能,还有数据抓取的功能。
但很快,Doug Cutting和Mike
Calarella(Hadoop和Nutch的另一位创始人)就意识到,他们的架构无法扩展以支持拥有数十亿网页的网络。这个时候,Google的研究人员在2003年的ACM
SOSP(Symposium on Operating Systems
Principles)会议上发表的描述Google分布式文件系统(简称GFS)的论文及时地为他们提供了帮助。GFS或类似的系统可以解决他们在网络抓取和索引过程中产生的大量文件存储需求。于是,在2004年,他们开始写GFS的一个开源实现,即Nutch分布式文件系统(NDFS)。
2004年,在OSDI(Operating Systems Design and
Implementation)会议上,Google发表了论文,向全世界介绍了MapReduce。2005年初,Nutch的开发者在Nutch上有了一个可工作的MapReduce应用,到当年的年中,所有主要的Nutch算法被迁移到MapReduce和NDFS上。
在Nutch0.8.0版本之前,Hadoop还属于Nutch的一部分,而从Nutch0.8.0开始,Doug
Cutting等人将其中实现的NDFS和MapReduce剥离出来成立了一个新的开源项目,这就是Hadoop。同时,对比以前的Nutch版本,Nutch0.8.0在架构上有了根本性的变化,它完全构建在Hadoop的基础之上了。这个时候,已经是2006年2月,大约在同一时间,Doug
Cutting加入雅虎,Yahoo投入了专门的团队和资源将Hadoop发展成一个可在网络上运行的系统。
值得一提的是Hadoop名字的来源。
为软件项目命名时,Doug
Cutting似乎总会得到家人的启发。Lucene是他妻子的中间名,也是她外祖母的名字。他的儿子在咿呀学语时,总把所有用于吃饭的词叫成Nutch。Doug
Cutting如此解释Hadoop的得名:“这是我的孩子给一头吃饱了的棕黄色大象起的名字。我的命名标准就是简短,容易发音和拼写,没有太多的意义,并且不会被用于别处。小孩子是这方面的高手,Googol就是由小孩命名的。”
2008年1月,Hadoop已成为Apache顶级项目,证明它是成功的。通过这次机会,Hadoop成功地被雅虎之外的很多公司应用,如Facebook、纽约时报等。特别是纽约时报,它使用运行在亚马逊的EC2云计算上的Hadoop,将4TB的报纸扫描文档压缩,转换为用于Web的PDF文档,这个过程历时不到24小时,使用100台机器运行,这成为Hadoop一个良好的宣传范例。
2008年2月,雅虎宣布其索引网页的生产系统采用了在10
000多个核的Linux集群上运行的Hadoop。Hadoop真正达到了万维网的规模。2008年4月,在一个900节点的Hadoop集群上,雅虎的研究人员运行1TB的Jim
Gray基准排序,只用了209秒,而到了2009年4月,在一个1400节点的集群上对500GB数据进行排序,只用了59秒,这显示了Hadoop强大的计算能力。
2008年开始,Hadoop迈向主流,开始了它的爆发式发展,出现了大量的相关项目,如2008年的HBase、ZooKeeper和Mahout,2009年的Pig、Hive等。同时,还出现了像Cloudera(成立于2008年)和Hortonworks(以雅虎的Hadoop业务部门为基础成立的公司)这样的专注于Hadoop的公司。
经过多年的发展,Hadoop已经从初出茅庐的小象变身为行业巨人。
1.1.2 Hadoop的优势
将Hadoop运用于海量数据处理,主要有如下几个优势:
方便:Hadoop可以运行在一般商业机器构成的大型集群上,或者是亚马逊弹性计算云(Amazon EC2)等云计算服务上。
弹性:Hadoop通过增加集群节点,可以线性地扩展以处理更大的数据集。同时,在集群负载下降时,也可以减少节点,以高效使用计算资源。
健壮:Hadoop在设计之初,就将故障检测和自动恢复作为一个设计目标,它可以从容处理通用计算平台上出现的硬件失效的情况。
简单:Hadoop允许用户快速编写出高效的并行分布代码。
由于Hadoop具有上述优势,使得Hadoop在学术界和工业界都大受欢迎。今天,Hadoop已经成为许多公司和大学基础计算平台的一部分。学术界如内布拉斯加大学通过使用Hadoop,支持紧凑型子螺旋形磁谱仪实验数据的保存和计算;加州大学伯克利分校则对Hadoop进行研究,以提高其整体性能;在国内,中国科学院计算技术研究所在Hadoop上开展了数据挖掘和地理信息处理等的研究。在工业界,Hadoop已经成为很多互联网公司基础计算平台的一个核心部分,如雅虎、Facebook、腾讯等;传统行业,如传媒、电信、金融,也在使用这个系统,进行数据存储与处理。
如今,Hadoop分布式计算基础架构这把“大伞”下,已经包含了多个子项目。而海量数据处理也迅速成为许多程序员需要掌握的一项重要技能。
1.1.3 Hadoop生态系统
经过几年的快速发展,Hadoop现在已经发展成为包含多个相关项目的软件生态系统。狭义的Hadoop核心只包括Hadoop
Common、Hadoop HDFS和Hadoop
MapReduce三个子项目,但和Hadoop核心密切相关的,还包括Avro、ZooKeeper、Hive、Pig和HBase等项目,构建在这些项目之上的,面向具体领域、应用的Mahout、X-Rime、Crossbow和Ivory等项目,以及Chukwa、Flume、Sqoop、Oozie和Karmasphere等数据交换、工作流和开发环境这样的外围支撑系统。它们提供了互补性的服务,共同提供了一个海量数据处理的软件生态系统,Hadoop生态系统如图1-1所示。
图1-1 Hadoop生态系统
下面详细介绍生态系统的组成。
1. Hadoop Common
从Hadoop 0.20版本开始,原来Hadoop项目的Core部分更名为Hadoop
Common。Common为Hadoop的其他项目提供了一些常用工具,主要包括系统配置工具Configuration、远程过程调用RPC、序列化机制和Hadoop抽象文件系统FileSystem等。它们为在通用硬件上搭建云计算环境提供基本的服务,并为运行在该平台上的软件开发提供了所需的API。
2. Avro
Avro由Doug
Cutting牵头开发,是一个数据序列化系统。类似于其他序列化机制,Avro可以将数据结构或者对象转换成便于存储和传输的格式,其设计目标是用于支持数据密集型应用,适合大规模数据的存储与交换。Avro提供了丰富的数据结构类型、快速可压缩的二进制数据格式、存储持久性数据的文件集、远程调用RPC和简单动态语言集成等功能。
3. ZooKeeper
在分布式系统中如何就某个值(决议)达成一致,是一个十分重要的基础问题。ZooKeeper作为一个分布式的服务框架,解决了分布式计算中的一致性问题。在此基础上,ZooKeeper可用于处理分布式应用中经常遇到的一些数据管理问题,如统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。ZooKeeper常作为其他Hadoop相关项目的主要组件,发挥着越来越重要的作用。
4. HDFS
HDFS(Hadoop Distributed File
System,Hadoop分布式文件系统)是Hadoop体系中数据存储管理的基础。它是一个高度容错的系统,能检测和应对硬件故障,用于在低成本的通用硬件上运行。HDFS简化了文件的一致性模型,通过流式数据访问,提供高吞吐量应用程序数据访问功能,适合带有大型数据集的应用程序。
5. MapReduce
MapReduce是一种计算模型,用以进行大数据量的计算。Hadoop的MapReduce实现,和Common、HDFS一起,构成了Hadoop发展初期的三个组件。MapReduce将应用划分为Map和Reduce两个步骤,其中Map对数据集上的独立元素进行指定的操作,生成键-值对形式中间结果。Reduce则对中间结果中相同“键”的所有“值”进行规约,以得到最终结果。MapReduce这样的功能划分,非常适合在大量计算机组成的分布式并行环境里进行数据处理。
6. HBase
Google发表了BigTable系统论文后,开源社区就开始在HDFS上构建相应的实现HBase。HBase是一个针对结构化数据的可伸缩、高可靠、高性能、分布式和面向列的动态模式数据库。和传统关系数据库不同,HBase采用了BigTable的数据模型:增强的稀疏排序映射表(KeyValue),其中,键由行关键字、列关键字和时间戳构成。HBase提供了对大规模数据的随机、实时读写访问,同时,HBase中保存的数据可以使用MapReduce来处理,它将数据存储和并行计算完美地结合在一起。
7. Hive
Hive是Hadoop中的一个重要子项目,最早由Facebook设计,是建立在Hadoop基础上的数据仓库架构,它为数据仓库的管理提供了许多功能,包括:数据ETL(抽取、转换和加载)工具、数据存储管理和大型数据集的查询和分析能力。Hive提供的是一种结构化数据的机制,定义了类似于传统关系数据库中的类SQL语言:Hive
QL,通过该查询语言,数据分析人员可以很方便地运行数据分析业务。
8. Pig
Pig运行在Hadoop上,是对大型数据集进行分析和评估的平台。它简化了使用Hadoop进行数据分析的要求,提供了一个高层次的、面向领域的抽象语言:Pig
Latin。通过Pig
Latin,数据工程师可以将复杂且相互关联的数据分析任务编码为Pig操作上的数据流脚本,通过将该脚本转换为MapReduce任务链,在Hadoop上执行。和Hive一样,Pig降低了对大型数据集进行分析和评估的门槛。
9. Mahout
Mahout起源于2008年,最初是Apache
Lucent的子项目,它在极短的时间内取得了长足的发展,现在是Apache的顶级项目。Mahout的主要目标是创建一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。Mahout现在已经包含了聚类、分类、推荐引擎(协同过滤)和频繁集挖掘等广泛使用的数据挖掘方法。除了算法,Mahout还包含数据的输入输出工具、与其他存储系统(如数据库、MongoDB
或Cassandra)集成等数据挖掘支持架构。
10. X-RIME
X-RIME是一个开源的社会网络分析工具,它提供了一套基于Hadoop的大规模社会网络复杂网络分析工具包。X-RIME在MapReduce
的框架上对十几种社会网络分析算法进行了并行化与分布式化,从而实现了对互联网级大规模社会网络复杂网络的分析。它包括HDFS存储系统上的一套适合大规模社会网络分析的数据模型、基于MapReduce实现的一系列社会网络分析分布式并行算法和X-RIME处理模型,即X-RIME工具链等三部分。
11. Crossbow
Crossbow是在Bowtie和SOAPsnp基础上,结合Hadoop的可扩展工具,该工具能够充分利用集群进行生物计算。其中,Bowtie是一个快速、高效的基因短序列拼接至模板基因组工具;SOAPsnp则是一个重测序一致性序列建造程序。它们在复杂遗传病和肿瘤易感的基因定位,到群体和进化遗传学研究中发挥着重要的作用。Crossbow利用了Hadoop
Stream,将Bowtie、SOAPsnp上的计算任务分布到Hadoop集群中,满足了新一代基因测序技术带来的海量数据存储及计算分析要求。
12. Chukwa
Chukwa是开源的数据收集系统,用于监控大规模分布式系统(2000+以上的节点,
系统每天产生的监控数据量在T级别)。它构建在Hadoop的HDFS和MapReduce基础之上,继承了Hadoop的可伸缩性和鲁棒性。Chukwa包含一个强大和灵活的工具集,提供了数据的生成、收集、排序、去重、分析和展示等一系列功能,是Hadoop使用者、集群运营人员和管理人员的必备工具。
13. Flume
Flume是Cloudera开发维护的分布式、可靠、高可用的日志收集系统。它将数据从产生、传输、处理并最终写入目标的路径的过程抽象为数据流,在具体的数据流中,数据源支持在Flume中定制数据发送方,从而支持收集各种不同协议数据。同时,Flume数据流提供对日志数据进行简单处理的能力,如过滤、格式转换等。此外,Flume还具有能够将日志写往各种数据目标(可定制)的能力。总的来说,Flume是一个可扩展、适合复杂环境的海量日志收集系统。
14. Sqoop
Sqoop是SQL-to-Hadoop的缩写,是Hadoop的周边工具,它的主要作用是在结构化数据存储与Hadoop之间进行数据交换。Sqoop可以将一个关系型数据库(例如MySQL、Oracle、PostgreSQL等)中的数据导入Hadoop的HDFS、Hive中,也可以将HDFS、Hive中的数据导入关系型数据库中。Sqoop充分利用了Hadoop的优点,整个数据导入导出过程都是用MapReduce实现并行化,同时,该过程中的大部分步骤自动执行,非常方便。
15. Oozie
在Hadoop中执行数据处理工作,有时候需要把多个作业连接到一起,才能达到最终目的。针对上述需求,Yahoo开发了开源工作流引擎Oozie,用于管理和协调多个运行在Hadoop平台上的作业。在Oozie中,计算作业被抽象为动作,控制流节点则用于构建动作间的依赖关系,它们一起组成一个有向无环的工作流,描述了一项完整的数据处理工作。Oozie工作流系统可以提高数据处理流程的柔性,改善Hadoop集群的效率,并降低开发和运营人员的工作量。
16. Karmasphere
Karmasphere包括Karmasphere Analyst和Karmasphere
Studio。其中,Analyst提供了访问保存在Hadoop里面的结构化和非结构化数据的能力,用户可以运用SQL或其他语言,进行即时查询并做进一步的分析。Studio则是基于NetBeans的MapReduce集成开发环境,开发人员可以利用它方便快速地创建基于Hadoop的MapReduce应用。同时,该工具还提供了一些可视化工具,用于监控任务的执行,显示任务间的输入输出和交互等。需要注意的是,在上面提及的这些项目中,Karmasphere是唯一不开源的工具。
正是这些项目的发展,带来了廉价的处理大数据的能力,让Hadoop成为大数据行业发展背后的驱动力。如今,Hadoop已成为分布式大数据处理事实上的标准。
1.2 准备源代码阅读环境
在研究一个开源项目之前,都需要安装与配置基本的开发环境和源代码的阅读环境。这一系列内容包括:安装与配置JDK、安装开发调试IDE、安装与配置相关辅助工具等。
1.2.1 安装与配置JDK
在分析Hadoop的源代码前,需要做一些准备工作,其中搭建Java环境是必不可少的。Hadoop的运行环境要求Java
1.6以上的版本。打开http:www.oracle.comtechnetworkjavajavasedownloadsindex.html页面,可以下载最新的JDK安装程序,下载页面如图1-2所示。
图1-2 JDK下载首页
安装完后,要检查JDK是否配置正确。
某些第三方的程序会把自己的JDK路径加到系统PATH环境变量中,这样,即便安装最新版本的JDK,系统还是会使用第三方程序所带的JDK。在Windows环境中,需要正确配置的Java运行时环境变量有JAVA_HOME、CLASSPATH和PATH等。
方便起见,我们往往为操作系统本身指定一个系统级别的环境变量。例如,Windows平台上的系统环境变量可以在“系统属性”的“高级”选项卡中找到,可在其中配置JAVA_HOME、PATH和CLASSPATH值。图1-3是Windows
XP操作系统中为系统添加JAVA_HOME环境变量的例子。
安装并配置完成后,可以在命令行窗口中输入“java
-version”命令检测当前的JDK运行版本。如果配置完全正确,会显示当前客户端的JRE运行版本,如图1-4所示。
图1-3 Windows XP上添加JAVA_HOME环境变量
图1-4 JDK安装成功
1.2.2 安装Eclipse
在成功安装和配置JDK后,还需要安装进行Java开发调试的IDE(Integrated Development
Environment,集成开发环境),因为一个好的开发环境和源代码阅读环境可以使工作效率事半功倍。目前比较常用的Java开发IDE主要有Eclipse和NetBeans等,读者可以任意选择自己习惯的IDE作为开发工具。本书以Eclipse集成开发环境为例,着重介绍在Eclipse中开发与调试源码的方法。读者也可以举一反三,在其他IDE中做相应的尝试。
Eclipse是一个界面友好的开源IDE,并支持成千上万种不同的插件,为代码分析和源码调试提供了极大的便利。可以在Eclipse官方网站(http:www.eclipse.orgdownloads)找到Eclipse的各个版本(对Hadoop源码进行分析,只需要下载Eclipse
IDE for Java SE
Developers)并下载安装。Eclipse下载页面如图1-5所示。Eclipse是基于Java的绿色软件,解压下载得到ZIP包后就能直接使用。关于Eclipse的基本使用已超出了本书的范围,因此下面仅向读者简要介绍如何使用Eclipse进行一些基本的源代码分析工作。
1. 定位某个类、方法和属性
在分析源代码的过程中,有时候需要快速定位光标位置的某个类、方法和属性,在Eclipse中可通过按F3键,方便地查看类、方法和变量的声明和定义的源代码。
有时候在查看一些在JDK库中声明定义的类、方法和变量的源代码时,打开的却是相应的CLASS文件(字节码),为此Eclipse提供了一个功能,把字节码和源代码关联起来,这样,就可以查看(提供源代码)第三方库的实现了。
图1-5 Eclipse下载页
Eclipse打开字节码文件时,可以单击“Attach Source”按钮进行字节码和源代码关联,如图1-6所示。
图1-6 字节码和源代码关联
在查看java.net.URL时,Eclipse提示代码关联,将JDK中附带的JDK源文件压缩包(在安装目录下可以找到,名字是“src.zip”)绑定到“rt.jar”,以后,只要访问该JAR包中的字节码文件,Eclipse就会自动显示相应的源代码文件。
其他第三方Java插件的源代码文件的载入方法类似。
2. 根据类名查找相应的类
如果知道希望在编辑器中打开的Java类的名称,则找到并打开它的最简单的方法是使用快捷键Ctrl+Shift+T(或者单击Navigate→Open
Type)打开Open Type窗口,在该窗口中输入名称,Eclipse将显示可以找到的匹配类型列表。图1-7显示了Hadoop
1.0中名字包含“HDFS”的所有类。
图1-7 在Eclipse中查看名字包含HDFS的所有类
注意 除了输入完整的类名之外,还可以使用“*”和“?”通配符来分别匹配“任何”或“单个”字符。
3. 查看类的继承结构
Java是面向对象的程序设计语言,继承是面向对象的三大特性之一,了解类、接口在继承关系上的位置,可以更好地了解代码的工作原理。选中某个类并使用Ctrl
+ T快捷键(或单击Navigate→Quick Type Hierarchy)可以显示类型层次结构。
层次结构将显示所选元素的子类型。如图1-8所示,该列表显示已知的所有org.apache.hadoop.fs.FileSystem子类。
图1-8 在Eclipse中显示类型层次结构
4. 分析Java方法的调用关系
在Eclipse中可以分析Java方法的调用关系,具体做法如下:在代码区中选择相应的方法定义,然后用鼠标右键选取Open Call
Hierarchy项或者使用快捷键Ctrl+Alt+H,则可以在Call
Hierarchy视图中看到方法的调用关系,该视图还提供了一层一层的方法调用追溯功能,对查找方法的相互调用关系非常有用,如图1-9所示。
图1-9 在Eclipse中查看方法的调用关系
注意 快捷键是日常开发调试中最为便捷的技巧。Eclipse中的快捷键也可谓是博大精深,这里不一一列举。读者可以在实际开发中不断摸索并牢记这些快捷键,因为它们也是日常开发中必不可少的内容。读者也可参照Eclipse中的这些快捷键,在其他IDE中找到相应的快捷键设置。
1.2.3 安装辅助工具Ant
在安装和配置了JDK和Eclipse后,为了编译Hadoop,还需要安装辅助工具Ant。
对Hadoop这样复杂的项目进行构建,不是仅仅将Java源文件编译并打包这么简单,项目中使用到的各种资源都需要得到合理的安排,如有些文件需要拷贝到指定位置,有些类需要放入某个JAR归档文件,而另外一些类则需要放入另外一个JAR归档文件等,这些工作如果全部由手工执行,项目的构建部署将会变得非常困难,而且难免出错。Ant是针对这些问题推出的构建工具,在Java的项目中得到了最广泛的使用。
Ant跨平台、可扩展,而且运行高效,使用Ant,开发人员只需要编写一个基于XML的配置文件(文件名一般为build.xml),定义各种构建任务,如复制文件、编译Java源文件、打包JAR归档文件等,以及这些构建任务间的依赖关系,如构建任务“打包JAR归档文件”需要依赖另外一个构建任务“编译Java源文件”。Ant会根据这个文件中的依赖关系和构建任务,对项目进行构建、打包甚至部署。
和Hadoop一样,Ant也是Apache基金会支持的项目,可以在http:ant.apache.orgbindownload.cgi下载,下载页面如图1-10所示。
和Eclipse类似,Ant也是绿色软件,不需要安装,解压缩下载的文件后需要做一些配置,用户需要添加环境变量ANT_HOME(指向Ant的根目录),并修改环境变量PATH(在Windows环境下,添加%ANT_HOME%\bin到PATH中)。安装并配置完成后,可以在命令行窗口中输入“ant
-version”命令来检测Ant是否被正确设置。
图1-10 Apache Ant下载页面
Hadoop的Ant还使用了一个工具:Apache
Ivy,它是Ant的一个子项目,用于管理项目的外部构建依赖项。外部构建依赖项是指软件开发项目的构建需要依靠来自其他项目的源代码或JAR归档文件,例如,Hadoop项目就依靠log4j作为日志记录工具,这些外部依赖项使得构建软件变得复杂。对于小项目而言,一种简单可行的方法是将其依赖的全部项目(JAR文件)放入一个目录(一般是lib)中,但当项目变得庞大以后,这种方式就会显得很笨拙。Apache的另外一个构建工具Maven中,引入了JAR文件公共存储库的概念,通过外部依赖项声明和公开的公共存储库(通过HTTP协议)访问,自动查找外部依赖项并下载,以满足构建时的依赖需要。
Ivy提供了Ant环境下最一致、可重复、易于维护的方法,来管理项目的所有构建依赖项。和Ant类似,Ivy也需要开发人员编写一个XML形式的配置文件(一般文件名为ivy.xml),列举项目的所有依赖项;另外还要编写一个ivysettings.xml文件(可以随意为此文件命名),用于配置下载依赖关系的JAR文件的存储库。通过Ant的两个Ivy任务ivy:settings和ivy:retrieve,就可以自动查找依赖项并下载对应的JAR文件。
1.2.4 安装类UNIX Shell环境Cygwin
对于在Windows上工作的读者,还需要准备类UNIX Shell环境的Cygwin。
注意 在Linux等类UNIX系统中进行Hadoop代码分析、构建的读者可以略过这一节。
Cygwin是用于Windows的类UNIX Shell环境,由两个组件组成:UNIX
API库(它模拟UNIX操作系统提供的许多特性),以及在此基础上的Bash
Shell改写版本和许多UNIX实用程序,它们一起提供了大家熟悉的UNIX命令行界面。
Cygwin的安装程序setup.exe是一个标准的Windows程序,通过它可以安装或重新安装软件,以及添加、修改或升级Cygwin组件。其下载页面为http:cygwin.comindex.html,如图1-11所示。
图1-11 Cygwin下载页面
执行安装程序setup.exe,并在安装程序的步骤4(Cygwin Setup – Select
Package)中选择UNIX的在线编辑器sed,如图1-12所示(可以利用Search输入框快速找到sed)。
图1-12 Cygwin中选择在线编辑器sed
在安装sed时,setup.exe会自动安装它依赖的包。在Cygwin中,可用的包超过1000个,所以只需选择需要的类别和包,以后随时可以通过再次运行setup.exe,添加整个类别或单独的包。在Windows下构建Hadoop,只需要文本处理工具sed。
安装完成后,使用Start菜单或双击Cygwin图标启动Cygwin。可以在Shell环境中执行“ant -version | sed
"sversionVersiong"”命令验证Cygwin环境,如图1-13所示。
图1-13 Cygwin安装验证
成功安装JDK、Eclipse、Ant和Cygwin之后,就可以开始准备Hadoop源代码分析的Eclipse环境了。
1.3 准备Hadoop源代码
在Hadoop的官方网站(http:hadoop.apache.org)中,可以找到Hadoop项目相关的信息,如图1-14所示。
图1-14 Apache Hadoop官方网站
1.3.1 下载Hadoop
前面在介绍Hadoop生态系统的时候,已经了解到Hadoop发展初期的系统中包括Common(开始使用的名称是Core)、HDFS和MapReduce三部分,现在这些子系统都已经独立,成为Apache的子项目。但在Hadoop
1.0的发行包中,Common、HDFS和MapReduce还是打包在一起,我们只需要下载一个hadoop-1.0.0.tar.gz包即可。注意,Hadoop官方也提供Subversion(SVN)方式的代码下载,SVN地址为http:svn.apache.orgreposasfhadoopcommontagsrelease-0.1.0。
熟悉Subversion的读者,也可以通过该地址下载Hadoop1.0版本代码,该Tag也包含了上述三部分的代码。
Apache提供了大量镜像网站,供大家下载它的软件和源码,上面提到的hadoop-1.0.0.tar.gz的一个下载地址为http:apache.etoak.comhadoopcommonhadoop-1.0.0,如图1-15所示。
图1-15 Apache Hadoop 1.0的一个下载页
该地址包含了Hadoop
1.0的多种发行方式,如64位系统上的hadoop-1.0.0-1.adm64.rpm、不包含源代码的发行包hadoop-1.0.0.bin.tar.gz等。下载的hadoop-1.0.0.tar.gz是包括源代码的Hadoop发行包。
1.3.2 创建Eclipse项目
解压下载的hadoop-1.0.0.tar.gz包,假设解压后Hadoop的根目录是E:\hadoop-1.0.0,启动Cygwin,进入项目的根目录,我们开始将代码导入Eclipse。Hadoop的Ant配置文件build.xml中提供了eclipse任务,该任务可以为Hadoop代码生成Eclipse项目文件,免去创建Eclipse项目所需的大量配置工作。只需在Cygwin下简单地执行“ant
eclipse”命令即可,如图1-16所示。
图1-16 创建Eclipse项目文件
注意 该过程需要使用UNIX的在线编辑器sed,所以一定要在Cygwin环境里执行上述命令,否则会出错。
命令运行结束后,就可以在Eclipse中创建项目了。打开Eclipse的File→New→Java
Project,创建一个新的Java项目,选择项目的位置为Hadoop的根目录,即E:\hadoop-1.0.0,然后单击“Finish”按钮,就完成了Eclipse项目的创建,如图1-17所示。
图1-17 创建Eclipse项目
完成上述工作以后,Eclipse提示一个错误:“Unbound classpath variable:
''ANT_HOMElibant.jar'' in project ''hadoop-1.0.0''”。
显然,我们需要设置系统的ANT_HOME变量,让Eclipse能够找到编译源码需要的Ant库,选中项目,然后打开Eclipse的Project→Properties→Java
Build
Path,在Libraries页编辑(单击“Edit”按钮)出错的项:ANT_HOMElibant.jar,创建变量ANT_HOME(在接下来第一个对话框里单击“Varliable”,第二个对话框里单击“New”按钮),其值为Ant的安装目录,如图1-18所示。
由于本书只分析Common和HDFS两个模块,在Project→Properties→Java Build
Path的Source页只保留两个目录,分别是core和hdfs,如图1-19所示。
完成上述操作以后,创建Eclipse项目的任务就完成了。
图1-18 创建ANT_HOME变量
图1-19 保留core和hdfs两个源码目录
1.3.3 Hadoop源代码组织
打开已经解压的Hadoop 1.0源代码,进入src目录,该目录包含了Hadoop中所有的代码,如图1-20所示。
前面已经提到过,Hadoop
1.0的发行包中,Common、HDFS和MapReduce三个模块还是打包在一起的,它们的实现分别位于core、hdfs和mapred子目录下。源代码目录src下还有若干值得关注的子目录,具体如下。
tools:包含Hadoop的一些实用工具的实现,如存档文件har、分布式拷贝工具distcp、MapReduce执行情况分析工具rumen等。
benchmarks:包含对Hadoop进行性能测试的两个工具gridmix和gridmix2,通过这些工具,可以测试Hadoop集群的一些性能指标。
c++:需要提及的是libhdfs,它通过Java的C语言库界面,实现了一套访问HDFS的C接口。
examples:为开发人员提供了一些使用Hadoop的例子,不过这些例子只涉及MapReduce的API,本书中不会讨论这部分内容。
contrib:是contribution的缩写,包含大量Hadoop辅助模块的实现,如在亚马逊弹性计算云上部署、运行Hadoop所需的脚本就在contrib\ec2目录下。
test:包含项目的单元测试用例,在该目录中能找到Common、HDFS和MapReduce等模块的单元测试代码。
图1-20 Hadoop源码组织
1.4 小结
大数据以及相关的概念、技术是业界和学界最近关注的热点内容,Hadoop在其中扮演了十分重要的角色。本节首先对Hadoop进行了简单的介绍,展示了蓬勃发展的Hadoop生态系统和Hadoop的简单历史。并在此基础上,向读者介绍了阅读分析Hadoop所必需的开发环境的搭建过程,包括:安装与配置JDK、安装与配置Eclipse、安装与配置辅助工具的工作。最后,在上述环境中,从零开始建立了一个包含Hadoop
Common和HDFS的源码环境,为进一步学习Hadoop源代码做好准备。

 

 

書城介紹  | 合作申請 | 索要書目  | 新手入門 | 聯絡方式  | 幫助中心 | 找書說明  | 送貨方式 | 付款方式 香港用户  | 台灣用户 | 大陸用户 | 海外用户
megBook.com.hk
Copyright © 2013 - 2024 (香港)大書城有限公司  All Rights Reserved.