HDFS概述(一)

1. HDFS产出的背景及定义

1.1 HDFS产生的背景

随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统。HDFS只是分布式文件管理系统中的一种。

1.2 HDFS的定义

HDFS(Hadoop Distributed File System),它是一个文件系统,用于存储文件,通过目录树来定位文件;其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色。

HDFS的使用场景:适合一次写入,多次读出的场景,且不支持文件的修改。适合用来做数据分析,并不适合用来做网盘应用。

2. HDFS的优缺点

2.1 优点:

1). 高容错性

(1)数据自动保存多个副本,它通过增加数据副本的样式,提高容错性

(2)某一个数据副本丢失以后,它可以自动恢复

2) 适合处理大数据

(1)数据规模:能够处理规模达到GB、TB、甚至PB的级的大数据 ;

3) 可构建在廉价机器上,通过多副本机制,提高可靠性。

2.2 缺点

1)不适合低时延的数据访问;

2)无法高效的对大量小文件进行存储:

(1)存储大量小文件的话,它会占用NameNode大量的内存来存储文件的目录和块信息;

(2)小文件的存储的寻址时间超过了读取时间,违反了HDFS的设计目标。

3)不支持并发的写入、文件随机修改

(1)一个文件只能有一个写,不允许多个线程同时写;

(2)仅支持数据的append(追加),不支持文件的随机修改

3. HDFS的组成架构

3.1 整体架构图如下:

3.2 HDFS架构详解

1)NameNode(简称:ND):就是master,它是一个主管人员,负责管理HDFS的相关信息:

(1)管理HDFS的名称空间;

(2)管理副本的策略;

(3)管理数据块(Block)的映射信息;

(4)处理客户端的读写请求。

2)DataNode(简称:DN):就是slave,NameNode下达指令,DataNode执行实际的操作:

(1)存储实际的数据块;

(2)执行数据块的读/写操作。

3)Client:客户端,与NameNode交互的程序,职责或功能如下:

(1)文件切分:在上传文件至HDFS的时候,Client会将文件分切成一个个的Block上传;

(2)与NameNode交互,可以获取文件的位置信息(存在哪个节点上)

(3)Client可以通过一些命令来访问HDFS,比如增删改查操作;

(4)Client通过一些命令来管理HDFS,比如将NameNode格式化。

4)SecondaryNameNode:并非是NameNode的热备。当NameNode挂掉的时候,它并不会立即替换NameNode并提供服务。

(1)辅助NameNode,分担其工作量,比如定期合并FsImage和Edits(后边会讲到,这里不用理解),并将合并后的FsImage.checkPoint推送给NameNode;

(2)在紧急情况下可以辅助恢复NameNode。

4 HDFS的文件块大小

1)HDFS中的文件在物理上是按照块(Block)存储的,块id大小可以通过配置参数(dfs.blocksize)来规定,默认大小在Hadoop2.x的版本中是128M,老版本的是64M。

2)块的大小设定:文件的寻址时间应为块文件的传输时间的1%,这是比较合理的设定。

3)思考:为什么块的大小不能设置太小,也不能设置太大?

(1)HDFS的块如果设置的太小,会增加寻址时间,程序长时间在寻找块的存储位置;

(2)如果设置太大,从磁盘传输的时间会明显大于定位这个块的起始位置所需的时间。导致在处理这个块的数据时,浪费了大量的时间在IO上。

因此,块的大小可以根据数据量和磁盘的IO速度决定如何设置。

