欢迎关注大数据系列课程

前言

大家平时经常用的百度网盘存放电影、照片、文档等,那有想过百度网盘是如何存下那么多文件的呢?难到是用一台计算机器存的吗?那得多大磁盘啊?显然不是的,那本文就带大家揭秘。

分布式存储思想

既然一台机器的存储所需的磁盘有上限瓶颈,那么我们能否利用多台机器形成一个整体用来存储呢?这就是我们所说的分布式存储。

  • 单机纵向扩展:磁盘不够加磁盘,有上限瓶颈限制
  • 多机横向扩展:机器不够加机器,理论上无限扩展

Hadoop就是采用了这样的一个思想,设计出了分布式存储系统HDFS。

HDFS介绍和使用

HDFS(Hadoop Distributed File System ),意为:Hadoop分布式文件系统。它是Apache Hadoop核心组件之一,作为大数据生态圈最底层的分布式存储服务而存在。也可以说大数据首先要解决的问题就是海量数据的存储问题。

  • HDFS主要是解决大数据如何存储问题的。分布式意味着是HDFS是横跨在多台计算机上的存储系统。
  • HDFS是一种能够在普通硬件上运行的分布式文件系统,它是高度容错的,适应于具有大数据集的应用程序,它非常适于存储大型数据 (比如 TB 和 PB)。
  • HDFS使用多台计算机存储文件, 并且提供统一的访问接口, 像是访问一个普通文件系统一样使用分布式文件系统。

HDFS使用

HDFS安装好了,具体是如何使用呢,如何上传和下载文件呢?一共有两种方式,通过shell命令和web页面。

  1. shell命令操作HDFS

类似linux命令,可以直接通过在命令行界面操作。Hadoop提供了文件系统的shell命令行客户端: hadoop fs [generic options]

  • 创建文件夹

hadoop fs -mkdir [-p] <path> ...

path 为待创建的目录

-p 选项的行为与Unix mkdir -p非常相似,它会沿着路径创建父目录。

  • 查看指定目录下内容

hadoop fs -ls [-h] [-R] [<path> ...]

path 指定目录路径

-h 人性化显示文件size

-R 递归查看指定目录及其子目录

  • 上传文件到HDFS指定目录下

hadoop fs -put [-f] [-p] <localsrc> ... <dst>

-f 覆盖目标文件(已存在下)

-p 保留访问和修改时间,所有权和权限。

localsrc 本地文件系统(客户端所在机器)

dst 目标文件系统(HDFS)

hadoop fs -put zookeeper.out /alvin
hadoop fs -put file:///etc/profile hdfs://node1:8020/alvin
  • 查看HDFS文件内容

hadoop fs -cat <src> ...

读取指定文件全部内容,显示在标准输出控制台。

注意:对于大文件内容读取,慎重。

  • 下载HDFS文件

hadoop fs -get [-f] [-p] <src> ... <localdst>

下载文件到本地文件系统指定目录,localdst必须是目录

-f 覆盖目标文件(已存在下)

-p 保留访问和修改时间,所有权和权限。

更多命令可以查看官方文档

https://hadoop.apache.org/docs/r3.3.0/hadoop-project-dist/hadoop-common/FileSystemShell.html

2.web界面操作HDFS

另外一种更简单直观的方式是通过web界面操作HDFS,默认是50070端口,如下图所示:

HDFS的架构

HFDS采用分布式的架构,可能有成百上千的服务器组成,每一个组件都有可能出现故障。因此故障检测和自动快速恢复是HDFS的核心架构目标,下面是HDFS的官方架构图:

主从架构

HDFS集群是标准的master/slave主从架构集群,一般一个HDFS集群是有一个Namenode和一定数目的DataNode组成。

主角色:NameNode

  • NameNode是Hadoop分布式文件系统的核心,架构中的主角色。 
  • NameNode维护和管理文件系统元数据,包括名称空间目录树结构、文件和块的位置信息、访问权限等信息。 
  • 基于此,NameNode成为了访问HDFS的唯一入口。

从角色:DataNode

  • DataNode是Hadoop HDFS中的从角色,负责具体的数据块存储。 
  • DataNode的数量决定了HDFS集群的整体数据存储能力,通过和NameNode配合维护着数据块。

