探秘HDFS —— 发展历史、核心概念、架构、工作机制 (上)| 博文精选

戳蓝字“CSDN云计算”关注我们哦!

640?wx_fmt=jpeg

作者 |  Mr-Bruce
转自 | CSDN博客
责编 | 阿秃

几周前,笔者做了一个与HDFS有关的技术分享,以知识普及为目的,主要分享了Hadoop发展历史、HDFS核心概念、整体架构、工作机制等内容。本文大部分内容来自于当时的Slides,分上下两篇阐述。

HDFS,全称Hadoop Distributed File System,顾名思义,是Hadoop里面的分布式文件系统。在诸多大数据架构设计中,都能看到最底层是HDFS,用于数据的持久化。在Hadoop系统中(以2.7.3版本为例),HDFS只是其中一个组件,另外三个组件分别是:YARN,负责集群的资源管理;MapReduce,大数据计算引擎;Hadoop Common,相关公共库。从架构拆分和接口通用化的角度来看,这四个组件都设计的很好,尽管最近几年MapReduce逐渐被Spark、Flink这样综合型的内存型计算引擎替代,但是其他三个组件依然被广泛使用在各种业务场景。

640?wx_fmt=png

笔者所在的大数据项目主要使用Spark作为计算引擎,数据存放在AWS S3中,HDFS并没有被重度使用,主要用在以下三个场景,用来保证Spark Streaming处理过程中的数据完整性(不多、不少)。

  • 为了保证在处理过程中Crash后,程序能恢复起来继续处理,需要记录Spark Streaming Checkpoint数据;

  • 为了保证已经接收、尚未处理的数据不丢失,需要依靠Spark Streaming WAL机制,即将接收的数据持久化;

  • 为了保证一段时间内没有重复数据,需要记录历史数据的Hash值。

640?wx_fmt=png

因为HDFS并不是整个项目的核心,所以参照业界用法就去用了,也没有详细的研究。上线后一年半时间内,陆续发生了5个与HDFS相关的CASE,占了近一半。且不论是否应该在上述场景去用HDFS,就发生的问题来看,主要是因为我们当时对HDFS的认知不够。因此,这里跟大家分享些笔者当前对HDFS的部分认识,期望能帮助到同道中人。

Hadoop发展历史

在了解HDFS是什么、怎么工作之前,先来看看HDFS是在什么样的业务场景下被创造出来的。笔者这里整理了2012年之前Hadoop的发展历史,这一时间段也是Hadoop从萌生到飞速发展的阶段。要谈Hadoop的发展历史,就不得不提到一个人:Doug Cutting,他是Apache Lucene、Nutch、Hadoop、Avro的创始人,为Apache社区作出了重要贡献,目前在Cloudera担任首席架构师。有意思的是,Hadoop的名字,就是他以自己儿子的一个玩具名来命名的。

640?wx_fmt=png

阶段一:孵化

上个世纪90年代,互联网信息开始呈现爆炸式增长,“搜索”成为一个热门方向。1997年,Doug开始研发Lucene项目,一个全文搜索引擎库。比如,有100篇文章,给一个关键词“飞机”,从中搜索出包含关键词的文章。要实现这个功能,需要先将每篇文章分词,建立倒排索引,然后根据关键词来匹配打分,从而找出相关的文章。目前如日中天的Elasticsearch技术,便是基于Lucene来实现的,可见该项目的前瞻性与实用性。2001年,Doug将Lucene开源到Apache,之后很快成长为TOP项目。

2002年,Doug开始研发Nutch项目,用于爬取全网信息,然后用Lucene建立索引,从而提供互联网搜索。但是,单靠一台机器是无法处理全网信息的。于是,Doug开始研究如何利用多台机器协调起来同时处理,即分布式存储与计算技术。到2003年底,他实现了用四台机器来处理信息。但是,面对爆炸式的全网信息,四台机器还是太少了,而他的架构已经无法支持进一步扩展。就在Doug一筹莫展时,Google发表了论文Google File System,阐述了Google内部对分布式文件系统的理解和实现方式。

2004年,Doug根据GFS论文的指导,在Nutch项目中实现了DFS系统,这就是最早版的HDFS,只是当时叫NDFS。有了分布式存储系统后,Doug开始思考如何在这样的底层存储上来重构之前的计算引擎,而就在年底,Google又发表了MapReduce论文。2005年,Doug实现了Nutch MapReduce,并基于MapReduce对Nutch进行了重构。

阶段二:出世与成长

