Hadoop安装使用 1.1 Hadoop简介 1.2 HDFS分布式存储系统 1.3 单机安装 1.4 Mapreduce 案例 1.5 伪分布式安装 1.6 课后作业 1.1 Hadoop简介 了解Hadoop的简介以及生态圈,更多Hadoop相关信息见Hadoop 专题页面 ?tid=13 1.2 HDFS分布式存储系统(Hadoop Distributed File System)
HDFS优点
高容错性
数据自动保存多个副本
副本都时候会自动恢复
适合批量处理
移动计算而非数据
数据位置暴露给计算框架
适合大数据处理
GB/TB/甚至PB级数据
百万规模以上文件数量
10k+
可构建廉价的机器上
不管机器人有多么的垃圾,只要有空间内存就可以搭建Hadoop
*HDFS缺点*
低延迟数据访问
比如毫秒级
低延迟与高吞吐率
小文件存取
占用NameNode大量内存
寻道时间超过读取时间
并发写入/文件随机修改
一个文件只能有一个写者
只支持append
HDFS架构
如图所示,HDFS是按照Master和Slave的结构
NameNode:类似项目经理职位 下达需求,监控团队进度,工作分配。
管理数据块映射;处理客户端的读写请求;配置副本策略;管理HDFS的名称空间;
SecondaryNameNode:类似经理助理的职位 分担领导(Namenode)的工作量;
SecondaryNameNode他不是主节点也不是从节点,它是用来辅助NameNode来完成editslog操作日志的。 合并edits的操作可以配置: 设置fs.checkpoint.period 默认3600秒 设置edits log大小fs.checkpoint.size规定edits文件的最大默认64MBDataNode: 程序员干活的,上头(NameNode)下达一个需求功能需要你(DataNode)实现。存储client发来的数据块block;执行数据块的读写操作。
dataNode(block)它是数据存储单元,就是数据真正存储的地方。每一个block都会被固定大小的数 据块,默认数据块的大小是64MB**可配置**。 问:我这个文件大小没有达到64MB怎么办呢? 答:如果该文件还不到64MB的时候,则单独成一个block 问:那如果大于64MB怎么办? 答:如果大了就在切分一个block出来,就像我们切肉/切菜一样,想把他们切的均衡(64MB),假如肉切的1厘米,到最后还剩下3厘米怎么办?那就继续再切分。如图所示 假如我上传文件大小为"50G"-->切分为多个block。
每一个Block都会有一个3个副本(可配置)
每一个block的3个副本都存在不同的节点(机器)上,如图"block1"。HDFS写流程
简单易懂
1.HDFS Client-->NameNode:我要上次新文件 2.NameNode检查DataNode空间,检查出: xxx机器上的节点可以存储 3.NameNode上传 4.记录log日志下面是专业术语
客户端调用create()来创建文件 DistributedFileSystem用RPC调用元数据节点,在文件系统的命名空间中创建一个新的文件。 元数据节点首先确定文件原来不存在,并且客户端有创建文件的权限,然后创建新文件。 DistributedFileSystem返回DFSOutputStream,客户端用于写数据。 客户端开始写入数据,DFSOutputStream将数据分成块,写入data queue。 Data queue由Data Streamer读取,并通知元数据节点分配数据节点,用来存储数据块(每块默认复制3块)。分配的数据节点放在一个pipeline里。 Data Streamer将数据块写入pipeline中的第一个数据节点。第一个数据节点将数据块发送给第二个数据节点。第二个数据节点将数据发送给第三个数据节点。 DFSOutputStream为发出去的数据块保存了ack queue,等待pipeline中的数据节点告知数据已经写入成功。 如果数据节点在写入的过程中失败: 关闭pipeline,将ack queue中的数据块放入data queue的开始。 当前的数据块在已经写入的数据节点中被元数据节点赋予新的标示,则错误节点重启后能够察觉其数据块是过时的,会被删除。 失败的数据节点从pipeline中移除,另外的数据块则写入pipeline中的另外两个数据节点。 元数据节点则被通知此数据块是复制块数不足,将来会再创建第三份备份。 当客户端结束写入数据,则调用stream的close函数。此操作将所有的数据块写入pipeline中的数据节点,并等待ack queue返回成功。最后通知元数据节点写入完毕。