hadoop学习笔记(四):HDFS
一、HDFS体系结构
1 HDFS假设条件
数据流访问
大数据集
简单相关模型
移动计算比移动数据便宜
多种软硬件平台中的可移植性
2 HDFS的设计目标
非常巨大的分布式文件系统
运行于普通硬件上
优化批处理
用户控件可以位于异构的操作系统中
在整个集群中使用单一的命名空间
数据一致性
文件被分为各个小块
智能客户端
程序采用“数据就近”原则分配节点执行
客户端对文件没有缓存机制
3 HDFS 架构

1 HDFS架构-文件
文件被切分为块(默认大小64M),以块为单位,每个块有多个副本存储在不同的机器上,副本数可在文件生成时指定(默认3)。
NameNode是主节点,存储文件的元数据如文件名,文件目录结构,文件属性(生成时间,副本数,文件权限),以及每个文件的块列表以及块所在的DataNode等等。
DataNode在本地文件系统存储文件块数据,以及块数据校验和。
可以创建、删除、移动或重命名文件,当文件创建、写入和关闭之后不能修改文件内容。
2 HDFS文件权限
与 linux文件权限类似。
r:read;w:write;x:execute,权限x对于文件忽略,对于文件夹表示是否允许访问其内容。
如果linux系统用户zhangsan使用hadoop命令创建了一个文件,那么这个文件在HDFS中owner就是zhangsan。
HDFS权限目的:阻止好人做错事,而不是阻止坏人做坏事。HDFS相信,你告诉我你是谁,我就认为你是谁。


3 HDFS架构-组件功能
| NameNode | DataNode |
| 存储元数据 | 存储文件内容 |
| 元数据保存在内存中 | 文件内容保存在磁盘中 |
| 保存文件、block、DataNode之间的映射关系 | 维护了blockId到DataNode本地文件的映射关系 |
NameNode:
是一个中心服务器,单一节点(简化系统的设计和实现),负责管理文件系统的名字空间(namespace)以及客户端对文件的访问。
文件操作,NameNode负责文件元数据的操作,DataNode负责处理文件内容的读写请求,跟文件内容相关的数据流不经过NameNode,只会询问跟哪个DataNode的联系,否则NameNode会成为系统瓶颈。
副本存放在哪些DataNode上由NameNode来控制,根据全局情况作出块放置决定,读取文件时NameNode尽量让用户先读取最近的副本,降低带宽消耗和读取延时。
NameNode全权管理数据块的复制,它周期性地从集群中的每一个DataNode接收心跳信号和块状态报告(BlockReport)。接收到心跳信号意味着该DataNode节点工作正常。块状态报告包含了一个该DataNode上所有数据块的列表。
DataNode:
一个数据块在DataNode以文件存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳。
DataNode启动后向NameNode注册,通过后,周期性(1小时)地向NameNode上报所有的块信息。
心跳是每3秒一次,心跳返回结果带有NameNode给该DataNode的命令如复制块数据到另一台机器,或删除某个数据块。如果超过10分钟没有收到某个DataNode的心跳,则认为该节点不可用。
集群运行中可以安全加入和退出一些机器。
4 HDFS副本放置策略
| hadoop 0.17之前 | hadoop 0.17之后 |
| 副本1:同机架的不同节点 | 副本1:同Client的节点上 |
| 副本2:同机架的另一个节点 | 副本2:不同机架中的节点上 |
| 副本3:不同机架的另一个节点 | 副本3:同第二个副本的机架中的另一个节点 |
| 其他副本:随机挑选 | 其他副本:随机挑选 |
5 HDFS数据损坏(corruption)处理
当DataNode读取block的时候,它会计算checksum。
如果计算后的checksum与block创建时值不一样,说明该block已经损坏。
Client读取其他DN上的block。
NameData标记该块已经损坏,然后复制block达到预期设置的文件备份数。
DataNode在其文件创建后三周验证其checksum。
6 HDFS架构-Client&SNN
| Client | Secondary NameNode |
|
文件切分 与NameNode交互,获取文件位置信息 与DataNode交互,读取或写入数据 管理HDFS 访问HDFS |
并非NameNode的热备 辅助NameNode,分担其工作量 定期合并fsimage和fsedits,推送给NameNode 在紧急情况下,可辅助恢复NameNode |
7 HDFS架构-NN&SNN
NameNode两个重要的文件:
fsimage:元数据镜像文件(保存文件系统的目录树)
edits:元数据操作日志(针对目录树的修改操作)
元数据镜像:
内存中保存一份最新的
内存中的镜像=fsimage+edits
定期合并fsimage和edits:
edits文件过大导致NameNode重启速度慢
Secondary NameNode负责定期合并他们
NameNode启动过程与fsimag和edits的变化:

