hadoop核心技术原理

更新时间:2023-06-05 18:34:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

Hadoop

About Me

翟周伟

现任职百度网页搜索部高级工程师

Book:

《Hadoop核心技术》2015-2月出版

《Hadoop开源云计算平台》2011.8月出版

专注开源技术在线培训

Agenda- Ⅰ-Problem, How? Hadoop要解决什么问题?

–存储:最初为了解决网页存储问题,分布式存储

–计算,解决单机不易处理大数据量计算,并行计算–成本:减少RD开发成本:无需考虑网络编程,提高简单接口 提供哪些核心功能?

–自动分布并行化

–容错和异常处理

专注开源技术在线培训

设计思想与架构-

数据存储与切分

涉及HDFS的三种重要角色,分别为:名称节点-NameNode、数据节点-DataNode

、客户端

专注开源技术在线培训

设计思想与架构-MapReduce模型

MapReduce

模型

专注开源技术在线培训

Agenda- Ⅱ-HDFS原理实现解析HDFS核心概念

HDFS的特性和目标

HDFS核心设计原理

HDFS权限管理

HDFS配额管理

专注开源技术在线培训

HDFS核心概念-NameNode 功能

–负责HDFS文件系统的管理工作,具体地包括名称空间namespace管理,文件Block管理

特点

–始终被动接收服务的server

三类通信协议接口

–ClientProtocol接口:提供给客户端,用于访问NameNode。–DataNodeProtocol接口:用于DataNode 向NameNode 通信–NameNodeProtocol接口:用于从NameNode 到NameNode 的通信

专注开源技术在线培训

HDFS核心概念-NameNode 元数据管理

一个文件被分成一个或多个Block,这些Block存储在DataNode集合里,NameNode就负责管理文件Block的所有元数据信息,这些元数据信息主要为:

–(文件名->数据块)映射

–(数据块->DataNode列表)映射

(文件名->数据块)保存在磁盘上进行持久化存储,需要注意的是NameNode 上不保存(数据块->DataNode列表)映射,该列表是通过DataNode 上报给NameNode建立起来的。

专注开源技术在线培训

HDFS核心概念-DateNode 功能

–DataNode 上存储了数据块ID和数据块内容,以及它们的映射关系。

NameNode

映射表DateNodeDateNode

DataNode处理数据块读Client

HDFS核心概念-Client & Block Client

–访问HDFS的程序或HDFS shell命令都可以称为HDFS的Client,至少需要指定HDFS的NameNode地址以及端口号信息.

–类似Linux的data block的概念, data block是文件系统读写的最小数据单元。

–HDFS默认块64M,为了满足大数据效率问题。百度集群设置为256M

专注开源技术在线培训

HDFS的特性和目标

特性

–高度容错,可扩展性及扩展性强。

–跨平台,使用Java语言开发,支持多个主流平台环境

–shell命令接口,和Linux文件系统一样,拥有文件系统shell命令,可直接操作HDFS

–Web界面,内置Web服务器,方便用户检查集群的当前状态–文件权限和授权,拥有和Linux系统类似的文件权限管理–机架感知功能,在调度任务和分配存储空间时系统会考虑节点的物理位置,从而得到高效访问和计算

–安全模式:一种维护需要的管理模式

–Rebalancer:负载均衡

–升级和回滚

专注开源技术在线培训

HDFS的特性和目标

目标

–硬件错误,是常态,而非异常情况

–流式数据访问,更多考虑批处理而非交互处理–大规模数据集,节点规模可扩展性强

–简化一致性模型,“一次写入多次读取”的文件访问模型(例如网络爬虫应用)

–移动计算代价比移动数据代价低

–可移植性

专注开源技术在线培训

HDFS核心设计原理-设计架构基于Master/Slave主从架构

专注开源技术在线培训一个独的HDFSMaster集群包含一个单节点和多个Slave一个单独的节点服务器,这里的含义是Master节点的一个逻辑上的HDFS系统中只存在Master组件。

HDFS核心设计原理-文件存取机制 读文件数据流1)调用FileSystem的open()打开文件,见序号1:open。

2)DistributedFileSystem使用RPC调用

NameNode节点,得到文件的数据块元数据信息,并返回

FSDataInputStream给客户端,见序号

2:get block locations。

3)客户端调用stream的read()函数开始读取数据,见序号3:read。

4)调用FSDataInputStream直接从

DataNode获取文件数据块,见序号4、

5:read。

5)读完文件时,调用

FSDataInputStream的close函数,见序号6:close。

专注开源技术在线培训

HDFS核心设计原理-文件存取机制 写数据文件流1)调用create(),使用RPC调用NameNode元数据节点,在命名空间中创建一个新文件

2)DistributedFileSystem返回