主角色辅助角色: SecondaryNameNode

此外,HDFS中还有一个SecondaryNameNode,虽然途中没有画出,那它有什么用呢?

  • Secondary NameNode充当NameNode的辅助节点,但不能替代NameNode。 
  • 主要是帮助主角色进行元数据文件的合并动作。可以通俗的理解为主角色的“秘书”。

分块存储

由于有的文件很大,一台机器也存不下,于是HDFS会对我们的文件做一个物理上的切割,也就是分块存储。

HDFS中的文件在物理上是分块存储(block)的,默认大小是128M(134217728),不足128M则本身就是一块。

副本机制

既然分布式存储海量数据,那么肯定需要成千上百的机器,这样很有可能其中一台机器宕机,出故障了怎么办呢?

当然HDFS也想到了解决方案,文件的所有block都会有副本。副本系数可以在文件创建的时候指定,也可以在之后通过命令改变。副本数由参数dfs.replication控制,默认值是3,也就是会额外再复制2份,连同本身总共3份副本,而且这个副本尽量会分散在不同的机架上,规避风险。

NameNode高可用

既然DataNode有副本,出现数据丢失可能性很小,那NameNode挂了不是照样凉凉?

不用担心,那我在启动一个NameNode备在那里不就行了吗。

存在两个 NameNode,一个是活动的 NameNode,称为 Active,另外一个是备用的 NameNode,称为 Standby。Active节点的数据通过JournalNode节点同步给Standby节点。 当 Active 节点出现问题时,需要将 Standby 节点切换为 Active 节点来为客户端提供服务,这样就保证了高可用。

元数据管理

前面提到NameNode中包含元数据,那么究竟具体是哪些内容呢?

在HDFS中,Namenode管理的元数据具有两种类型:

  • 文件自身属性信息

文件名称、权限,修改时间,文件大小,复制因子,数据块大小。

  • 文件块位置映射信息

记录文件块和DataNode之间的映射信息,即哪个块位于哪个节点上。

总结

现在你终于知道为什么百度网盘可以存下海量的数据了吧,主要采用的是分布式的存储,将数据分块多副本的方式存储到多个数据节点DataNode, 然后由唯一的NameNode节点去管理这个文件的信息,比如说它是在那些DataNode节点上,大小是多少等等,注意这里是DataNode主动告诉NameNode它这里有哪些文件块。

如果本文对你有帮助的话,请留下一个赞吧

欢迎关注个人公众号——JAVA旭阳

更多学习资料请移步:程序员成神之路