2006年,是Hadoop正式面世的一年。这一年,Doug将DFS和MapReduce从Nutch项目中剥离,组建了Hadoop项目。同年,Yahoo!开始全面转移到Hadoop阵地,并聘请Doug作为项目转型的架构师。到年底,Yahoo!的Hadoop集群达到了600台机器。

2007年,Twitter、Facebook、LinkedIn相继加入Hadoop阵营。同年底,Yahoo!的集群达到1000台机器。

2008年,是Hadoop发展很重要的一年。这一年,Hadoop成长为Apache Top项目,HBase、Hive、Pig、Zookepper等基于Hadoop的项目相继诞生,并贡献给开源社区,整个Hadoop的生态体系构成。同年,一个新兴的公司Cloudera成立,基于Hadoop提供专业的解决方案。

2009年,Amazon提供EMR云服务,用户不用担心机器的维护、扩展,只需要关注自己的业务(PS:笔者当前的大数据服务都是跑在EMR中的)。同年8月,Doug加入Cloudera。2011年,另一家公司Hortoworks成立,跟Cloudera一样,提供大数据解决方案。

阶段三:飞升

2012年,Hadoop迎来了一次大的改动,成为Hadoop v2。除了很多接口、内部实现的优化外,最重要的是两点:

  • 将YARN分拆出来,作为独立的资源管理模块;

  • 构建HDFS的HA和Federation解决方案,提高HDFS的高可用和扩展性。

到这一年底,Yahoo!的集群达到了42000台机器。2012年之后,到2016年,Hadoop平稳发展,被越来越多的公司引入使用。

640?wx_fmt=png

总结来说,Hadoop是由Doug创建,最初是为了解决全网信息爬取与处理的问题,后来被Yahoo!发扬光大,在全社区的贡献下迅速构建了自己的生态体系,对大数据处理的发展影响深远。值得一提的是,随着云存储和诸如Spark、Flink这样内存型计算引擎的快速发展,2016年之后,Hadoop开始逐渐走下坡路。

核心概念

HDFS有两个核心特征:分布式、文件系统。从文件系统的角度来看,HDFS提供了一个统一的命名空间——目录树来组织文件,其操作命令的形式跟Linux操作系统基本保持一致,比如下图中的"hdfs dfs -ls /"命令。目录树,是逻辑上的概念,用来屏蔽底层复杂的存储和相关操作的细节,让用户感觉像在操作本地文件系统一样。

从分布式的角度来看,一个文件可能会被切割成多个数据块,分散存储到多台机器上。数据块,是物理上的概念,决定了文件的具体存储形式。以下图为例,文件"7572c-4427-81e1-bd111c6f01720.parquet" 大约500MB,会被分割为4个Block(默认一个Block的大小为128MB),假设集群有2台机器,就会每台机器分配两个Block。另一方面,Hadoop在设计和使用上,有一个前提:允许集群中少量机器在某个时刻发生故障。为了达到这个目的,需要将文件拷贝多份放在不同的机器上,即Replica。比如,这里的2台机器,会分别备份另一台机器上的数据块(Replica设置为2)。

640?wx_fmt=png

为什么需要引入数据块?其实是我们常说的“分而治之”的思想。假设没有数据块,直接以整体的形式存储一个文件,就容易出现下面问题:

  • 集群中的机器使用不均匀。比如将一个20GB的文件完整存放到机器A上,势必会导致机器A的负载更重。

  • 故障恢复慢。对于一个20GB文件,如果所在的某台机器故障了,整个系统需要重新搬移数据,保持足够的Replica时,需要一次性移动20GB的数据,会带来较高的负载。

  • 无法并行加载文件。文件作为整体存储时,很难利用并行计算的优势来并行加载文件。

下图所示为一个数据块(Block)的相关信息,上面部分是在WebHDFS UI上看到的信息,下面部分是该数据块具体所在的机器上的信息。对于每一个数据块,都有一个映射关系:文件名称(包括路径) -> Block Id -> Block所在机器,这个关系对数据块的维护至关重要。

640?wx_fmt=png

架构

  

HDFS的架构,可以从两个角度来看:一个是由哪些组件构成,一个是组件之间如何通信。整个HDFS系统包含Client和Server两部分:Client是发起操作的一方,可以是HDFS自带的工具,也可以是通过API调用的程序(第三方库、业务程序等);Server是提供存储服务的一方,包括一个Name Node和多个Data Node。Name Node负责维护文件目录树、Block映射关系等元信息,Data Node负责具体的数据存储。综合来看,系统由三部分组成:Client、Name Node、Data Node。

