文档章节

HDFS学习(一)架构和原理

dkpenl
 dkpenl
发布于 2017/08/24 23:08
字数 1108
阅读 33
收藏 0

       hdfs是大数据系统的基础,它提供了基本的存储功能,由于底层数据的分布式存储,上层任务也可以利用数据的本地性进行分布式计算。hdfs思想上很简单,就是namenode负责数据存储位置的记录,datanode负责数据的存储。使用者client会先访问namenode询问数据存在哪,然后去datanode存储;写流程也基本类似,会先在namenode上询问写到哪,然后把数据存储到对应的datanode上。所以namenode作为整个系统的灵魂,一旦它挂掉了,整个系统也就无法使用了。在运维中,针对namenode的高可用变得十分关键。

一、HDFS设计目标

     A、Very large files

     B、Streaming data access

           ◦write-once, read-many-times

    C、Commodity hardware

   大致意思是说(英语太烂,翻译不好请见谅):当文件非常大,对文件操作需要的是一次写多次读取的操作模式,并且适合在商用硬件上做分布式存储和计算时,就用HDFS。

二、不适合的场景

    A、Low-latency data access

    B、Lots of small files

    C、Multiple writers, arbitrary file modifications

    大致意思是说:当我们的应用需要低延迟的访问数据(如:银行对实时交易数据的监控),当我们的文件都是大量的小文件时,当我们对文件多次读写频繁修改时,在这些场景下不适合使用HDFS。

三、基本原理

a、数据分布

     在Hadoop中,一个文件被划分成大小固定的多个文件块,分布的存储在集群中的节点中。假设有一个 600G的文件a.txt,由于我们的Hadoop默认一个块的大小是64M可修改HDFS的配置文件从而修改块的大小,在不同的场景下需要调整块的大小以达到优化的目的, 请大家在网上查阅相关资源,这里不再展开说明了。),故将这600G文件以64M为一块分别存储到所有的集群的主机上,这样我们的读取速度将会大大提高。

b、数据冗余

       同一个文件块在不同的节点中有多个副本,这样当集群里某一文件块损坏或者数据丢失时,会在另外一个节点得到补充。另外这些副本和原本都是在一个配置文件里配置的,Hadoop会根据配置信息自动寻找备份的内容块。比如下图我们通过HDFS的配置文件,将一个文件块保存3个副本,那么它将分别保存到3台服务器中。而且如果这3台服务器坏掉一个后,HDFS发现副本少于3个,那么它会自动在集群中(假设不只这3台服务器)的其它服务器中再创建一个副本。

c、文件信息的保存

    我们在HDFS中保存的一个文件,它分成了几块,每个块有几个副本,每个副本保存在什么位置,这些信息在HDFS中是通过namenode文件来保存的,如下图:

我们的a.txt文件分成了3块:part1、part2、part3,每个块分成了3个副本,副本的位置如dn1,dn2,dn3。我们对HDFS文件的读写,首先都是通过读取namenode文件中保存的这些信息,才知道从哪里读取文件,将文件写到哪里。

四、HDFS的架构

     HDFS的架构如下图所示,需要注意的是,我们对HDFS的读写都是通过了namenode,并且在hdoop1.0中namenode是单节点设计,一旦namenode节点的服务器无法访问,那么整个HDFS都无法使用,所以为了保证HDFS的可靠性,在hdoop2.0中做了namenode的HA,即HDFS可配置为多个。

五、总结

  Block:一个文件分块,默认64M,可配置大小。

  NameNode:保存整个文件系统的目录信息,文件信息以及文件相应的分块信息。

  DataNode:  用于存储Blocks

  HDFS的HA策略:NameNode一旦宕机,整个文件系统将无法工作。

                            如果NameNode中的数据丢失,整个文件系统也就丢失了。

                            2.x开始,HDFS支持NameNode的active-standy模式

                            NameNode HA:支持NameNode的active-standy模式

                            HDFS Federation:支持多个NameNode,分担数据压力

 

 

 

© 著作权归作者所有

共有 人打赏支持
dkpenl
粉丝 1
博文 11
码字总数 9873
作品 0
成都
程序员
深入浅出、点金赋能!Hadoop体系大数据开发案例实战

感谢关注天善智能,走好数据之路↑↑↑ 欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答、求职一站式搞定! 课程名称:深入浅出、点金赋...

天善智能
01/03
0
0
大数据经典学习路线(及供参考)之 一

1.Linux基础和分布式集群技术 学完此阶段可掌握的核心能力: 熟练使用Linux,熟练安装Linux上的软件,了解熟悉负载均衡、高可靠等集群相关概念,搭建互联网高并发、高可靠的服务架构; 学完此...

柯西带你学编程
05/22
0
0
当我说要做大数据工程师时他们都笑我,直到三个月后……

GitChat 作者:Fickr孫啟誠 原文: 三个月大数据研发学习计划实战解析 关注微信公众号:「GitChat 技术杂谈」 一本正经的讲技术 【不要错过文末彩蛋】 申明: 本文旨在为普通程序员(Java程序...

gitchat
2017/10/25
0
0
试用时间序列数据库InfluxDB

Hadoop集群监控需要使用时间序列数据库,今天花了半天时间调研使用了一下最近比较火的InfluxDB,发现还真是不错,记录一下学习心得。 Influx是用Go语言写的,专为时间序列数据持久化所开发的...

Slaytanic
2017/01/24
0
0
阿里年薪50WJAVA工程师转大数据学习路线!

大数据有两个方向,一个是偏计算机的,另一个是偏经济的。你学过Java,所以你可以偏将计算机的。 Java程序员想转大数据可行吗?Java是全世界使用人数最多的编程语言。不少程序员选择Java做为...

JAVA丶学习
04/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

qduoj~前端~二次开发~打包docker镜像并上传到阿里云容器镜像仓库

上一篇文章https://my.oschina.net/finchxu/blog/1930017记录了怎么在本地修改前端,现在我要把我的修改添加到部署到本地的前端的docker容器中,然后打包这个容器成为一个本地镜像,然后把这...

虚拟世界的懒猫
今天
1
0
UML中 的各种符号含义

Class Notation A class notation consists of three parts: Class Name The name of the class appears in the first partition. Class Attributes Attributes are shown in the second par......

hutaishi
今天
1
0
20180818 上课截图

小丑鱼00
今天
1
0
Springsecurity之SecurityContextHolderStrategy

注:下面分析的版本是spring-security-4.2.x,源码的github地址是: https://github.com/spring-projects/spring-security/tree/4.2.x 先上一张图: 图1 SecurityContextHolderStrategy的三个......

汉斯-冯-拉特
今天
1
0
LNMP架构(Nginx负载均衡、ssl原理、生成ssl密钥对、Nginx配置ssl)

Nginx负载均衡 网站的访问量越来越大,服务器的服务模式也得进行相应的升级,比如分离出数据库服务器、分离出图片作为单独服务,这些是简单的数据的负载均衡,将压力分散到不同的机器上。有时...

蛋黄_Yolks
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部