文档章节

HDFS学习(一)架构和原理

dkpenl
 dkpenl
发布于 2017/08/24 23:08
字数 1108
阅读 501
收藏 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
博文 24
码字总数 30122
作品 0
成都
程序员
私信 提问
加载中

评论(0)

大数据经典学习路线(及供参考)之 一

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

柯西带你学编程
2018/05/22
0
0
大数据开发面试题详解:Hadoop的运行原理

hadoop的核心思想是MapReduce,但shuffle又是MapReduce的核心。shuffle的主要工作是从Map结束到Reduce开始之间的过程。 Hadoop不仅仅是大数据技术的核心重点,还是我们面试官面试的时候经常会...

osc_62egr8or
2019/01/03
9
0
深入浅出、点金赋能!Hadoop体系大数据开发案例实战

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

天善智能
2018/01/03
0
0
Hadoop组件----HDFS架构及原理

学习博客:https://blog.csdn.net/kezhong_wxl/article/details/76573901 官方文档:http://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html 一、介绍 DFS(......

osc_nnd0q3n4
2018/08/03
2
0
Hadoop2.X HA架构与部署

HDFS-HA原理及配置 1.HDFS-HA架构原理介绍   hadoop2.x之后,Clouera提出了QJM/Qurom Journal Manager,这是一个基于Paxos算法实现的HDFS HA方案,它给出了一种较好的解决思路和方案,示意图...

努力的凹凸曼
03/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

ThreadLocal

一、ThreadLocal简介   多线程访问同一个共享变量的时候容易出现并发问题,特别是多个线程对一个变量进行写入的时候,为了保证线程安全,一般使用者在访问共享变量的时候需要进行额外的同步...

architect刘源源
12分钟前
9
0
微信小程序客服会话卡片、自定义客服消息卡片

一、微信客服会话启用会话卡片 1. open-type="contact" 2. show-message-card =true 更多参考官方文档: https://developers.weixin.qq.com/miniprogram/dev/component/button.html 当前效果......

tianma3798
26分钟前
6
0
练习Linux常用命令

练习命令 Linux常用命令 Linux中一切皆文件,没有消息就是最好的消息 以下所有命令以centos7为基础, 网络相关配置 测试外网是否连通 安装网卡测试工具,即ifconfig程序 查看网卡 临时修改I...

千年典韦
28分钟前
10
0
从poison社网站爬取历代作品资料

使用的语言是python,爬取使用的代码包在我的主页有提供. 其中一些相关的数据设定如下(复制为data.py,然后运行主页提供的包的main.py): from mypython import *CODE = '4fjl_fjiepq24x' #...

setycyas
36分钟前
26
0
确定已安装的PowerShell版本 - Determine installed PowerShell version

问题: 如何确定计算机上安装了哪个版本的PowerShell,以及是否确实安装了该版本? 解决方案: 参考一: https://stackoom.com/question/7euv/确定已安装的PowerShell版本 参考二: https://...

技术盛宴
39分钟前
24
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部