Hadoop - 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 FileSystem向NameNode请求下载文件,NameNode通过查询元数据,找到文件块所在的DataNode地址。2、挑选一台
DataNode(就近原则,然后随机)服务器,请求读取数据。3、
DataNode开始传输数据给客户端(从磁盘里面读取数据输入流,以Packet为单位来做校验)。4、客户端以Packet为单位接收,先在本地缓存,然后写入目标文件。
Q&A
Q1:为什么块的大小不能设置太小,也不能设置太大?
A:如果HDFS的块设置太小,会增加寻址时间,程序一直在找块的位置;如果块设置的太大,从磁盘传输数据的时间会明显大于定位这个块开始位置所需的时间。导致程序在处理这块数据时,会非常慢。
HDFS块的大小设置主要取决于磁盘的传输速率。
Hadoop - HDFS 概述的更多相关文章
- HDFS概述(5)————HDFS HA
HA With QJM 目标 本指南概述了HDFS高可用性(HA)功能以及如何使用Quorum Journal Manager(QJM)功能配置和管理HA HDFS集群. 本文档假设读者对HDFS集群 ...
- HDFS概述
HDFS概述 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.HDFS产出背景及定义 1>.HDFS产生背景 随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配 ...
- 大数据及Hadoop的概述
一.大数据存储和计算的各种框架即工具 1.存储:HDFS:分布式文件系统 Hbase:分布式数据库系统 Kafka:分布式消息缓存系统 2.计算:Mapreduce:离线计算框架 stor ...
- HDFS概述(一)
HDFS概述(一) 1. HDFS产出的背景及定义 1.1 HDFS产生的背景 随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需 ...
- 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 ...
- 【转帖】Hadoop — HDFS的概念、原理及基本操作
Hadoop — HDFS的概念.原理及基本操作 https://www.cnblogs.com/swordfall/p/8709025.html 分类: Hadoop undefined 1. HD ...
- HDFS概述和Shell操作
大数据技术之Hadoop(HDFS) 第一章 HDFS概述 HDFS组成架构 HDFS文件块大小 第二章 HDFS的Shell操作(开发重点) 1.基本语法 bin/hadoop fs 具体命令 ...
- Hadoop - HDFS学习笔记(详细)
第1章 HDFS概述 hdfs背景意义 hdfs是一个分布式文件系统 使用场景:适合一次写入,多次读出的场景,且不支持文件的修改. 优缺点 高容错性,适合处理大数据(数据PB级别,百万规模文件),可部 ...
- Hadoop HDFS 用户指南
This document is a starting point for users working with Hadoop Distributed File System (HDFS) eithe ...
- Hadoop HDFS负载均衡
Hadoop HDFS负载均衡 转载请注明出处:http://www.cnblogs.com/BYRans/ Hadoop HDFS Hadoop 分布式文件系统(Hadoop Distributed ...
随机推荐
- NVM管理多个Node版本
在项目中,我们常常会遇到node版本问题的一些报错,像是vue 3需要node10以上版本,不同的 node-sass 版本需要安装不同的 node.js 版本,为了统一管理node版本,我们需要用 ...
- Java性能最后一个领域:去除垃圾回收器
Java性能最后一个领域:去除垃圾回收器 不产生垃圾不等于不创建对象,如果对象创建满足以下几个条件,仍然可以在创建对象之后不需要垃圾回收器: 应用程序或者库在初始化的时候生成有限个数的对象,然后不断复 ...
- 反微服务架构(A Macro Services Framework)
作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 反微服务架构(A Macro Services Frame ...
- 【C#】【平时练习】将左边列表框(List)的内容(月份)添加到右边列表框。最终右侧显示的内容(月份)要保持一定顺序
Aspx - 点击查看代码 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind=" ...
- 【MyBatis】学习笔记04:配置文件模板
[Mybatis]学习笔记01:连接数据库,实现增删改 [Mybatis]学习笔记02:实现简单的查 [MyBatis]学习笔记03:配置文件进一步解读(非常重要) 目录 IDEA配置模板的地方 核心 ...
- SpringBoot外部配置以及优先级
SpringBoot外部配置属性值的方式有很多种,SpringBoot为这多种配置方式指定了优先级,在属性相同的情况下,优先级高的配置方式会覆盖优先级低的配置方式.当然,如果属性不相同,则这些配置 ...
- Qt/C++推流程序自动生成网页远程查看实时视频流(视频文件/视频流/摄像头/桌面转成流媒体rtmp+hls+webrtc)
一.前言说明 推流程序将视频流推送到流媒体服务器后,此时就等待验证拉流播放,一般可以选择ffplay命令行播放或者vlc等播放器打开播放,也可以选择网页直接打开拉流地址播放,一般主流的浏览器都支持网页 ...
- Mysql - com.mysql.jdbc.Driver与com.mysql.cj.jdbc.Driver的区别
spring常用dataSource配置如下: spring: datasource: username: root password: root url: jdbc:mysql://localhos ...
- C#中定义委托的思路
如同在C#的类中定义成员变量或属性一样,类中定义成员变量(private)或属性(public),在类的构造方法中为变量或属性赋值或初始化. 在C#的类中定义委托变量同样遵循这个思路.首先声明一个委托 ...
- 《Maven应用实战》一书的在线学习网址和源码链接
<Maven应用实战>杨世文,孙会军 在线学习网址:http://c.biancheng.net/view/4756.html 源码链接:https://pan.baidu.com/s/1 ...