欢迎关注大数据系列课程

前言

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

分布式存储思想

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

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

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. 【前端必会】让ESLint与Prettier一起玩耍

    背景 上回说到ESlint和Prettier可能会有规则上的冲突,解决的办法有多种,好比不用Prettier 不用Prettier也是一种选择 配置相同的规则 我们选择一种可以共存的方式 可以参考这篇 ...

  2. 前端三件套 HTML+CSS+JS基础知识内容笔记

    HTML基础 目录 HTML基础 HTML5标签 doctype 标签 html标签 head标签 meta标签 title标签 body标签 文本和超链接标签 标题标签 段落标签 换行标签 水平标签 ...

  3. 页面导出Excel

    后端: 1.准备要导出的数据 2.利用XSSFWorkbook对象(workbook)创建工作簿行列等并添加数据 3.响应给前端 例: // 获取响应流 OutputStream output = r ...

  4. 把train数据集生成txt(test同理)

    import cv2 import numpy as np import os import sys import pickle data_dir = os.path.join("./&qu ...

  5. python基础-较复杂数据类型预览

    1.初识列表   列表就是队列:   列表是一种有序的,且内容可重复的数据类型:   用list代表列表,也可以用list()定义一个列表,同时定义列表可以直接使用 [ ]:   python中列表是 ...

  6. 服务器之Apollo单机部署(快速安装)

    部署Apollo apollo单机部署(快速安装) Apollo官网:https://www.apolloconfig.com/#/zh/deployment/quick-start-docker 官 ...

  7. win10设置或更改硬盘图标

    1.首先要找到".ico"的图标素材,存放在要更改图标的硬盘根目录,可命名为a.ico.图片素材大家可以去一些素材网找找,一般可以找到很多. 2.在该硬盘分区空白处鼠标右键新建一个 ...

  8. cmd复制移动合并文件

    1.单文件复制: (1)把c:\1.txt复制到c:\2\文件夹下 copy c:\1.txt c:\2\ (2)把c:\1.txt复制到c:\1\文件夹下,并把它修改为777.docx copy c ...

  9. Ansible 批处理实战

    软件简介 Ansible 是一款自动化运维工具,基于 Python 开发,集合了众多运维工具(puppet.chef.func.fabric)的优点,实现了批量系统配置.批量程序部署.批量运行命令等功 ...

  10. html小总结(哪些可以直接设置高度和宽度)

    (1)当然块级元素是可以直接设置高度和宽度的 块级元素:块级大多为结构性标记 div.h1~h6.ul.ol.dl.form.table.p.hr.pre.address.center.blockqu ...