什么是HDFS

HDFS的优缺点

HDFS的文件块大小

HDFS的写数据流程

HDFS的副本配置策略

HDFS读数据的流程

什么是HDFS

HDFS(Hadoop Distributed File System),它是一个文件系统,用于存储文件,通过目录树来定位文件;其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色。

HDFS的使用场景:适合一次写入,多次读出的场景,且不支持文件的修改。适合用来做数据分析,并不适合用来做网盘应用。

HDFS的优缺点

  • 优点

1、高容错

(1)数据自动保存多个副本。它通过增加副本的形式,提高容错性。

(2)当一个副本丢失以后,它可以自动恢复。

2、适合处理大数据

(1)数据规模:能够处理数据规模达到GB、TB、甚至PB级别的数据;

(2)文件规模:能够处理百万规模以上的文件数量,数量相当之大。

3、可构建在廉价机器上,通过多副本机制,提高可靠性。

  • 缺点

1、不适合低延时数据访问,比如毫秒级的存储数据。

2、无法高效的对大量数据小文件进行存储

(1)存储大量小文件的话,它会占用NameNode大量的内存来存储文件目录和块信息。这样是不可取的,因为NameNode的内存总是有限的。

(2)小文件存储的寻址时间会超过读取时间,它违反了HDFS的设计目标。

3、不支持并发写入、文件随机修改

(1)同一时间一个文件只能有一个用户执行写操作,不允许多个线程同时写。

(2)仅支持数据append追加,不支持文件的随机修改。

HDFS的文件块大小

HDFS的文件在物理上是分块存储的,块的大小可以通过配置参数(dfs.blocksize)来规定,默认大小在hadoop2.x版本中是128M,老版本中是64M。

如果寻址时间为10ms,即查到目标block的时间为10ms。

寻址时间为传输时间的1%时,则为最佳状态。因此,传输时间=10ms/0.01=1000ms=1s

目前磁盘的传输速率普遍为100MB/s

block的大小=1s*100MB/s=100MB

HDFS的写数据流程

1、客户端通过Distributed FileSystem模块向NameNode请求上传文件,NameNode检查目标文件是否已存在,父目录是否存在。

2、NameNode返回是否可以上传。

3、客户端请求第一个 Block上传到哪几个DataNode服务器上。

4、NameNode返回3个DataNode节点,分别为dn1、dn2、dn3。

5、客户端通过FSDataOutputStream模块请求dn1上传数据,dn1收到请求会继续调用dn2,然后dn2调用dn3,将这个通信管道建立完成。

6、dn1、dn2、dn3逐级应答客户端。

7、客户端开始往dn1上传第一个Block(先从磁盘读取数据放到一个本地内存缓存),以Packet为单位,dn1收到一个Packet就会传给dn2,dn2传给dn3;dn1每传一个packet会放入一个应答队列等待应答。

8、当一个Block传输完成之后,客户端再次请求NameNode上传第二个Block的服务器。

(重复执行3-7步)。

HDFS的副本配置策略

第一个副本在Client所在的节点上。如果客户端在集群外,随机选一个。

第二个副本和第一个副本位于同一机架,随机节点。

第三个副本位于不同机架的随机节点。

HDFS读数据的流程

1、客户端通过Distributed FileSystemNameNode请求下载文件,NameNode通过查询元数据,找到文件块所在的DataNode地址。

2、挑选一台DataNode(就近原则,然后随机)服务器,请求读取数据。

3、DataNode开始传输数据给客户端(从磁盘里面读取数据输入流,以Packet为单位来做校验)。

4、客户端以Packet为单位接收,先在本地缓存,然后写入目标文件。

Q&A

Q1:为什么块的大小不能设置太小,也不能设置太大?

A:如果HDFS的块设置太小,会增加寻址时间,程序一直在找块的位置;如果块设置的太大,从磁盘传输数据的时间会明显大于定位这个块开始位置所需的时间。导致程序在处理这块数据时,会非常慢。

HDFS块的大小设置主要取决于磁盘的传输速率。

