大数据学习之四——HDFS

1.Hadoop与HDFS的关系

Hadoop实现了一个分布式文件系统,即Hadoop Distributed File System,简称HDFS。对外部客户机而言,HDFS就像一个传统的分级文件系统,所以,很多时候,我们也叫它DFS(Distributed File System)。可以理解为HDFS是Hadoop中的一个部件。

文件系统由三部分组成:文件管理软件、被管理文件、文件存储结构

2.HDFS存储(流处理,块存储)

HDFS以流处理访问模式来存储文件的。分布化的文件系统会因为分布后的结构不完整,导致系统复杂度加大。那么HDFS如何来保证完整性的?HDFS的解决方案是分片冗余,本地校验。冗余后的分片中只要有一份是完整的,经过多次协同调整之后,其他分片文件也将完整。所以,整个系统里的文件是完整的。

3.元数据

元数据:用于描述要素、数据集或数据集系列的内容、覆盖范围、管理方式等相关信息,简单的说,就是关于数据属性的数据。

元数据包括:

——文件系统目录树信息

   *文件名,目录名

   *文件和目录的大小,创建及最后访问时间

   *权限,文件和目录的从属关系

——文件和块的对应关系

   *文件由哪些块组成

——块的存放位置

   *机器名,块IP

HDFS就是将巨大的数据变成大量数据的数据。

3.HDFS架构

一个HDFS文件系统包括一个主控节点Namenode和一组从节点DataNode。

Namenode:是一个主服务器,用来管理整个文件系统的命名空间和元数据。

Namenode保存了文件系统的三种元数据:

1)命名空间,整个分布式文件系统的目录结构

      2)数据块与文件名的映射表

      3)每个数据块副本的位置信息,每个数据块默认有三个副本

Namenode可以执行文件操作,比如打开、关闭、重命名;同时向DataNode分配数据块并建立数据块和DataNode的对应关系。

DataNode:块的实际数据存放,用来实际存储和管理文件的数据块,客户端读取写入的时候直接与DataNode通信。

DataNode处理用户具体的数据读写请求,同时处理Namenode对于数据块的创建、删除副本的指令。

4.数据块

HDFS最大的特点是使用了数据块的存储方式。

HDFS中每个块是一个独立的存储单位,以块为单位在集群服务器上分配存储。

使用块的好处:

(1)当一个文件大于集群中任意一个磁盘的时候,文件系统可以充分利用集群中所有的磁盘。

(2)管理块使底层的存储子系统相对简单

(3)块更加适合备份,为容错和高可用性的实现带来方便

(4)实现了名字与位置的分离,存储位置的独立性

块的备份:

(1)每个块在集群中存储多份(replica)

(2)某个块的所有备份都是同一ID

(3)系统可以根据机架的配置自动分配备份位置

5.HDFS客户端的访问流程

A. 首先,用户的应用程序通过HDFS 的客户端程序将文件名发送至NameNode 。
B. NameNode 接收到文件名之后,在HDFS 目录中检索文件名对应的数据块,再根据数据块信息找到保存数据块的DataNode 地址,将这些地址回送给客户端。
C. 客户端接收到DataNode 地址之后,与DataNode 并行地进行数据传输操作,同时将操作结果的相关日志(比如是否成功,修改后的数据块信息等)提交到NameNode 。

6.数据的读取过程

A. 客户端调用FileSystem 实例的open 方法,获得这个文件对应的输入流InputStream
B. 通过RPC 远程调用NameNode ,获得NameNode 中此文件对应的数据块保存位置,包括这个文件的副本的保存位置( 主要是各DataNode的地址) 。
C. 获得输入流之后,客户端调用read 方法读取数据。选择最近的DataNode 建立连接并读取数据。
D. 如果客户端和其中一个DataNode 位于同一机器(比如MapReduce 过程中的mapper 和reducer),那么就会直接从本地读取数据。
E. 到达数据块末端,关闭与这个DataNode 的连接,然后重新查找下一个数据块。
F. 不断执行第2 - 5 步直到数据全部读完
G. 客户端调用close ,关闭输入流DF S InputStream

7.数据的写入过程

A. 客户端调用Fi leSystem 实例的create 方法,创建文件。NameNode 通过一些检查,比如文件是否存在,客户端是否拥有创建权限等;通过检查之后,在NameNode 添加文件信息。注意,因为此时文件没有数据,所以NameNode 上也没有文件数据块的信息。
B. 创建结束之后, HDFS 会返回一个输出流DFSDataOutputStream 给客户端。
C. 客户端调用输出流DFSDataOutputStream 的write 方法向HDFS 中对应的文件写入数据。
D. 数据首先会被分包,这些分包会写人一个输出流的内部队列Data 队列中,接收完数据分包,输出流DFSDataOutputStream 会向NameNode 申请保存文件和副本数据块的若干个DataNode , 这若干个DataNode 会形成一个数据传输管道。DFSDataOutputStream 将数据传输给距离上最短的DataNode ,这个DataNode 接收到数据包之后会传给下一个DataNode 。数据在各DataNode之间通过管道流动,而不是全部由输出流分发,以减少传输开销。

E. 因为各DataNode 位于不同机器上,数据需要通过网络发送,所以,为了保证所有DataNode 的数据都是准确的,接收到数据的DataNode 要向发送者发送确认包(ACK Packet ) 。对于某个数据块,只有当DFSDataOutputStream 收到了所有DataNode 的正确ACK. 才能确认传输结束。DFSDataOutputStream 内部专门维护了一个等待ACK 队列,这一队列保存已经进入管道传输数据、但是并未被完全确认的数据包。
F. 不断执行第3 - 5 步直到数据全部写完,客户端调用close 关闭文件。
G. DFSDataInputStream 继续等待直到所有数据写人完毕并被确认,调用complete 方法通知NameNode 文件写入完成。NameNode 接收到complete 消息之后,等待相应数量的副本写入完毕后,告知客户端。