HDFS概述(一)的更多相关文章

  1. HDFS概述

    HDFS概述 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.HDFS产出背景及定义 1>.HDFS产生背景 随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配 ...

  2. HDFS概述和Shell操作

    大数据技术之Hadoop(HDFS) 第一章 HDFS概述 HDFS组成架构 HDFS文件块大小 第二章 HDFS的Shell操作(开发重点) 1.基本语法 bin/hadoop fs 具体命令    ...

  3. HDFS概述(6)————用户手册

    目的 本文档是使用Hadoop分布式文件系统(HDFS)作为Hadoop集群或独立通用分布式文件系统的一部分的用户的起点.虽然HDFS旨在在许多环境中"正常工作",但HDFS的工作 ...

  4. HDFS概述(5)————HDFS HA

    HA With QJM 目标 本指南概述了HDFS高可用性(HA)功能以及如何使用Quorum Journal Manager(QJM)功能配置和管理HA HDFS集群. 本文档假设读者对HDFS集群 ...

  5. HDFS概述(4)————HDFS权限

    概述 Hadoop分布式文件系统(HDFS)的权限模型与POSIX模型的文件和目录权限模型一致.每个文件和目录与所有者和组相关联.该文件或目录将权限划分为所有者的权限,作为该组成员的其他用户的权限.以 ...

  6. HDFS概述(3)————HDFS Federation

    本指南概述了HDFS Federation功能以及如何配置和管理联合集群. 当前HDFS背景 HDFS主要有两层: 1.Namespace (1)包含目录,文件和块. (2)它支持所有命名空间相关的文 ...

  7. HDFS概述(1)————HDFS架构

    概述 Hadoop分布式文件系统(HDFS)是一种分布式文件系统,用于在普通商用硬件上运行.它与现有的分布式文件系统有许多相似之处.然而,与其他分布式文件系统的区别很大.HDFS具有高度的容错能力,旨 ...

  8. HDFS概述(2)————Block块大小设置

    以下内容转自:http://blog.csdn.net/samhacker/article/details/23089157?utm_source=tuicool&utm_medium=ref ...

  9. Hadoop之HDFS概述

    一.HDFS产生背景及定义 1.HDFS产生背景 随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需要一种系统来管理多台机器上的文 ...

随机推荐

  1. 【Jenkins持续集成(二)】Windows上安装Jenkins教程

    一.前言 Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建.测试和部署软件. Jenkins 支持各种运行方式,可通过系统包.Docker 或者通过一个独立的 Java ...

  2. 洛谷 P3868 [TJOI2009]猜数字

    题意简述 给定\(a[1],a[2],\cdots,a[n]\) 和 \(b[1],b[2],\cdots,b[n]\),其中\(b\)中元素两两互素. 求最小的非负整数\(n\),满足对于任意的\( ...

  3. 单线程Redis性能为何如此之高?

    文章原创于公众号:程序猿周先森.本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号. 实际项目开发中现在无法逃避的一个问题就是缓存问题,而缓存问题也是面试必问知识点之一,如果面试官好一点可能会简单 ...

  4. Andorid监听SoftKeyboard弹起事件

    对于Android键盘事件Google并没有提供一个好的接口去监听它,有时候就为项目需要就必须要自己去想办法去监听,由于我最近也要实现登陆与注册的功能,我的想法很简单实现起来也比较容易,主要的原理是在 ...

  5. 【PCIE-1】---Pcie基本概念普及(扫盲篇--巨适合新手)

    PCIE由早期得PCI扩展衍生而来并且对兼容PCI,两者得主要区别在于并行到串行得切换,且速率更快.目前主板上越来越多得设备都挂载到PCI总线下面,甚至部分硬盘也会挂载PCI总线下面,可见PCIE得应 ...

  6. Java Map知识点

    1.遍历 java遍历Map的方式有多种,一下以代码示例来说明使用: Map<String, String> tmap = new HashMap<String, String> ...

  7. postman工具使用小结

    序言 现在,postman在做接口测试方面,发挥着越来越重大的作用,其支持多种请求方式.并可以模拟各种类型的数据请求类型,在实际开发中使用它可以极大的提高开发的效率. 安装postman 1.  安装 ...

  8. 【SQL server初级】SQL索引(一)

    SQL索引[一](此文章为“数据库性能优化二:数据库表优化”附属文章之一) SQL索引在数据库优化中占有一个非常大的比例, 一个好的索引的设计,可以让你的效率提高几十甚至几百倍,在这里将带你一步步揭开 ...

  9. Android开发——Kotlin开发APP使用笔记

    之前一直使用java来开发Android项目,学了新的kotlin语言,前来试一试,并说一下kotlin对Android的一些功能增强 创建项目 我使用的是Android Studio3.0+,所以默 ...

  10. 通过实例快速掌握k8s(Kubernetes)核心概念

    容器技术是微服务技术的核心技术之一,并随着微服务的流行而迅速成为主流.Docker是容器技术的先驱和奠基者,它出现之后迅速占领市场,几乎成了容器的代名词.但它在开始的时候并没有很好地解决容器的集群问题 ...