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 ...
随机推荐
- powershell禁止系统运行脚本
错误信息: set-executionpolicy remotesigned set-executionpolicy : Windows PowerShell 已成功更新你的执行策略,但在更具体的作业 ...
- flutter问题汇总
Text文字居中 Text( 'You will need to post a photo before you can play!', textAlign: ...
- 在分布式追踪系统中使用 W3C Trace Context
在分布式追踪系统中使用 W3C Trace Context https://dev.to/luizhlelis/using-w3c-trace-context-standard-in-distribu ...
- k8s.HPA.使用自定义指标Pod自动扩容
k8s.HPA.使用自定义指标Pod自动扩容 环境 env : kubernetes v1.22 metrics-server 0.6.1 prometheus v2.36.1 prometheus- ...
- rabbitmq3.7.3 发布了一个新的 exchange x-random
direct exchange 同一个 routing key 可以绑定多个 queue,当给这个routing key发消息时,所有 queue 都会投递.这个行为对于一些场景不适用,有时我们希望只 ...
- MySQL 优化利器 SHOW PROFILE 的实现原理
背景 最近碰到一个 case,通过可传输表空间的方式导入一个 4GB 大小的表,耗时 13 分钟. 通过PROFILE定位,发现大部分耗时竟然是在System lock阶段. mysql> se ...
- 【Python】【爬虫】【爬狼】003_获取搜索结果的页数
# 获取搜索内容的页数 需要的包 import urllib.request # 获取网页源码 import re # 正则表达式,进行文字匹配 from bs4 import BeautifulSo ...
- Qt/C++音视频开发64-共享解码线程/重复利用解码/极低CPU占用/画面同步/进度同步
一.前言 共享解码线程主要是为了降低CPU占用,重复利用解码,毕竟在一个监控系统中,很可能打开了同一个地址,需要在多个不同的窗口中播放,形成多屏渲染的效果,做到真正的完全的画面同步,在主解码线程中切换 ...
- Qt/C++编写监控实时显示和取流回放工具(回放支持切换进度)
一.前言 现在各个监控大厂做的设备,基本上都会支持通过rtsp直接取流显示,而且做的比较好的还支持通过rtsp回放取流,基本上都会约定一个字符串的规则,每个厂家都是不一样的规则,比如回放对应的rtsp ...
- URL中文转换成类似%E6%96%97%E7%A0%B4(url编码)格式
要将汉字转换成编码格式拼接成请求,没怎么搞过,一番查找,最终确定使用C# 里的WebUtility using System.Net; var a = WebUtility.UrlEncode(&qu ...