Hadoop学习之路(二)HDFS基础

摘要:
数据节点是HDFS集群的从属节点。每个块可以在多个数据节点上存储多个副本。副本的数量也可以通过参数设置。5.HDFS设计为适应一写多读的场景,不支持文件修改。HDFS默认情况下会将文件划分为块,在hadoop2以上的版本中,128M默认为一个块。x、 它是HDFS的主节点和管理员。HDFS 1的限制。低延迟数据访问。因为HDFS是为高吞吐量而设计的,所以它也牺牲了快速响应。HDFS为大数据领域的数据分析提供了非常重要和基本的文件存储功能。

1.HDFS前言

HDFS:Hadoop Distributed File System,Hadoop分布式文件系统,主要用来解决海量数据的存储问题。

设计思想

  • 分散均匀存储 dfs.blocksize = 128M
  • 备份冗余存储 dfs.replication = 3

在大数据系统中作用

为各类分布式运算框架(如:MapReduce,spark,hive.....)提供数据存储服务。
hadoop生态圈.png

重点概念

数据切块、副本存放、元数据

2.HDFS的概念和特性

概念

  • 首先,它是个文件系统。用于存储文件,通过统一的命名空间——目录树来定位文件。
  • 其次,它是分布式的。由很多服务器联合起来实现其功能,集群中的服务器有各自的角色。

重要特性

  1. HDFS中的文件在物理上是分块存储(block),块的大小可以通过配置参数(dfs.blocksize)来规定,默认大小在hadoop2.x版本中是128M,老版本中是64M。
  2. HDFS文件系统会给客户端提供一个统一的抽象目录树,客户端通过路径来访问文件,形如:hdfs://namenode:port/dir-a/dir-b/dir-c/file.data
  3. 目录结构及文件分块信息(元信息)的管理由NameNode结点承担
    namenode是HDFS集群主节点,负责维护整个hdfs文件系统的目录树,以及每一个路径(文件)所对应的block块信息(block的id,及其所在的datanode服务器)
  4. 文件的各个block的存储管理由datanode结点承担。
    datanode是HDFS集群从结点,每一个block都可以在多个datanode上存储多个副本,副本数量也可以通过参数设置(dfs.replication)
    5.HDFS是设计成适应一次写入,多次读出的场景,且不支持文件的修改。
    注:适合用来做数据分析,并不适合用来做网盘应用,因为不便修改,延迟大,网络开销大,成本太高

图解HDFS

通过上面的描述,hdfs有很多特点:

  • 保存多个副本,且提供容错机制,副本丢失或宕机自动恢复。(默认存3份)
  • 运行在廉价的机器上
  • 适合大数据的处理。HDFS默认会将文件分割成block,在hadoop2.x以上版本默认128M为1个block。然后将block按照键值对的方式存储在HDFS上,并将键值对的映射存储到内存中。如果小文件太多,那内存的负担会很重。
    HDFS结构.png

如上图所示,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基础》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇基于JWT的Token登录认证Nginx反向代理WebSocket链接失败问题下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Spark 性能相关参数配置详解-任务调度篇

随着Spark的逐渐成熟完善, 越来越多的可配置参数被添加到Spark中来, 本文试图通过阐述这其中部分参数的工作原理和配置思路, 和大家一起探讨一下如何根据实际场合对Spark进行配置优化。 由于篇幅较长,所以在这里分篇组织,如果要看最新完整的网页版内容,可以戳这里:http://spark-config.readthedocs.org/,主要是便于...

Hadoop 部署之 Spark (六)

目录 一、Spark 是什么 二、Scala的安装(所有节点) 三、Spark 安装(所有节点) 1、下载安装 2、配置 Spark 环境变量 四、Spark 配置(namenode01) 1、配置 spark-env.sh 2、配置 slaves 3、配置文件同步到其他节点 4、启动 Spark 集群 五、检查 1、JPS 2、Spa...

Spark官方文档翻译(一)~Overview

Spark官方文档翻译,有问题请及时指正,谢谢。 Overview页 http://spark.apache.org/docs/latest/index.html Spark概述 Apache Spark 是一个快速的,分布式集群计算系统.它提供了高等级的针对 Java, Scala, Python and R的API接口, 他还是一个优秀的图处理引...

如何修改Hadoop的默认日志级别,还真是麻烦

鄙人使用的Hadoop版本为2.6.4。Hadoop的默认日志级别为INFO,对于百台以上的集群,如果文件操作频繁的话,NameNode会狂打日志,对性能会有一定的影响。 我们可以通过http://<namenode:50070>/logLevel在线修改NameNode的日志级别。如下所示: 但是,如果NameNode重启的话,又得重新设置...

元数据:描述数据的数据

元数据:描述数据的数据三类: 数据库元数据、参数元数据、结果集元数据1.数据库元数据 DataBaseMetaData Connection->DataBaseMertaData->. Class.forName(DRIVER); Connection connection = DriverManager.getConnection(UR...

Spark学习进度11-Spark Streaming&amp;amp;Structured Streaming

Spark Streaming Spark Streaming 介绍 批量计算  流计算 Spark Streaming 入门  Netcat 的使用  项目实例 目标:使用 Spark Streaming 程序和 Socket server 进行交互, 从 Server 处获取实时传输过来的字符串, 拆开单词并统计单词数量, 最后打印出来每一个小批...