Hadoop学习之路(二)HDFS基础
1.HDFS前言
HDFS:Hadoop Distributed File System,Hadoop分布式文件系统,主要用来解决海量数据的存储问题。
设计思想
- 分散均匀存储 dfs.blocksize = 128M
- 备份冗余存储 dfs.replication = 3
在大数据系统中作用
为各类分布式运算框架(如:MapReduce,spark,hive.....)提供数据存储服务。
重点概念
数据切块、副本存放、元数据
2.HDFS的概念和特性
概念
- 首先,它是个文件系统。用于存储文件,通过统一的命名空间——目录树来定位文件。
- 其次,它是分布式的。由很多服务器联合起来实现其功能,集群中的服务器有各自的角色。
重要特性
- HDFS中的文件在物理上是分块存储(block),块的大小可以通过配置参数(dfs.blocksize)来规定,默认大小在hadoop2.x版本中是128M,老版本中是64M。
- HDFS文件系统会给客户端提供一个统一的抽象目录树,客户端通过路径来访问文件,形如:hdfs://namenode:port/dir-a/dir-b/dir-c/file.data
- 目录结构及文件分块信息(元信息)的管理由NameNode结点承担
namenode是HDFS集群主节点,负责维护整个hdfs文件系统的目录树,以及每一个路径(文件)所对应的block块信息(block的id,及其所在的datanode服务器) - 文件的各个block的存储管理由datanode结点承担。
datanode是HDFS集群从结点,每一个block都可以在多个datanode上存储多个副本,副本数量也可以通过参数设置(dfs.replication)
5.HDFS是设计成适应一次写入,多次读出的场景,且不支持文件的修改。
注:适合用来做数据分析,并不适合用来做网盘应用,因为不便修改,延迟大,网络开销大,成本太高
图解HDFS
通过上面的描述,hdfs有很多特点:
- 保存多个副本,且提供容错机制,副本丢失或宕机自动恢复。(默认存3份)
- 运行在廉价的机器上
- 适合大数据的处理。HDFS默认会将文件分割成block,在hadoop2.x以上版本默认128M为1个block。然后将block按照键值对的方式存储在HDFS上,并将键值对的映射存储到内存中。如果小文件太多,那内存的负担会很重。
如上图所示,HDFS也是按照Master和Slave的结构。分为NameNode(NN)、SecondaryNameNode、DataNode(DN)这几个角色。
NameNode:名称节点。
- 是HDFS的主节点、管理员。
- 是接收客户端(命令行、Java API程序 )的请求:创建目录、上传数据、下载数据、删除数据等等。
- 管理和维护HDFS的日志和元信息
DataName:数据节点。 负责存储client发来的数据库block;执行数据块的读写操作。
SecondaryNameNode:是NameNode的冷备份;合并fsimage和fsedits然后再发给namenode
- 热备份:b是a的热备份。如果a坏掉,那么b马上运作代替a的工作。
- 冷备份:b是a的冷备份。如果a坏掉,那么b上存储a的一些信息,减少a坏掉之后的损失。
fsimage:元数据镜像文件(文件系统的目录树)
edits:元数据的操作日志(针对文件系统做的修改操作记录)
namenode内存中存储的是=fsimage+edits。
SecondaryNameNode负责定时默认1小时,从namenode上,获取fsimage和edits来进行合并,然后在发送给namenode,减少namenode的工作量。
HDFS的局限性
1.低延时数据访问。在yoghurt交互性的应用上,应用需要在ms或者几个s的时间内得到响应。由于HDFS为高吞吐率做了设计,也因此牺牲了快速响应。对于低延时的应用,可以考虑HBase或者Cassandra。
2.大量的小文件。标准的HDFS数据块的大小是128M(2.x),存储小文件并不会浪费实际的存储空间,但是无疑会增加在NameNode上的元数据。大量的小文件会影响整个集群的性能。
Btrfs为小文件做了优化-inline file,对于小文件有很好的空间优化和访问时间优化。
3.多用户写入、修改文件。HDFS的文件只能有一个写入者,而且写操作只能在文件结尾以追加的方式进行。它并不支持多个写入者,也不支持在文件写入后,对文件的任意位置的修改。
但是在大数据领域,分析的是已经存在的数据。这些数据一旦产生就不会修改。因此,HDFS的这些特性和设计的局限也就容易理解了。HDFS为大数据领域的数据分析,提供了非常重要而且十分基础的文件存储功能。
HDFS 保证可靠性的措施
1.冗余备份:每个文件存储成一系列数据块(Block)。为了容错,文件的所有数据块都会有副本(副本数量即复制因子,dfs.replication)。
2.副本存放:采用机架感知(Rak-aware)的策略来改进数据的可靠性、高可用和网络带宽的利用率。
3.心跳检测:NameNode周期性地从集群种的每一个DataNode接收心跳包和块报告,收到心跳包说明该DataNode工作正常。
4.安全模式:系统启动时,NameNode会进入安全模式。此时不允许出现数据块的写操作。
5.数据完整性检测:HDFS客户端软件实现了对HDFS文件内容的校验(CheckSum)和检查(dfs.bytes-per-checksum)。
单点故障(单点失效)问题
单点故障问题
如果NameNode失效,那么客户端或者MapReduce作用均无法读写查看文件。
解决方法 [Hadoop HA(High Availability) ]
1.启动一个拥有文件系统元数据的新NameNode(这个一般不采用,因为复制元数据非常消耗时间)。
2.配置一对活动-备用(Active-Standby)NameNode,活动NameNode失效时,备用NameNode立即接管,用户不会有明显中断的感觉。
Hadoop学习之路(二)HDFS基础的更多相关文章
- 阿里封神谈hadoop学习之路
阿里封神谈hadoop学习之路 封神 2016-04-14 16:03:51 浏览3283 评论3 发表于: 阿里云E-MapReduce >> 开源大数据周刊 hadoop 学生 s ...
- java学习之路之javaSE基础1
<h2>java学习之路之javaSE基础1</h2> <div> ###01.01_计算机基础知识(计算机概述)(了解)* A:什么是计算机?计算机在生活中的应用 ...
- 《Hadoop学习之路》学习实践
(实践机器:blog-bench) 本文用作博文<Hadoop学习之路>实践过程中遇到的问题记录. 本文所学习的博文为博主“扎心了,老铁” 博文记录.参考链接https://www.cnb ...
- java学习之路之javaSE基础2
java学习之路之javaSE基础2 所有的代码都是引用他人写的. 1.逻辑运算符 //&,|,^,! //int x = 10; //5 < x < 15 //x > 5 ...
- Tensorflow深度学习之十二:基础图像处理之二
Tensorflow深度学习之十二:基础图像处理之二 from:https://blog.csdn.net/davincil/article/details/76598474 首先放出原始图像: ...
- 【SpringCloud之pigx框架学习之路 】1.基础环境安装
[SpringCloud之pigx框架学习之路 ]1.基础环境安装 [SpringCloud之pigx框架学习之路 ]2.部署环境 1.Cmder.exe安装 (1) windows常用命令行工具 下 ...
- Hadoop学习之旅二:HDFS
本文基于Hadoop1.X 概述 分布式文件系统主要用来解决如下几个问题: 读写大文件 加速运算 对于某些体积巨大的文件,比如其大小超过了计算机文件系统所能存放的最大限制或者是其大小甚至超过了计算机整 ...
- Hadoop学习之路(九)HDFS深入理解
HDFS的优点和缺点 HDFS的优点 1.可构建在廉价机器上 通过多副本提高可靠性,提供了容错和恢复机制 服务器节点的宕机是常态 必须理性对象 2.高容错性 数据自动保存多个副本,副本丢失后,自动 ...
- Hadoop 学习之路(六)—— HDFS 常用 Shell 命令
1. 显示当前目录结构 # 显示当前目录结构 hadoop fs -ls <path> # 递归显示当前目录结构 hadoop fs -ls -R <path> # 显示根目录 ...
- Hadoop学习之路(十)HDFS API的使用
HDFS API的高级编程 HDFS的API就两个:FileSystem 和Configuration 1.文件的上传和下载 package com.ghgj.hdfs.api; import org ...
随机推荐
- sql中unique和distinct
在SQL语法里面,有unique和distinct两个关键字, unique是distinct的同义词,功能完全相同.distinct是标准语法,其他数据库 sql server,db2,oracle ...
- MySQL练习与小结
当你专注一件事的时候,时间总是过得很快! foreign key 练习 -- 切换数据库 use stumgr -- 删除班级表 drop table t_class1 -- 创建一个班级表 crea ...
- 使用MySQL Workbench进行数据库设计——MySQL Workbench使用方法总结
本文出自[我是干勾鱼的博客] 转自:https://blog.csdn.net/dongdong9223/article/details/48318877 1 创建Model(设计ER图) 使用wor ...
- 本地部署 Misago Docker + 配置 HTTPS 笔记
最近答应帮朋友做个论坛网站,想借此机会捡起 Python 在 GitHub 找了一圈,打算借用以 Python+Django 开发的 Misago 这个论坛系统 由于作者在今年更新的 Misago 0 ...
- 哪吒票房超复联4,100行python代码抓取豆瓣短评,看看网友怎么说
<哪吒之魔童降世>这部国产动画巅峰之作,上映快一个月时间,票房口碑双丰收. 迄今已有超一亿人次观看,票房达到42.39亿元,超过复联4,跻身中国票房纪录第三名,仅次于<战狼2> ...
- P1973 [NOI2011]Noi嘉年华
传送门 首先可以把时间区间离散化 然后求出 $cnt[l][r]$ 表示完全在时间 $[l,r]$ 之内的活动数量 设 $f[i][j]$ 表示当前考虑到时间 $i$,第一个会场活动数量为 $j$ 时 ...
- C#开发 WinForm如何在选项卡中集成加载多个窗体 实现窗体复用
http://blog.csdn.net/upi2u/article/details/37914909 最近需要做的一个项目,为了避免从菜单中选择的麻烦,需要把几个窗体集成到一起,通过TabContr ...
- Django:django-debug-toolbar模块
简介: Django的django-debug-toolbar 模块是一组可配置的面板,可显示有关当前请求/响应的各种调试信息,并在单击时显示有关面板内容的更多详细信息. GitHub源文件下载地址 ...
- 时间选择器moment格式化存在时差问题
时间选择器moment格式化存在时差问题解决方法: return moment(date).utc().zone(+6).format('YYYY-MM-DD')解决IE9时间选择器不能回显数据解决方 ...
- 【转】一文搞懂C语言回调函数
转:https://segmentfault.com/a/1190000008293902?utm_source=tag-newest 什么是回调函数 我们先来看看百度百科是如何定义回调函数的: 回调 ...