原文地址:https://www.cnblogs.com/m-study/p/8343115.html

时间: 2024-08-30 11:07:19

大数据学习之四——HDFS的相关文章

大数据学习之HDFS基本API操作(上)06

1 package it.dawn.HDFSPra; 2 3 import java.io.FileNotFoundException; 4 import java.io.IOException; 5 import java.net.URI; 6 import java.net.URISyntaxException; 7 import java.util.Arrays; 8 9 import org.apache.hadoop.conf.Configuration; 10 import org.

大数据学习之五——HDFS常用命令

HDFS文件操作常用命令: (1)列出HDFS下的文件 hadoop  dfs  -ls  <目录> (2)上传文件 将Linux系统本地文件上传到HDFS中 hadoop  dfs  -put  <本地文件>  <HDFS文件> (3)下载文件 将HDFS 中的文件下载到Linux系统本地目录 hadoop   dfs  -get  <HDFS文件>  <本地文件> (4)查看文件 hadoop  dfs  -cat  <HDFS文件&g

大数据学习之HDFS基本命令操作05

1)hdfs的客户端 1.网页形式->测试用 http://192.168.40.11:50070/dfshealth.html#tab-overview 2.命令行形式->测试用 3.企业级API 2)查看帮助 hdfs dfs -help 3)查看当前目录信息 hdfs dfs -ls / 3)上传文件 hdfs dfs -put /本地路径 /hdfs路径 4)剪切文件 hdfs dfs -moveFromLocal a.txt /aa.txt 5)下载文件到本地 hdfs dfs -g

大数据学习之HDFS的工作机制07

1:namenode+secondaryNameNode工作机制 2:datanode工作机制 3:HDFS中的通信(代理对象RPC) 下面用代码来实现基本的原理 1:服务端代码 package it.dawn.HDFSPra.RPC.server; import java.io.IOException; import org.apache.hadoop.HadoopIllegalArgumentException; import org.apache.hadoop.conf.Configura

大数据学习系列之四 ----- Hadoop+Hive环境搭建图文详解(单机)

引言 在大数据学习系列之一 ----- Hadoop环境搭建(单机) 成功的搭建了Hadoop的环境,在大数据学习系列之二 ----- HBase环境搭建(单机)成功搭建了HBase的环境以及相关使用介绍.本文主要讲解如何搭建Hadoop+Hive的环境. 一.环境准备 1,服务器选择 本地虚拟机 操作系统:linux CentOS 7 Cpu:2核 内存:2G 硬盘:40G 说明:因为使用阿里云服务器每次都要重新配置,而且还要考虑网络传输问题,于是自己在本地便搭建了一个虚拟机,方便文件的传输以

大数据学习系列之五 ----- Hive整合HBase图文详解

引言 在上一篇 大数据学习系列之四 ----- Hadoop+Hive环境搭建图文详解(单机) 和之前的大数据学习系列之二 ----- HBase环境搭建(单机) 中成功搭建了Hive和HBase的环境,并进行了相应的测试.本文主要讲的是如何将Hive和HBase进行整合. Hive和HBase的通信意图 Hive与HBase整合的实现是利用两者本身对外的API接口互相通信来完成的,其具体工作交由Hive的lib目录中的hive-hbase-handler-*.jar工具类来实现,通信原理如下图

大数据学习系列之七 ----- Hadoop+Spark+Zookeeper+HBase+Hive集群搭建 图文详解

引言 在之前的大数据学习系列中,搭建了Hadoop+Spark+HBase+Hive 环境以及一些测试.其实要说的话,我开始学习大数据的时候,搭建的就是集群,并不是单机模式和伪分布式.至于为什么先写单机的搭建,是因为作为个人学习的话,单机已足以,好吧,说实话是自己的电脑不行,使用虚拟机实在太卡了... 整个的集群搭建是在公司的测试服务搭建的,在搭建的时候遇到各种各样的坑,当然也收获颇多.在成功搭建大数据集群之后,零零散散的做了写笔记,然后重新将这些笔记整理了下来.于是就有了本篇博文. 其实我在搭

大数据学习系列之七 ----- Hadoop+Spark+Zookeeper+HBase+Hive集

引言 在之前的大数据学习系列中,搭建了Hadoop+Spark+HBase+Hive 环境以及一些测试.其实要说的话,我开始学习大数据的时候,搭建的就是集群,并不是单机模式和伪分布式.至于为什么先写单机的搭建,是因为作为个人学习的话,单机已足以,好吧,说实话是自己的电脑不行,使用虚拟机实在太卡了... 整个的集群搭建是在公司的测试服务搭建的,在搭建的时候遇到各种各样的坑,当然也收获颇多.在成功搭建大数据集群之后,零零散散的做了写笔记,然后重新将这些笔记整理了下来.于是就有了本篇博文. 其实我在搭

大数据学习一般都学什么

大数据已经成为发展的趋势,大数据的培训学习也就应运而生,可是大数据具体学习什么内容呢,众说纷纭: 那么大数据学习到底应该掌握哪些知识呢,笔者根据自己的经验总结如下: 学习要根据自身情况来定,如果你是零基础,那就必须先从基础java开始学起(大数据支持很多开发语言,但企业用的最多的还是JAVA),接下来学习数据结构.linux系统操作.关系型数据库,夯实基础之后,再进入大数据的学习,具体可以按照如下体系: 第一阶段 CORE JAVA (加**的需重点熟练掌握,其他掌握) Java基础** 数据类