HDFS 技术

HDFS定义

Hadoop Distributed File System,是一个使用 Java 实现的、分布式的、可横向扩展的文件系
统,是 HADOOP 的核心组件

HDFS特点

  • 处理超大文件
  • 流式地访问数据
  • 运行于廉价的商用机器集群上;
    HDFS 不适合以下场合:
  • 低延迟数据访问
  • 大量小文件的存储
  • 不支持多用户写入及任意修改文件

HDFS基本结构

image.png

HDFS相关概念 --块

  1. HDFS使用了块的概念,默认大小128M/256M字节
  • 可针对每个文件配置,由客户端指定
  • 每个块有一个自己的全局ID
  1. HDFS将一个文件分为一个或数个块来存储
  • 每个块是一个独立的存储单位
  • 以块为单位在集群服务器上分配存储
  1. 与传统文件系统不同的是,如果实际数据没有达到块大小,则并不实际占用整个块磁盘空间
  • 如果一个文件是200M,则它会被分为2个块: 128+72

HDFS相关概念 --元数据

  1. 元数据 (MetaData)包括
    文件系统目录树信息
  • 文件名,目录名
  • 文件和目录的从属关系
  • 文件和目录的大小,创建及最后访问时间
  • 权限

文件和块的对应关系

  • 文件由哪些块组成

块的存放位置

  • 机器名,块ID

image.png

  1. HDFS对元数据和实际数据采取分别存储的方法
  • 元数据存储在NameNode服务器上;
  • 实际数据储存在集群的DataNode中

HDFS相关概念 --NameNode

NameNode是用来管理文件系统命名空间的组件。一个HDFS集群只有一台(active)NameNode

  • NameNode上存放了HDFS的元数据,记录了每个文件中各个块所在的数据节点的位置信息。一个HDFS集群只有一份元数据,可能有单点故障问题
  • 元数据工作时在NameNode内存中,以便快速查询。1G内存大致可存放1,000,000块对应的元数据信息。按缺省每块64M计算,大致对应64T实际数据
  • 集群关闭时,元数据持久化到磁盘中,启动集群时,需要将元数据装载到内存中

NameNode数据结构

  • NameNode负责管理分布式文件系统的Namespace命名空间,保存了两个核心数据结构:FsImage和EditLog
  • FsImage用于维护文件系统树以及文件树中所有的文件和文件夹的元数据;
  • 操作日志文件EditLog中记录了所有针对文件的创建、删除、重命名等操作;

image.png

NameNode 工作原理

  1. 在名称节点启动的时候,它会将FsImage文件中的内容加载到内存中,之后再执行EditLog文件中的各项操作,使得内存中的元数据和实际的同步,存在内存中的元数据支持客户端的读操作。

  2. 一旦在内存中成功建立文件系统元数据的映射,则创建一个新的FsImage文件和一个空的EditLog文件

  3. 在名称节点运行期间,HDFS的所有更新操作都是直接写到EditLog中,久而久之, EditLog文件将会变得很大。当EditLog文件非常大的时候,会导致名称节点启动操作非常慢,而在这段时间内HDFS系统处于安全模式,一直无法对外提供写操作,影响了用户的使用。

HDFS相关概念 --SecondaryNameNode

第二名称节点是HDFS
架构中的一个组成部
分,协助NameNode完
成Fsimage和edits文件
合并工作,使得内存
中的Fsimage保持“最
新”

SecondaryNameNode 一般是单独运行在一
台机器上。

image.png

HDFS相关概念 --DataNode

  • 块的实际数据存放在DataNode上
  • 每个块会在本地文件系统产生两个文件,一个是实际的数据文件,另一个是块的附加信息文件,其中包括块数据的长度、校验和,以及时间戳
  • DataNode通过心跳包(Heartbeat)与NameNode通讯
  • 客户端读取/写入数据的时候直接与DataNode通信
  • 集群运行中可以安全加入和退出一些机器

HDFS体系结构

image.png

DataNode

  • NameNode是一个中心服务器,单一节点,负责管理文件系统的命名空间(namespace)以及客户端对文件的访问;
  • 文件操作,NameNode负责文件元数据的操作,DataNode负责处理文件内容的读写请求,数据流不经过NameNode,只会询问它跟那个DataNode联系;
  • 副本存放在哪些DataNode上由NameNode来控制,根据全局情况做出块放置决定,读取文件时NameNode尽量让用户先读取最近的副本,降低带块消耗和读取时延

