没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
试读
17页
Hadoop原来是Apache Lucene下的一个子项目,它最初是从Nutch项目中分离出来的专门负责分布式存储以及分布式运算的项目。简单地说来,Hadoop是一个可以更容易开发和运行处理大规模数据的软件平台。下面列举hadoop主要的一些特点: 1 扩容能力(Scalable):能可靠地(reliably)存储和处理千兆字节(PB)数据。 2 成本低(Economical):可以通过普通机器组成的服务器群来分发以及处理数据。这些服务器群总计可达数千个节点。 3 高效率(Efficient):通过分发数据,hadoop可以在数据所在的节点上并行地(parallel)处理它们,这使得处理非常的快速。 4 可靠性(Reliable):hadoop能自动地维护数据的多份复制,并且在任务失败后能自动地重新部署(redeploy)计算任务。 Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有着高容错性(fault-tolerent)的特点,并且设计用来部署在低廉的(low-cost)硬件上。而且它提供高传输率(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求(requirements)这样可以流的形式访问(streaming access)文件系统中的数据。
资源推荐
资源详情
资源评论
Hadoop 源码的入门解析
Hadoop 源码的入门解析
1 Hadoop 是什么
Hadoop 原来是 Apache Lucene 下的一个子项目,它最初是从 Nutch 项目中分离出来的专门负责分布式存储以
及分布式运算的项目。简单地说来,Hadoop 是一个可以更容易开发和运行处理大规模数据的软件平台。下面列举
hadoop 主要的一些特点:
1 扩容能力(Scalable):能可靠地(reliably)存储和处理千兆字节(PB)数据。
2 成本低(Economical):可以通过普通机器组成的服务器群来分发以及处理数据。这些服务器群总计可
达数千个节点。
3 高效率(Ecient):通过分发数据,hadoop 可以在数据所在的节点上并行地(parallel)处理它们,
这使得处理非常的快速。
4 可靠性(Reliable):hadoop 能自动地维护数据的多份复制,并且在任务失败后能自动地重新部署
(redeploy)计算任务。
Hadoop 实现了一个分布式文件系统(Hadoop Distributed File System),简称 HDFS。HDFS 有着高容错性
(fault-tolerent)的特点,并且设计用来部署在低廉的(low-cost)硬件上。而且它提供高传输率(high
throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS 放宽了
(relax)POSIX 的要求(requirements)这样可以流的形式访问(streaming access)文件系统中的数据。
Hadoop 还实现了 MapReduce 分布式计算模型。MapReduce 将应用程序的工作分解成很多小的工作小块
(small blocks of work)。HDFS 为了做到可靠性(reliability)创建了多份数据块(data blocks)的复制
(replicas),并将它们放置在服务器群的计算节点中(compute nodes),MapReduce 就可以在它们所在的节点
上处理这些数据了。
如下图所示:
1
Hadoop 源码的入门解析
Hadoop API 被分成(divide into)如下几种主要的包(package)
org.apache.hadoop.conf 定义了系统参数的配置文件处理 API。
org.apache.hadoop.fs 定义了抽象的文件系统 API。
org.apache.hadoop.dfs Hadoop 分布式文件系统(HDFS)模块的实现。
org.apache.hadoop.io 定义了通用的 I/O API,用于针对网络,数据库,文件等数据对象做读写
操作。
org.apache.hadoop.ipc 用于网络服务端和客户端的工具,封装了网络异步 I/O 的基础模块。
org.apache.hadoop.mapred Hadoop 分布式计算系统(MapReduce)模块的实现,包括任
务的分发调度等。
org.apache.hadoop.metrics 定义了用于性能统计信息的 API,主要用于 mapred 和 dfs 模块。
org.apache.hadoop.record 定义了针对记录的 I/O API 类以及一个记录描述语言翻译器,用于简化将
记录序列化成语言中性的格式(language-neutral manner)。
org.apache.hadoop.tools 定义了一些通用的工具。
org.apache.hadoop.util 定义了一些公用的 API。
下面逐个从源代码中剖析这几个主要模块的框架以及运作原理
2 MapReduce 框架结构
2
Hadoop 源码的入门解析
Map/Reduce 是一个用于大规模数据处理的分布式计算模型,它最初是由 Google 工程师设计并实现的,Google
已经将它完整的 MapReduce 论文公开发布了。其中对它的定义是,Map/Reduce 是一个编程模型(programming
model),是一个用于处理和生成大规模数据集(processing and generating large data sets)的相关的实现。
用户定义一个 map 函数来处理一个 key/value 对以生成一批中间的 key/value 对,再定义一个 reduce 函数将所有
这些中间的有着相同 key 的 values 合并起来。很多现实世界中的任务都可用这个模型来表达。
Hadoop 的 Map/Reduce 框架也是基于这个原理实现的,下面简要介绍一下 Map/Reduce 框架主要组成及相互的
关系。
2.1 总体结构
2.1.1 Mapper 和 Reducer
运行于 Hadoop 的 MapReduce 应用程序最基本的组成部分包括一个 Mapper 和一个 Reducer 类,以及一个创建
JobConf 的执行程序,在一些应用中还可以包括一个 Combiner 类,它实际也是 Reducer 的实现。
2.1.2 JobTracker 和 TaskTracker
它们都是由一个 master 服务 JobTracker 和多个运行于多个节点的 slaver 服务 TaskTracker 两个类提供的服务
调度的。master 负责调度 job 的每一个子任务 task 运行于 slave 上,并监控它们,如果发现有失败的 task 就重新运
行它,slave 则负责直接执行每一个 task。TaskTracker 都需要运行在 HDFS 的 DataNode 上,而 JobTracker 则不
需要,一般情况应该把 JobTracker 部署在单独的机器上。
2.1.3 JobClient
每一个 job 都会在用户端通过 JobClient 类将应用程序以及配置参数 Conguration 打包成 jar 文件存储在
HDFS,并把路径提交到 JobTracker 的 master 服务,然后由 master 创建每一个 Task(即 MapTask 和
ReduceTask)将它们分发到各个 TaskTracker 服务中去执行。
3
Hadoop 源码的入门解析
2.1.4 JobInProgress
JobClient 提交 job 后,JobTracker 会创建一个 JobInProgress 来跟踪和调度这个 job,并把它添加到 job 队列里。
JobInProgress 会根据提交的 job jar 中定义的输入数据集(已分解成 FileSplit)创建对应的一批 TaskInProgress 用
于监控和调度 MapTask,同时在创建指定数目的 TaskInProgress 用于监控和调度 ReduceTask,缺省为 1 个
ReduceTask。
2.1.5 TaskInProgress
JobTracker 启动任务时通过每一个 TaskInProgress 来 launchTask,这时会把 Task 对象(即 MapTask 和
ReduceTask)序列化写入相应的 TaskTracker 服务中,TaskTracker 收到后会创建对应的 TaskInProgress(此
TaskInProgress 实现非 JobTracker 中使用的 TaskInProgress,作用类似)用于监控和调度该 Task。启动具体的
Task 进程是通过 TaskInProgress 管理的 TaskRunner 对象来运行的。TaskRunner 会自动装载 job jar,并设置好
环境变量后启动一个独立的 java child 进程来执行 Task,即 MapTask 或者 ReduceTask,但它们不一定运行在同一
个 TaskTracker 中。
2.1.6 MapTask 和 ReduceTask
一个完整的 job 会自动依次执行 Mapper、Combiner(在 JobConf 指定了 Combiner 时执行)和 Reducer,其
中 Mapper 和 Combiner 是由 MapTask 调用执行,Reducer 则由 ReduceTask 调用,Combiner 实际也是
Reducer 接口类的实现。Mapper 会根据 job jar 中定义的输入数据集按<key1,value1>对读入,处理完成生成临时
的<key2,value2>对,如果定义了 Combiner,MapTask 会在 Mapper 完成调用该 Combiner 将相同 key 的值做
合并处理,以减少输出结果集。MapTask 的任务全完成即交给 ReduceTask 进程调用 Reducer 处理,生成最终结果
<key3,value3>对。这个过程在下一部分再详细介绍。
下图描述了 Map/Reduce 框架中主要组成和它们之间的关系:
4
剩余16页未读,继续阅读
资源评论
- ymlovelnn2013-07-19不错 对我很有指导意义
致远登高
- 粉丝: 3
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功