DFSOutputStream,客户端用于写数据

3)client开始写入数据,DFSOutputStream将数据分成块写入data queue。Data

queue由Data Streamer读取,并通知元数据节点分配数据节点,用来存储数据块(每块默认复制3块)

4)分配的数据节点放在一个pipeline里。

Data Streamer将数据块写入pipeline中的第一个数据节点

5)第一个数据节点将数据块发送给第二个数据节点。第二个数据节点将数据发送给第三个数据节点

6)DFSOutputStream为发出去的数据块保存了ack queue,等待pipeline中的数据节点告知数据已经写入成功专注开源技术在线培训

HDFS核心设计原理-副本冗余复制策略关键: 副本的冗余存储机制是HDFS

可靠性和高性能的关键默认策略: 副本存放策略是将一个副本

存放在本地机架的节点上,一个副本放在同一机架的另一个节点上,最后一个副本放在不同机架的节点上。

优化策略:

HDFS采用一种称为机架感知的策略来改进数据的可靠性、可用性和网络带宽的利用率。通过一个机架感知,NameNode可以确定每个DataNode所属的机架id。一个简单但没有优化的策略就是将副本存放在不同的机架上。

为了降低整体的带宽消耗和读取延时,HDFS会尽量让读取程序读取离它最近的副本

专注开源技术在线培训

HDFS权限管理

权限模型

–拥有类似POSIX系统的文件和目录权限模型,每个文件和目录有一个所有者(owner)和一个组(group)–例如,当用户进程访问一个HDFS上的文件或目录app时,HDFS都要对其进行权限检查,步骤如下:

1) 如果用户即app的所有者,则检查所有者的访问权限

2) 如果app关联的组在组名列表中出现,则检查组用户的访问权限

3) 否则,检查app其他用户的访问权限

–如果权限检查失败,则客户的操作也会失败

专注开源技术在线培训16

HDFS权限管理

身份认证

–HDFS权限管理采用UNIX的机制,文件用户分文件属主、文件组和其他用户,权限分为读、写和执行。

–Hadoop已经增加了Kerberos强认证机制,将认证的密匙在机器部署时放到可靠的节点上,其Hadoop内部的节点就会使用密匙得到认证,只有被认证过的节点才能正常使用

超级用户

–超级用户即运行NameNode进程的用户。宽泛地讲,如果你启动了NameNode,你就是超级用户。

–管理员可以用配置参数指定一组特定的用户,如果做了设定,这个组的成员也会是超级用户。

web服务器用户权限配置

–使用dfs.web.ugi参数配置dfs.web.ugi = webuser,webgroup

–如果设置为超级用户的名称,则所有Web用户就可以看到所有的信息

专注开源技术在线培训

HDFS配额管理

功能

–HDFS允许管理员为每个目录设置配额。新建立的目录是没有配额的,最大的配额是Long.Max_Value。配额为1可以强制目录保持为空 目录配额

–目录配额是对目录树上该目录下的文件及目录总数进行硬性限制–如果创建文件或目录时超过了配额,该操作会失败

–重命名不会改变该目录的配额,如果重命名操作导致违反配额限制,该操作将会失败。

–如果尝试设置一个配额而现有文件数量已经超出了这个新配额,则设置失败。

配额quota管理

–hadoop dfsadmin -setQuota <quota> <dirname>...<dirname>–hadoop dfsadmin –clrQuota <dirname>...<dirname>

专注开源技术在线培训

Questions and Answers

Questions and Answers

专注开源技术在线培训

Agenda - ⅡMapReduce计算模型解析本部分主要内容

–MapReduce计算模型

–计算流程与机制

–MapReduce输入输出模型

–核心问题实现机制

专注开源技术在线培训

MapReduce计算模型步骤1 输入文件分成M块

专注开源技术在线培训步骤2 主控程序master分配任务给工作执行机器worker。步骤3 Map worker读取并处理相关的输入数据块步骤4 缓存中的key/value键值对通过分区函数分成R个区域,之后周期性地写入到本地磁盘上。同时缓存的key/value键值对集合在本地磁盘上的存储位置将被回传给master,由master负责把这些存储位置再传送给Reduce worker,见图中流程(4)步骤5 当Reduce worker程序接收到master程序发来的数据存储位置信息后,使用RPC从Map worker所在主机的磁盘上读取这些缓存数据。在Reduce worker读取了所有的中间数据后,通过对key进行排序后使得具有相同key值的数据聚合在一起步骤6 Reduce worker程序遍历排序后的中间数据。对于每一个唯一的中间key值,Reduce worker程序将这个key值和它相关的中间value值的集合传递给用户自定义的Reduce函数

本文来源:https://www.bwwdw.com/article/1n41.html

Top