没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
云计算开源框架 Hadoop 介绍
目录
云计算开源框架 Hadoop 介绍 ........................................................................................................ 1
什么是 Hadoop? ............................................................................................................................. 1
为什么要选择 Hadoop? ................................................................................................................. 4
使用场景 ........................................................................................................................................... 4
环境 .................................................................................................................................................. 5
部署考虑 ........................................................................................................................................... 5
实施步骤 ........................................................................................................................................... 5
Hadoop 中的命令( Command)总结 ............................................................................................ 8
Hadoop 基本流程 ............................................................................................................................. 8
日志分析业务场景和代码范例 ..................................................................................................... 10
Hadoop 集群测试 ........................................................................................................................... 15
随想 ................................................................................................................................................ 16
什么是 Hadoop?
Hadoop 框架中最核心的设计就是: MapReduce 和 HDFS 。MapReduce 的思想是由 Google 的
一篇论文所提及而被广为流传的, 简单的一句话解释 MapReduce 就是 “任务的分解与结果
的汇总 ”。HDFS 是 Hadoop 分布式文件系统( Hadoop Distributed File System )的缩写,为分
布式计算存储提供了底层支持。
MapReduce 从它名字上来看就大致可以看出个缘由, 两个动词 Map 和 Reduce,“Map(展开)”
就是将一个任务分解成为多个任 务, “Reduce”就是将分解后多任务处理的结果汇总起来,
得出最后的分析结果。 这不是什么新思想, 其实在前面提到的多线程, 多任务的设计就可以
找到这 种思想的影子。不论是现实社会,还是在程序设计中,一项工作往往可以被拆分成
为多个任务,任务之间的关系可以分为两种:一种是不相关的任务,可以并行执 行;另一
种是任务之间有相互的依赖, 先后顺序不能够颠倒, 这类任务是无法并行处理的。 回到大学
时期,教授上课时让大家去分析关键路径,无非就是找最省时的 任务分解执行方式。在分
布式系统中, 机器集群就可以看作硬件资源池, 将并行的任务拆分, 然后交由每一个空闲机
器资源去处理,能够极大地提高计算效率,同时 这种资源无关性,对于计算集群的扩展无
疑提供了最好的设计保证。其实我一直认为 Hadoop 的卡通图标不应该是一个小象,应该是
蚂蚁,分布式计算就好比 蚂蚁吃大象,廉价的机器群可以匹敌任何高性能的计算机,纵向
扩展的曲线始终敌不过横向扩展的斜线。 任务分解处理以后, 那就需要将处理以后的结果再
汇总起 来,这就是 Reduce 要做的工作。
图 1: MapReduce 结构示意图
上图就是 MapReduce 大致的结构图,在 Map 前还可能会对输入的数据有 Split(分割)的过
程,保证任务并行效率,在 Map 之后还会有 Shuffle(混合)的过程,对于提高 Reduce 的效
率以及减小数据传输的压力有很大的帮助。后面会具体提及这些部分的细节。
HDFS 是分布式计算的存储基石, Hadoop 的分布式文件系统和其他分布式文件系统有很多
类似的特质。分布式文件系统基本的几个特点:
1.对于整个集群有单一的命名空间。数据一致性。适合一次写入多次读取的模型,客户端在
文件没有被成功创建之前无法看到文件存在。
2.文件会被分割成多个文件块,每个文件块被分配存储到数据节点上,而且根据配置会由复
制文件块来保证数据的安全性。
图 2:HDFS 结构示意图
上图中展现了整个 HDFS 三个重要角色: NameNode、DataNode 和 Client 。NameNode 可以
看作是分布式文件系统中的管理者, 主要负责管理文件系统的命名空间、 集群配置信息和存
储块的复制等。 NameNode 会将文件系统的 Meta-data 存储在内存中, 这些信息主要包括 了
文件信息、每一个文件对应的文件块的信息和每一个文件块在 DataNode 的信息等。DataNode
是文件存储的基本单元,它将 Block 存储在本地 文件系统中,保存了 Block 的 Meta-data,
同时周期性地将所有存在的 Block 信息发送给 NameNode。Client 就是需要获取分布式文件
系统文件的应用程序。这里通过三个操作来说明他们之间的交互关系。
文件写入:
1.Client 向 NameNode 发起文件写入的请求。
2.NameNode 根据文件大小和文件块配置情况, 返回给 Client 它所管理部分 DataNode 的信息。
3.Client 将文件划分为多个 Block ,根据 DataNode 的地址信息,按顺序写入到每一个 DataNode
块中。
文件读取:
1.Client 向 NameNode 发起文件读取的请求。
2.NameNode 返回文件存储的 DataNode 的信息。
3.Client 读取文件信息。
文件 Block 复制:
1.NameNode 发现部分文件的 Block 不符合最小复制数或者部分 DataNode 失效。
2.通知 DataNode 相互复制 Block 。
3.DataNode 开始直接相互复制。
最后再说一下 HDFS 的几个设计特点:
1. Block 的放置:默认不配置。一个 Block 会有三份备份,一份放在 NameNode 指定的
DataNode,另一份放在 与指定 DataNode 非同一 Rack 上的 DataNode,最后一份放在与
指定 DataNode 同一 Rack 上的 DataNode 上。备份无非就是为了 数据安全,考虑同一
Rack 的失败情况以及不同 Rack 之间数据拷贝性能问题就采用这种配置方式。
2. 心跳检测 DataNode 的健康状况,如果发现问题就采取数据备份的方式来保证数据的安
全性。
3. 数据复制(场景为 DataNode 失败、需要平衡 DataNode 的存储利用率和需要平衡 DataNode
数据交互压力等情况) :这里先说一下,使用 HDFS 的 balancer 命令,可以配置一个
Threshold 来平衡每一个 DataNode 磁盘利用率。例如设置了 Threshold 为 10%,那么 执
行 balancer 命令的时候,首先统计所有 DataNode 的磁盘利用率的均值,然后判断如果
某一个 DataNode 的磁盘利用率超过这个均值 Threshold 以上,那么将会把这个 DataNode
的 block 转移到磁盘利用率低的 DataNode,这对于新节点的加入来说十分有用。
4. 数据交验:采用 CRC32 作数据交验。在文件 Block 写入的时候除了写入数据还会写入
交验信息,在读取的时候需要交验后再读入。
5. NameNode 是单点:如果失败的话,任务处理信息将会纪录在本地文件系统和远端的文
件系统中。
6. 数据管道性的写入:当客户端要写入文件到 DataNode 上,首先客户端读取一个 Block
然后写到第一个 DataNode 上,然后由第一个 DataNode 传递到备份的 DataNode 上,一
直到所有需要写入这个 Block 的 NataNode 都成功写入,客户端才会继续开始写下一个
Block 。
7. 安全模式:在分布式文件系统启动的时候,开始的时候会有安全模式,当分布式文件系
统处于安全模式的情况下,文件系统中的内容不允许修改也不允许删除,直到安全模式
结束。安全模式主要是为了系统启动的时候检查各个 DataNode 上数据块的有效性,同
时根据策略必 要的复制或者删除部分数据块。运行期通过命令也可以进入安全模式。
在实践过程中, 系统启动的时候去修改和删除文件也会有安全模式不允许修改的出错提
示,只 需要等待一会儿即可。
下面综合 MapReduce和 HDFS来看 Hadoop的结构:
图 3: Hadoop 结构示意图
在 Hadoop 的系统中, 会有一台 Master,主要负责 NameNode 的工作以及 JobTracker 的工作。
JobTracker 的主要职责就是启动、跟踪和调度各个 Slave 的任务执行。还会有多台 Slave,每
一台 Slave 通常具有 DataNode 的功能并负责 TaskTracker 的 工作。 TaskTracker 根据应用要
求来结合本地数据执行 Map 任务以及 Reduce 任务。
说到这里,就要提到分布式计算最重要的一个设计点: Moving Computation is Cheaper than
Moving Data。就是在分布式处理中,移动数据的代价总是高于转移计算的代价。简单来说
就是分而治之的工作, 需要将数据也分而存储, 本地任务处理本地数据然后归总, 这样才会
保证分布式计算的高效性。
为什么要选择 Hadoop?
1.可扩展:不论是存储的可扩展还是计算的可扩展都是 Hadoop 的设计根本。
2.经济:框架可以运行在任何普通的 PC 上。
3.可靠:分布式文件系统的备份恢复机制以及 MapReduce 的任务监控保证了分布式处理的
可靠性。
4.高效:分布式文件系统的高效数据交互实现以及 MapReduce 结合 Local Data 处理的模式,
为高效处理海量的信息作了基础准备。
使用场景
个人觉得最适合的就是海量数据的分析, 其实 Google 最早提出 MapReduce 也就是为了海量
数据分析。同时 HDFS 最早是为了搜索引擎实现而开发的,后来才被用于分布式计算框架
中。海量数据被分割于多个节点,然后由每一个节点并行计算,将得出的结果归并到输出。
同时第一阶段的输出又可以作为下一阶段计算的输入, 因此可以想象到一个树状结构的分布
式计算图, 在不同阶段都有不同产出, 同时并行和串行结合的计算也可以很好地在分布式集
群的资源下得以高效的处理。
剩余15页未读,继续阅读
资源评论
资料大全
- 粉丝: 17
- 资源: 26万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功