什么是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. tableau连接不上mysql或不显示mysql表的终极解决方法

    [报错一]连不上mysql An error occurred while communicating with MySQL The connection to the data source mig ...

  2. 鸿蒙应用开发从入门到入行 - 篇1:HarmonyOS介绍——带你深入理解鸿蒙特性

    鸿蒙应用开发从入门到入行 第一天 - HarmonyOS介绍 导读:在本篇文章里,您将了解到HarmonyOS是什么,以及有哪些振奋人心的特性.并且猫林老师会在本篇文章里给出结论:鸿蒙必能蚕食安卓份额 ...

  3. Flutter ListView报错RenderBox was not laid out: RenderViewport#680c1 NEEDS-LAYOUT NEEDS-PAINT

    RenderBox was not laid out: RenderViewport#680c1 NEEDS-LAYOUT NEEDS-PAINT 使用ListView.builder()布局时,如果 ...

  4. 【转载】Apache Doris、DorisDB傻傻分不清。。。

    https://www.sohu.com/a/488816742_827544   相信这两天很多社区小伙伴都看到 StarRocks 所谓"开源"的动态了,开源用户群里有很多小伙 ...

  5. Mockito入门:如何在Spring中Mock部分对象

    前情提要 随着分布式应用的开发逐渐成为标配,多个微服务团队合作来完成垂直业务的开发成为了一种常态.微服务使得团队可以专注于自己的业务逻辑,在和下游依赖和上游对接的团队聚焦好接口之后,就进入正式的开发. ...

  6. Qt音视频开发16-通用悬浮按钮工具栏的设计

    一.前言 通用悬浮按钮工具栏这个功能经过了好几个版本的迭代,一开始设计的时候是写在视频控件widget窗体中,当时功能简单就放一排按钮在顶部悬浮widget中就好,随着用户需求的变化,用户需要自定义悬 ...

  7. 百度统一socket长连接组件从0到1的技术实践

    本文由百度消息中台团队分享,引用自百度Geek说,原题"百度iOS端长连接组件建设及应用实践",为了帮助理解,本文有修订和改动. 1.引言 在过去的十年里,移动端互联网技术飞速发展 ...

  8. Python格式化字符串字面值 | 被官方文档称之为『漂亮』的输出格式

    Python格式化字符串字面值 | 被官方文档称之为『漂亮』的输出格式 本文参考输入输出 - Python 3.7.10 文档.首先声明咱的实验环境. ❯ python --version Pytho ...

  9. linux服务器下 conda 配置清华源

    安装miniconda 下载安装脚本 wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Li ...

  10. Solution Set - “一二行诗句相遇,十万颗恒星解体”

    目录 0.「集训队互测 2018」Fim4 1.「ABC 294Ex」K-Coloring 2.「NOI Simu.」解码 3.「NOI Simu.」图 4.「NOI Simu.」表达式 5.「ULR ...