这三个组件之间的通信关系,可以归纳为三方面:

  • Client向Name Node、Data Node发起通信。Client发起的文件操作主要为读、写、修改属性,这些操作都会先跟Name Node交互,拿到返回信息后根据情况向相应的Data Node发起交互。

  • Data Node向Name Node发起通信。Data Node会定期向Name Node发送Heartbeat、Block Report信息,Name Node收到后作出判断,并返回相关指令给Data Node,Data Node收到返回结果后,会根据情况做出进一步操作。Name Node不会主动向Data Node发起通信,只是被动地响应Data Node的通信。

  • Data Node之间的通信。Data Node之间在某些特定场景下会相互交互,比如写操作时的数据复制、节点均衡时的数据移动。

640?wx_fmt=png

  

这些通信关系是整个HDFS工作的核心,下一节笔者将进一步阐述在其之上的各种工作机制。

640?wx_fmt=png

扫描下方二维码,查看原博主精彩分享???

640?wx_fmt=jpeg


640?wx_fmt=png

福利
扫描添加小编微信,备注“姓名+公司职位”,入驻【CSDN博客】,加入【云计算学习交流群】,和志同道合的朋友们共同打卡学习!

640?wx_fmt=jpeg

推荐阅读:

  • 亚马逊消费者业务宣布永久关闭 Oracle 数据库,去O新进展;华为发布最新5G全系列解决方案;苹果正研究新设备“智能戒指”……
  • 当我们在聊 Serverless 时你应该知道这些 | CSDN博文精选
  • 只因写了一段爬虫,公司 200 多人被抓!

  • 确认!语音识别大牛Daniel Povey将入职小米,曾遭霍普金斯大学解雇,怒拒Facebook
  • 三年一跳槽、拒绝“唯学历”,火速 Get 这份程序员求生指南!

  • 最新报告:区块链应用程序交易量下降近40%,博彩类仍为最受欢迎项目……

    真香,朕在看了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/521209.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux CentOS7最小化安装环境静默安装Oracle11GR2数据库(配置数据库监听_09)

修改dbca.rsp响应文件中的重要参数 su - oracle cd response/ vim dbca.rsp本次安装过程中设置了下列参数:(注意下面参数视情况而定,不要照抄,原文件都有说明的) RESPONSEFILE_VERSION "11.2.0" #不能更改 OPERATION_TYPE "…

如何量化考核技术人的 KPI?

摘要: 为什么需要技术KPI? 在业务技术团队,有一个不好的趋势就是团队越来越业务,越来越没有技术味道。每个人都在谈业务,技术大会上在谈业务,周会上在聊业务,周报里写的是业务项目...... 唯独少…

pandas绘图_pandas与seaborn可视化对比小案例

Python网络爬虫与文本数据分析(视频课)之前分享过pandas也是可以作图的,今天复习一下pandas作图,并与seaborn做对比,熟悉下各自绘图的特点。导入用到的库import pandas as pdimport matplotlib.pyplot as pltimport seaborn as sns%matplotli…

docker安装zookeeper_Docker安装Zookeeper以及Zookeeper常用命令

Docker安装Zookeeper下载并运行$ docker search zookeeper # 查看一下镜像$ docker pull zookeeper:3.4.9 # 拉取指定版本zk镜像$ docker images # 查看image ID$ mkdir -p /root/docker/zookeeper/data $ docker run -d -p 2181:2181 -v /root/docker/zookeeper/data:/data/…

复杂 SQL 查询跑不动?DRDS 只读实例来解决!

摘要: 在实际业务生产环境中,业务应用系统在使用 OLTP 数据库将数据进行存储后,均会存在如后台运营类系统进行统计报表分析等场景的复杂 SQL 查询诉求。 背景 在实际业务生产环境中,业务应用系统在使用 OLTP 数据库将数据进行存储…

三年一跳槽、拒绝“唯学历”,火速 Get 这份程序员求生指南!

戳蓝字“CSDN云计算”关注我们哦!作者 | 郭芮责编 | 阿秃根据埃文斯数据公司(Evans Data Corporation)2019 最新统计的数据显示,2018 年全球共有 2300 万软件开发人员,预计到 2019 年底这个数字将达到 2640 万。但在这…

Oracle的instantClient的安装配置(都是64位)

背景:本地没有安装oracle客户端和服务端(最简单) 文章目录一、远程连接方案二、软件下载2.1. 官网下载instantclient2.2. 解压2.3. 位置前移2.4. 创建目录和监听文件2.5. 添加监听信息2.6. 设置以下环境变量2.7. plsql配置2.8. 重启启动一、远…

如何利用阿里视频云开源组件,快速自定义你的H5播放器?