冗余存储策略

  • 每个块在集群上会存储多个副本(replication) –默认复制份数为3; 可以动态修改,可针对每个文件配置,由客户端指定
  • 某个块的所有备份都是同一个ID –系统无需记录 “哪些块其实是同一份数据”
  • 根据机架配置自动分配备份位置(Rack Awareness)
  1. 第一个副本:放置在上传文件的DN;如果是集群外提交,则随机挑选一台磁盘不太满,CPU不太忙的节点
  2. 第二个副本:放置在于第一个副本不同的机架的节点上
  3. 第三个副本:与第一个副本相同机架的其他节点
  4. 更多副本:随机节点
  • 优点:加快数据传输速度;容易检查错误;保证数据的可靠性

错误恢复策略

  1. 名称节点出错
    名称节点保存了所有的元数据信息,最核心的两大数据结构
    是FsImage和Editlog。当名称节点出错时,就可以根据备份
    SecondaryNameNode中的FsImage和Editlog数据进行恢复。

  2. 数据节点出错

  • 数据节点定期向名称节点发送“心跳”信息报告状态;
  • 当数据节点发生故障,或者网络断网时,名称节点就无法收到来自数据节点的心跳信息,这些数据节点就被标记为“宕机”,节点上面的所有数据都会被标记为“不可读”,名称节点不会再给它们发送任何I/O请求;
  • 一些数据节点的不可用,会导致一些数据块的副本数量小于冗余因子;名称节点会定期检查,一旦发现某个数据块的副本数量小于冗余因子,就会启动数据冗余复制生成新的副本;
  • HDFS和其它分布式文件系统的最大区别就是可以调整冗余数据的位置。
  1. 数据出错
  • 网络传输和磁盘错误等因素,都会造成数据错误;客户端在读取到数据后,会采用md5和sha1对数据块进行校验,以确定读取到正确的数据;

  • 在文件被创建时,客户端就会对每一个文件块进行信息摘录,并把这些信息写入到同一个路径的隐藏文件里面

  • 当客户端读取文件的时候,会先读取该信息文件,然后,利用该信息文件对每个读取的数据块进行校验,如果校验出错,客户端就会请求到另外一个数据节点读取该文件块,并且向名称节点报告这个文件块有错误,名称节点会定期检查并且重新复制这个块

文件权限策略

  • 与Linux文件权限类似 ( chmod, chown )r: read; w:write; x:execute,权限x对于文件忽略,对于文件夹表示是否允许访问其内容
  • 如果Linux系统用户zhangsan使用hadoop命令创建一个文件,那么这个文件在HDFS中owner是zhangsan
  • HDFS的权限目的:阻止好人做错事,而不是阻止坏人做坏事。HDFS相信,你告诉我你是谁,我就认为你是谁

安全模式

指文件系统所处的一种只读的安全模式。HDFS启动时会在safemode状态

$ hadoop dfsadmin -safemode get #安全模式当前状态信息
$ hadoop dfsadmin -safemode enter #进入安全模式
$ hadoop dfsadmin -safemode leave #解除安全模式
$ hadoop dfsadmin -safemode wait #挂起,直到安全模式结束

HDFS 写操作

  1. 客户端写一个文件并不是直接写到HDFS上;
  2. HDFS客户端接收用户数据,并把内容缓存在本地;
  3. 当本地缓存收集足够一个HDFS块大小的时候,客户端同NameNode通讯注册一个新的块;
  4. 注册块成功后,NameNode给客户端返回一个DataNode的列表; – 列表中是该块需要存放的位置,包括冗余备份
  5. 客户端向列表中的第一个DataNode写入块; 当完成时,第一个DataNode 向列表中的下个DataNode发送写操作,并把数据已收到的确认信息给客户端,同时发送确认信息给NameNode 之后的DataNode重复之上的步骤。当列表中所有DataNode都接收到数据并且由最后一个DataNode校验数据正确性完成后,返回确认信息给客户端
  6. 收到所有DN的确认信息后,客户端删除本地缓存;
  7. 客户端继续发送下一个块,重复以上步骤;
  8. 当所有数据发送完成后,写操作完成。

image.png

HDFS 读操作

  1. 客户端与NameNode通讯获取文件的块位置信息,其中包括了块的所有冗余备份的位置信息:DataNode的列表;
  2. 客户端获取文件位置信息后直接同有文件块的DataNode通讯,读取文件;
  3. 如果第一个DataNode无法连接,客户端将自动联系下一个DataNode;
  4. 如果块数据的校验值出错,则客户端需要向NameNode报告,并自动联系下一个DataNode。