大数据HDFS凭啥能存下百亿数据?的更多相关文章

  1. Redis基本使用及百亿数据量中的使用技巧分享(附视频地址及观看指南)

    作者:依乐祝 原文地址:https://www.cnblogs.com/yilezhu/p/9941208.html 主讲人:大石头 时间:2018-11-10 晚上20:00 地点:钉钉群(组织代码 ...

  2. [翻译] C# 8.0 新特性 Redis基本使用及百亿数据量中的使用技巧分享(附视频地址及观看指南) 【由浅至深】redis 实现发布订阅的几种方式 .NET Core开发者的福音之玩转Redis的又一傻瓜式神器推荐

    [翻译] C# 8.0 新特性 2018-11-13 17:04 by Rwing, 1179 阅读, 24 评论, 收藏, 编辑 原文: Building C# 8.0[译注:原文主标题如此,但内容 ...

  3. 从SQL Server到MySQL,近百亿数据量迁移实战

    从SQL Server到MySQL,近百亿数据量迁移实战 狄敬超(3D) 2018-05-29 10:52:48 212 沪江成立于 2001 年,作为较早期的教育学习网站,当时技术选型范围并不大:J ...

  4. 掌握这些 Redis 技巧,百亿数据量不在话下!

    一.Redis封装架构讲解 实际上NewLife.Redis是一个完整的Redis协议功能的实现,但是Redis的核心功能并没有在这里面,而是在NewLife.Core里面. 这里可以打开看一下,Ne ...

  5. 百亿数据百亿花, 库若恒河沙复沙,Go lang1.18入门精炼教程,由白丁入鸿儒,Go lang数据库操作实践EP12

    Golang可以通过Gorm包来操作数据库,所谓ORM,即Object Relational Mapping(数据关系映射),说白了就是通过模式化的语法来操作数据库的行对象或者表对象,对比相对灵活繁复 ...

  6. 百亿级别数据量,又需要秒级响应的案例,需要什么系统支持呢?下面介绍下大数据实时分析工具Yonghong Z-Suite

    Yonghong Z-Suite 除了提供优秀的前端BI工具之外,Yonghong Z-Suite让用户可以选购分布式数据集市来支持实时大数据分析. 对于这种百亿级的大数据案例,Yonghong Z- ...

  7. "大中台、小前台”新架构下,阿里大数据接下来怎么玩? (2016-01-05 11:39:50)

    "大中台.小前台”新架构下,阿里大数据接下来怎么玩?_炬鼎力_新浪博客 http://blog.sina.com.cn/s/blog_1427354e00102vzyq.html " ...

  8. 大数据HDFS相关的一些运维题

    1.在 HDFS 文件系统的根目录下创建递归目录“1daoyun/file”,将附件中的BigDataSkills.txt 文件,上传到 1daoyun/file 目录中,使用相关命令查看文件系统中 ...

  9. 入门大数据---HDFS,Zookeeper,ZookeeperFailOverController(简称:ZKFC),JournalNode是什么?

    HDFS介绍: 简述: Hadoop Distributed File System(HDFS)是一种分布式文件系统,设计用于在商用硬件上运行.它与现有的分布式文件系统有许多相似之处.但是,与其他分布 ...

  10. EasyUI 1.4.4 DataGrid(大数据量) bufferview滚动时不加载下一页数据解决方案

    在使用Easyui DataGrid 过程中,发现若单页数据量超过300,IE浏览器加载速度很慢.也通过网上找寻了很多解决方案,最典型的就是去掉datagrid的自动列宽以及自动行高判断. 1.解决自 ...

随机推荐

  1. Portainer安装,配置自定义镜像仓库拉取镜像

    Portainer介绍 Portainer是Docker的图形化管理工具,提供状态显示面板.应用模板快速部署.容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作).事件日志显示.容器控制台 ...

  2. Java基础之变量

    Java基础之变量 目录 Java基础之变量 1.变量概述 1.1 为什么需要变量 1.2 简单理解 1.3 变量使用注意事项 1.4 程序中+号的使用 1.5 Java数据类型 1.6 整数类型 1 ...

  3. 记一次 .NET 某工控视觉软件 非托管泄漏分析

    一:背景 1.讲故事 最近分享了好几篇关于 非托管内存泄漏 的文章,有时候就是这么神奇,来求助的都是这类型的dump,一饮一啄,莫非前定.让我被迫加深对 NT堆, 页堆 的理解,这一篇就给大家再带来一 ...

  4. Docker安装MongoDB并使用Navicat连接

    MongoDB简介: MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案.是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库 ...

  5. 第三方库openPyxl读取excel文件

    import openpyxl from openpyxl.worksheet.worksheet import Worksheet def openpyxl_read(): #1.打开文件 work ...

  6. 禁忌搜索算法TSA 旅行商问题TSP python

    import math import random import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot ...

  7. day52-正则表达式03

    正则表达式03 5.6正则表达式三个常用类 java.util.regex 包主要包括以下三个类:Pattern类.Matcher类和PatternSyntaxException类 Pattern类 ...

  8. LcdToos如何在线调屏PORCH参数

    在点屏过程中,我们会经常碰到画面对不齐现象,在这种情况下需要多次尝试修调屏的PORCH参数来使画面显示正常:通常的做法是修改完PORCH参数下载到PG,点亮看效果,这种方法无疑效率很低,对于现象的表现 ...

  9. Ruoyi表单构建

    Ruoyi表单构建通过拖动组件就能自动生成前端代码,很方便,所以本文简单通过上层函数源码来梳理一下大致流程,如有需要再自行仔细一行行分析底层代码. 组件拖动 实现组件拖动功能主要依赖第三方库:VueD ...

  10. EasyPoi大数据导入导出百万级实例

    EasyPoi介绍: 利用注解的方式简化了Excel.Word.PDF等格式的导入导出,而且是百万级数据的导入导出.EasyPoi官方网址:EasyPoi教程_V1.0 (mydoc.io).下面我写 ...