摘要: Aliplayer希望提供一种方便、简单、灵活的机制,让客户能够扩展播放器的功能,并且Aliplayer提供一些组件的基本实现,用户可以基于这些开源的组件实现个性化功能,比如自定义UI和自己App server的交互等等&#xff…

vmware 蓝屏_网络安全小百科--利用微软CVE 2019-0708漏洞让对方系统蓝屏死机

漏洞背景:Windows 系列服务器于 2019 年 5 月 15 号,被爆出高危漏洞,该服务器漏洞利用方式是通过远程桌面端口3389进行攻击的。这个漏洞是今年来说危害严重性最大的漏洞,跟之前的永恒之蓝病毒差不多。2019年9月7日晚上凌晨 1 点左右&#xff…

instantclient使用步骤

1、 解压缩instantclient后(假定目录为:G:\instantclient_11_2_64) 把oracle安装目录下的G:\oracle\product\11.2.0\dbhome_1\NETWORK 文件夹复制到instantclient安装目录, 修改instantclient目录下的NETWORK\ADMIN\tnsnames.ora文…

NLP中的迁移学习

摘要: 迁移学习正在各个领域大展拳脚,NLP领域正在受到冲击! 在我们之前的文章中,我们展示了如何使用CNN与迁移学习为我们自己创建图片构建分类器。今天,我们介绍NLP中迁移学习的最新趋势,并尝试进行分类任…

Linux Shell脚本专栏_服务器系统配置初始化脚本_01

文章目录一、服务器系统配置初始化1. 设置时区并同步时间① 脚本编写②脚本说明2. 禁用selinux① 脚本编写②脚本说明3. 关闭防火墙① 脚本编写②脚本说明4. 历史命令显示操作时间① 脚本编写②脚本说明5. 禁止root远程登录① 脚本编写②脚本说明6. 禁止定时任务发送邮件① 脚本…

公文字体字号标准2020_手把手教你写公文——红头文件的制作技巧

前言:不管你是在行政部门、事业单位,国企,还是在私企,只要是在办公室工作,一定会接触到公文处理的相关事务。大家都知道,红头公文作为一种有法律效力的文书,其规范性尤为重要,而国家…

计算机专业的学生也太太太太太惨了吧?

戳蓝字“CSDN云计算”关注我们哦!作者 | 景岁责编 | 阿秃最近又到了开学季,又一群懵懂的大学新生怀着憧憬走进了校园,如果让学长学姐们用一个词给学弟学妹们形容自己的专业的话,有的也许是“忙碌”,有的也许是“充实”…

19个AI热门应用领域,你确定不了解一下?

摘要: 19个AI热门应用领域,你知道多少? 1. 自然语言生成(Natural Language Generation) 自然语言生成是人工智能的分支,研究如何将数据转化为文本,用于客户服务、报告生成以及市场概述。 2.语…

koa2 mysql增删改查_koa2对mongodb的增删改查

构建项目npm install -g koa-generatorkoa2 -e projectnamenpm install mongoose说明:我们用mongoose来操作mongodb,需要安装mongoose。生成项目后,在项目里新建一个文件夹dbs,用来存放和数据库相关的配置文件,配置文件…

人工智能的时代来了,新的商业机会在哪里?

摘要: 新的时代到来意味着新的商业社会的到来,那么这些新的商业机会在哪里呢? 提起人工智能,大多数人脑子里首先跳出的可能是这些问题,人工智能会使人类都失业吗?人工智能真的可以有自我意识以及情感吗&am…

python解析excel公式_[python][openpyxl]读取excel中公式的结果值

要读取cell中的值,但是,如果cell中的值是一个公式,则读取出来的是公式。有时候我们希望读取到公式计算出来的结果,可以使用load_workbook()中的data_only属性。 load_workbook()中涉及到的全部属性,其中,re…

Linux Shell脚本专栏_Linux系统发送告警邮件脚本_02

文章目录一、Linux系统发送告警邮件脚本1. 安装mailx工具2. 编辑mailx配置文件3. 追加以下内容4. 发送邮件测试二、异常汇总2.1. 异常信息2.2. 开启授权码一、Linux系统发送告警邮件脚本 背景:外部服务器 需求:1. 安装mailx工具2. 编辑mailx配置文件3. …

任正非采访的数据分析解读

戳蓝字“CSDN云计算”关注我们哦!作者 | 林骥责编 | 阿秃2019 年 5 月 21 日,任正非接受国内媒体的采访,如果用文字转述的话,总共大约有 2.2 万个字。本文总结了任正非在采访中说的一些数据,并做了简单的分析解读&…