image.png

HDFS追加写操作

  1. 客户端与NameNode通讯,获得文件的写保护锁及文件最后一个块的位置(DataNode列表)
  2. 客户端挑选一个DataNode作为主写入节点,并对其余节点上的该数据块加锁
  3. 开始写入数据。与普通写入流程类似,依次更新各个DataNode上的数据。更新时间戳和校验和
  4. 最后一个块写满,并且所有备份块都完成写入后,向NameNode申请下一个数据块。

HDFS命令行

cat

  • 用途:显示一个或多个文件内容到控制台
  • 使用方法:hadoop fs -cat URI [URI …]
  • 例子:
− hadoop fs -cat hdfs://host1:port1/file1
hdfs://host2:port2/file2 
− hadoop fs -cat file:///file3
/user/hadoop/file4

put/copyFromLocal

  • 用途:将本地一个或多个文件导入HDFS。以上两个命令唯一的不同时copyFromLocal的源只能是本地文件,而put可以读取stdin的数据
  • 使用方法:hadoop fs -put/copyFromLocal UR
  • 例子:
− hadoop fs -put localfile.txt /user/hadoop/hadoopfile.txt 
− hadoop fs -put localfile1 localfile2 /user/hadoop/hadoopdir 
− hadoop fs -put localfile hdfs://host:port/hadoop

get/copyToLocal

  • 用途:将HDFS中的一个或多个文件导出到本地文件系统
  • 使用方法: hadoop fs -get/copyToLocal [-ignorecrc] [-crc] URI < localsrc>
  • 例子:
− hadoop fs -get /user/hadoop/hadoopfile localfile 
− hadoop fs -get hdfs://host:port/user/hadoop/file localfile

ls

  • 用途:列出文件夹目录信息,lsr 递归显示文件
  • 使用方法: hadoop fs -ls/lsr -h UR