Hadoop - HDFS 概述的更多相关文章

  1. HDFS概述(5)————HDFS HA

    HA With QJM 目标 本指南概述了HDFS高可用性(HA)功能以及如何使用Quorum Journal Manager(QJM)功能配置和管理HA HDFS集群. 本文档假设读者对HDFS集群 ...

  2. HDFS概述

    HDFS概述 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.HDFS产出背景及定义 1>.HDFS产生背景 随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配 ...

  3. 大数据及Hadoop的概述

    一.大数据存储和计算的各种框架即工具 1.存储:HDFS:分布式文件系统   Hbase:分布式数据库系统   Kafka:分布式消息缓存系统 2.计算:Mapreduce:离线计算框架   stor ...

  4. HDFS概述(一)

    HDFS概述(一) 1. HDFS产出的背景及定义 1.1 HDFS产生的背景 随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需 ...

  5. hadoop格式化:java.io.IOException: Incompatible clusterIDs in /home/lxh/hadoop/hdfs/data: namenode clusterID

    1 概述  解决hadoop启动hdfs时,datanode无法启动的问题.错误为: java.io.IOException: Incompatible clusterIDs in /home/lxh ...

  6. 【转帖】Hadoop — HDFS的概念、原理及基本操作

    Hadoop — HDFS的概念.原理及基本操作 https://www.cnblogs.com/swordfall/p/8709025.html 分类: Hadoop undefined 1. HD ...

  7. HDFS概述和Shell操作

    大数据技术之Hadoop(HDFS) 第一章 HDFS概述 HDFS组成架构 HDFS文件块大小 第二章 HDFS的Shell操作(开发重点) 1.基本语法 bin/hadoop fs 具体命令    ...

  8. Hadoop - HDFS学习笔记(详细)

    第1章 HDFS概述 hdfs背景意义 hdfs是一个分布式文件系统 使用场景:适合一次写入,多次读出的场景,且不支持文件的修改. 优缺点 高容错性,适合处理大数据(数据PB级别,百万规模文件),可部 ...

  9. Hadoop HDFS 用户指南

    This document is a starting point for users working with Hadoop Distributed File System (HDFS) eithe ...

  10. Hadoop HDFS负载均衡

    Hadoop HDFS负载均衡 转载请注明出处:http://www.cnblogs.com/BYRans/ Hadoop HDFS Hadoop 分布式文件系统(Hadoop Distributed ...

随机推荐

  1. 录音虚拟驱动杂音bug修复

    永远选择相信同步原语 起因 qemu有一个可以让虚拟机(guest)使用宿主机(host)的音频播放的参数,-device audio.这个参数在x86上效果不错,但是在arm上效果不行,杂音很多,所 ...

  2. docker部署最新6.2版Zabbix Server端

    一.安装docker,参见本博客docker安装文档. 二.启动空的mysql -e MYSQL_DATABASE="zabbix" \ -e MYSQL_USER="z ...

  3. 关于 JavaScript 中的 Array.reduce()

    关于 JavaScript 中的 Array.reduce() reduce() 方法在 MDN 的定义看起来很复杂: reduce((previousValue, currentValue, cur ...

  4. k8s.HPA.使用自定义指标Pod自动扩容

    k8s.HPA.使用自定义指标Pod自动扩容 环境 env : kubernetes v1.22 metrics-server 0.6.1 prometheus v2.36.1 prometheus- ...

  5. StreamJsonRpc.ConnectionLostException 在请求完成之前, 与远程方的 JSON-RPC 连接已丢失

    今天电脑重启之后,发现 visual studio 2022 的智能提示与报错经常性不好用,不光不能在正常时候提示代码错误信息,甚至在编译过后也不提示错误.反复重启,刚开始正常,隔一会儿就会提示什么什 ...

  6. Qt/C++地图轨迹回放/自定义图标/动态平滑移动/导入轨迹数据/支持各种地图包括天地图

    一.前言说明 这个轨迹回放的功能迭代过很多个版本,最初的版本是轨迹点的坐标每次都是删除折线再重新生成折线,后面发现有内存泄漏,地图js中并不会及时的释放没有用的对象,哪怕是用地图提供的clearove ...

  7. Qt数据库应用19-图片转pdf

    一.前言 用户的需求真的是千奇百怪,刚做完不同页面横向纵向排版的需求,又来个需要图片转pdf的需求,提供静态函数直接使用. 经过这么些年的社会的毒打,我的原则是:用户是上帝和大爷,尽量站在用户的角度换 ...

  8. Qt数据库应用18-横向纵向排版

    一.前言 近期用户提了个需求,需要打印一个文档,要求其中部分页横向排版部分页面纵向排版,这个在之前的通用打印导出pdf类中是不具备的,通用的打印导出pdf只能统一设置一个排版方式,要么横向要么纵向,而 ...

  9. Transmission安装及更换官方UI

    相关链接地址: Transmission镜像地址 Transmission 浏览器管理界面:Transmission Web Control UI. 创建容器 docker-compose.yaml ...

  10. Python读取栅格图像并对像元数据处理后导出到表格文件中

      本文介绍基于Python语言中的gdal模块,读取一景.tif格式的栅格遥感影像文件,提取其中每一个像元的像素数值,对像素值加以计算(辐射定标)后,再以一列数据的形式将计算后的各像元像素数据保存在 ...