执行过程:
Secondary NN通知NN切换editlog -->
Secondary NN从NN获得fsimage和editlog(通过http方式)-->
Secondary NN将fsimage载入内存,然后开始合并editlog -->
Secondary NN将新的fsimage发回给NN -->
NN用新的fsimage替换旧的fsimage
hadoop学习笔记(四):HDFS的更多相关文章
- Hadoop学习笔记: HDFS
注:该文内容部分来源于ChinaHadoop.cn上的hadoop视频教程. 一. HDFS概述 HDFS即Hadoop Distributed File System, 源于Google发表于200 ...
- Hadoop学习笔记(2)-HDFS的基本操作(Shell命令)
在这里我给大家继续分享一些关于HDFS分布式文件的经验哈,其中包括一些hdfs的基本的shell命令的操作,再加上hdfs java程序设计.在前面我已经写了关于如何去搭建hadoop这样一个大数据平 ...
- Hadoop学习笔记四
一.fsimage,edits和datanode的block在本地文件系统中位置的配置 fsimage:hdfs-site.xml中的dfs.namenode.name.dir 值例如file:// ...
- hadoop学习笔记贰 --HDFS及YARN的启动
1.初始化HDFS :hadoop namenode -format 看到如下字样,说明初始化成功. 启动HDFS,start-dfs.sh 终于启动成功了,原来是core-site.xml 中配置 ...
- Hadoop学习笔记(三) ——HDFS
参考书籍:<Hadoop实战>第二版 第9章:HDFS详解 1. HDFS基本操作 @ 出现的bug信息 @-@ WARN util.NativeCodeLoader: Unable to ...
- hadoop学习笔记(四)——eclipse+maven+hadoop2.5.2源代码
Eclipse同maven进口hadoop源代码 1) 安装和配置maven环境变量 M2_HOME: D:\profession\hadoop\apache-maven-3.3.3 PATH: % ...
- hadoop学习笔记(四):HDFS文件权限,安全模式,以及整体注意点总结
本文原创,转载注明作者和原文链接! 一:总结注意点: 到现在为止学习到的角色:三个NameNode.SecondaryNameNode.DataNode 1.存储的是每一个文件分割存储之后的元数据信息 ...
- Hadoop学习笔记—22.Hadoop2.x环境搭建与配置
自从2015年花了2个多月时间把Hadoop1.x的学习教程学习了一遍,对Hadoop这个神奇的小象有了一个初步的了解,还对每次学习的内容进行了总结,也形成了我的一个博文系列<Hadoop学习笔 ...
- hadoop学习笔记-目录
以下是hadoop学习笔记的顺序: hadoop学习笔记(一):概念和组成 hadoop学习笔记(二):centos7三节点安装hadoop2.7.0 hadoop学习笔记(三):hdfs体系结构和读 ...
- Hadoop学习笔记(2)
Hadoop学习笔记(2) ——解读Hello World 上一章中,我们把hadoop下载.安装.运行起来,最后还执行了一个Hello world程序,看到了结果.现在我们就来解读一下这个Hello ...
随机推荐
- LeetCode141:Linked List Cycle
题目: Given a linked list, determine if it has a cycle in it. Follow up: Can you solve it without usin ...
- Alwayson--问题总结一
1. Alwayson 是否依赖于域环境? 答: 是, alwayson依赖于故障转移群集(只有在故障转移群集中的SQL Server 才能启动高可行性组功能),而故障转移群集愈依赖于域环境. 2. ...
- SQL Server OS 调度
--SQL SERVER OS 采用合作模式的线程调度模式,即除非Worker主动放弃CPU,否则SQL OS 不会强制剥夺其CPU,从而减少Context Switch --默认设置下,SQL SE ...
- Struts2-057/CVE-2018-11776两个版本RCE漏洞分析(含EXP)
0x01 前言 2018年8月22日,Apache Strust2发布最新安全公告,Apache Struts2存在远程代码执行的高危漏洞(S2-057/CVE-2018-11776),该漏洞由Sem ...
- 基于MVC框架layui分页控件实现前端分页信息写法
详细链接:https://shop499704308.taobao.com/?spm=a1z38n.10677092.card.11.594c1debsAGeak@{ ViewBag.Title = ...
- day 112天,爬虫(拉钩网,斗音,GitHub)第二天
提前准备工作.安装准备工作(day3用) 1. 安装scrapy https://www.cnblogs.com/wupeiqi/articles/6229292.html a. 下载twiste ...
- 【文文殿下】【CF724C】Ray Tracing (中国剩余定理)
题解 我们考虑将棋盘扩大一倍,这样相当于取膜.然后,我们只要对x,y,的位置分类讨论,做四次crt就行.具体细节看文文代码. #include<cstdio> #include<al ...
- Geometry-587. Erect the Fence
There are some trees, where each tree is represented by (x,y) coordinate in a two-dimensional garden ...
- 第八天,scrapy的几个小技巧
一. 微博模拟登陆 1. 百度搜微博开放平台可满足爬取量不大的情况 2. 微博模拟登陆和下拉鼠标应对ajax加载 from selenium import webdriver import time ...
- 直接访问实例变量 VS 通过点语法访问实例变量
直接访问实例变量,不会经过 OC 的方法派发机制,速度比较块.会直接访问对象的实例变量对应的内存. 直接访问实例变量,不会调用"设置方法".绕过了相关属性对应的"内存管理 ...