文档章节

HDFS学习(一)架构和原理

dkpenl
 dkpenl
发布于 2017/08/24 23:08
字数 1108
阅读 49
收藏 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

没有更多内容

加载失败,请刷新页面

加载更多

mysql 数据类型及占用字节数

数字类型 TINYINT                           1 字节 SMALLINT                          2 个字节 MEDIUMINT                         3 个字节...

会游泳的鱼_
41分钟前
3
0
高性能mysql:创建高性能的索引

性能优化简介 MySQL性能定义为完成某件任务所需要的时间量度,换句话说,性能即响应时间,这是一个非常重要的原则。我们通过任务和时间而不是资源来测量性能。数据库服务器的目的是执行SQL语...

背后的辛酸
56分钟前
4
0
HTTP get、post 中请求json与map传参格式

import java.io.IOException;import java.net.URI;import java.net.URISyntaxException;import java.nio.charset.Charset;import java.util.ArrayList;import java.util.List;im......

寒风中的独狼
今天
3
0
IDEA中tomcat启动慢 耗时10分钟

用idea中的tomcat以debug模式启动,会非常的慢,而正常启动没啥问题;原因是debug模式中View Breakpoints断点代码,断点的是jar包,而现在启动由于jar包发生变化,导致启动时一直处于等待中。...

GoodMarver
今天
5
0
Linux学习-10月18(awk)

9.6/9.7 awk 一、awk简介   1. awk是一种编程语言,用于对文本和数据进行处理的   2. 具有强大的文本格式化能力   3. 利用命令awk,可以将一些文本整理成为我们想要的样子   4. 命令awk...

wxy丶
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部