ls

  • 用途:检查dfs的文件的健康状况; 只能运行在master上
  • 使用方法: hadoop fsck [GENERIC_OPTIONS] [- move | -delete | -openforwrite] [-files [-blocks [-locations | -racks]]

启动HDFS服务

image.png

关闭HDFS服务

image.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/390775.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习算法和机器学习算法_啊哈! 4种流行的机器学习算法的片刻

深度学习算法和机器学习算法Most people are either in two camps:大多数人都在两个营地中&#xff1a; I don’t understand these machine learning algorithms. 我不了解这些机器学习算法。 I understand how the algorithms work, but not why they work. 我理解的算法是如…

Python第一次周考(0402)

2019独角兽企业重金招聘Python工程师标准>>> 一、单选 1、Python3中下列语句错误的有哪些&#xff1f; A s input() B s raw_input() C print(hello world.) D print(hello world.) 2、下面哪个是 Pycharm 在 Windows 下 默认 用于“批量注释”的快捷键 A Ctrl d…

ASP.NET 页面之间传值的几种方式

对于任何一个初学者来说&#xff0c;页面之间传值可谓是必经之路&#xff0c;却又是他们的难点。其实&#xff0c;对大部分高手来说&#xff0c;未必不是难点。 回想2016年面试的将近300人中&#xff0c;有实习生&#xff0c;有应届毕业生&#xff0c;有1-3年经验的&#xff0c…

Mapreduce原理和YARN

MapReduce定义 MapReduce是一种分布式计算框架&#xff0c;由Google公司2004年首次提出&#xff0c;并贡献给Apache基金会。 MR版本 MapReduce 1.0&#xff0c;Hadoop早期版本(只支持MR模型)MapReduce 2.0&#xff0c;Hadoop 2.X版本&#xff08;引入了YARN资源调度框架后&a…

数据可视化图表类型_数据可视化中12种最常见的图表类型

数据可视化图表类型In the current era of large amounts of information in the form of numbers available everywhere, it is a difficult task to understand and get insights from these dense piles of data.在当今时代&#xff0c;到处都是数字形式的大量信息&#xff…

MapReduce编程

自定义Mapper类 class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable> &#xff5b; … }自定义mapper类都必须实现Mapper类&#xff0c;有4个类型参数&#xff0c;分别是&#xff1a; Object&#xff1a;Input Key Type-------------K1Text: Input…

统计信息在数据库中的作用_统计在行业中的作用

统计信息在数据库中的作用数据科学与机器学习 (DATA SCIENCE AND MACHINE LEARNING) Statistics are everywhere, and most industries rely on statistics and statistical thinking to support their business. The interest to grasp on statistics also required to become…

IOS手机关于音乐自动播放问题的解决办法

2019独角兽企业重金招聘Python工程师标准>>> 评估手机自带浏览器不能识别 aduio标签重的autoplay属性 也不能自动执行play()方法 一个有效的解决方案是在微信jssdk中调用play方法 document.addEventListener("WeixinJSBridgeReady", function () { docum…

开发人员怎么看实施人员

英文原文&#xff1a;What Developers Think Of Operations&#xff0c;翻译&#xff1a;张红月CSDN 在一个公司里面&#xff0c;开发和产品实施对于IS/IT的使用是至关重要的&#xff0c;一个负责产品的研发工作&#xff0c;另外一个负责产品的安装、调试等工作。但是在开发人员…

怎么评价两组数据是否接近_接近组数据(组间)

怎么评价两组数据是否接近接近组数据(组间) (Approaching group data (between-group)) A typical situation regarding solving an experimental question using a data-driven approach involves several groups that differ in (hopefully) one, sometimes more variables.使…

代码审计之DocCms漏洞分析

0x01 前言 DocCms[音译&#xff1a;稻壳Cms] &#xff0c;定位于为企业、站长、开发者、网络公司、VI策划设计公司、SEO推广营销公司、网站初学者等用户 量身打造的一款全新企业建站、内容管理系统&#xff0c;服务于企业品牌信息化建设&#xff0c;也适应用个人、门户网站建设…

翻译(九)——Clustered Indexes: Stairway to SQL Server Indexes Level 3

原文链接&#xff1a;www.sqlservercentral.com/articles/StairwaySeries/72351/ Clustered Indexes: Stairway to SQL Server Indexes Level 3 By David Durant, 2013/01/25 (first published: 2011/06/22) The Series 本文是阶梯系列的一部分&#xff1a;SQL Server索引的阶梯…

power bi 中计算_Power BI中的期间比较

power bi 中计算Just recently, I’ve come across a question on the LinkedIn platform, if it’s possible to create the following visualization in Power BI:就在最近&#xff0c;我是否在LinkedIn平台上遇到了一个问题&#xff0c;是否有可能在Power BI中创建以下可视化…

-Hive-

Hive定义 Hive 是一种数据仓库技术&#xff0c;用于查询和管理存储在分布式环境下的大数据集。构建于Hadoop的HDFS和MapReduce上&#xff0c;用于管理和查询分析结构化/非结构化数据的数据仓库; 使用HQL&#xff08;类SQL语句&#xff09;作为查询接口&#xff1b;使用HDFS作…

CentOS 7 安装 JDK

2019独角兽企业重金招聘Python工程师标准>>> 1、下载oracle jdk 下载地址&#xff1a; http://www.oracle.com/technetwork/java/javase/downloads/index.html 选择同一协议&#xff0c;下载rpm格式版本jdk&#xff0c;或tar.gz格式jdk。 2、卸载本机openjdk 2.1、查…

如何进行数据分析统计_对您不了解的数据集进行统计分析

如何进行数据分析统计Recently, I took the opportunity to work on a competition held by Wells Fargo (Mindsumo). The dataset provided was just a bunch of numbers in various columns with no indication of what the data might be. I always thought that the analys…

020-Spring Boot 监控和度量

一、概述 通过配置使用actuator查看监控和度量信息 二、使用 2.1、建立web项目&#xff0c;增加pom <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency> 启动项目&a…

matplotlib布局_Matplotlib多列,行跨度布局

matplotlib布局For Visualization in Python, Matplotlib library has been the workhorse for quite some time now. It has held its own even after more nimble rivals with easier code interface and capabilities like seaborn, plotly, bokeh etc. have arrived on the…

Hadoop生态系统

大数据架构-Lambda Lambda架构由Storm的作者Nathan Marz提出。旨在设计出一个能满足实时大数据系统关键特性的架构&#xff0c;具有高容错、低延时和可扩展等特性。Lambda架构整合离线计算和实时计算&#xff0c;融合不可变性&#xff08;Immutability&#xff09;&#xff0c…

使用Hadoop所需要的一些Linux基础

Linux 概念 Linux 是一个类Unix操作系统&#xff0c;是 Unix 的一种&#xff0c;它 控制整个系统基本服务的核心程序 (kernel) 是由 Linus 带头开发出来的&#xff0c;「Linux」这个名称便是以 「Linus’s unix」来命名的。 Linux泛指一类操作系统&#xff0c;具体的版本有&a…