HDFS深入浅析(2)

最全的Linux教程,Linux从入门到精通

======================

  1. linux从入门到精通(第2版)

  2. Linux系统移植

  3. Linux驱动开发入门与实战

  4. LINUX 系统移植 第2版

  5. Linux开源网络全栈详解 从DPDK到OpenFlow

华为18级工程师呕心沥血撰写3000页Linux学习笔记教程

第一份《Linux从入门到精通》466页

====================

内容简介

====

本书是获得了很多读者好评的Linux经典畅销书**《Linux从入门到精通》的第2版**。本书第1版出版后曾经多次印刷,并被51CTO读书频道评为“最受读者喜爱的原创IT技术图书奖”。本书第﹖版以最新的Ubuntu 12.04为版本,循序渐进地向读者介绍了Linux 的基础应用、系统管理、网络应用、娱乐和办公、程序开发、服务器配置、系统安全等。本书附带1张光盘,内容为本书配套多媒体教学视频。另外,本书还为读者提供了大量的Linux学习资料和Ubuntu安装镜像文件,供读者免费下载。

华为18级工程师呕心沥血撰写3000页Linux学习笔记教程

本书适合广大Linux初中级用户、开源软件爱好者和大专院校的学生阅读,同时也非常适合准备从事Linux平台开发的各类人员。

需要《Linux入门到精通》、《linux系统移植》、《Linux驱动开发入门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+评论

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

我们通过 hadoop shell上传的文件是存放在 DataNode的block中, 通过 linux shell是看 不到文件的,只能看到block。 可以一句话描述HDFS: 把客户端的大文件存放在很多节点的数据块中 。在这里,出现了三个关键词:文件、节点、数据块。HDFS就是围绕着这三个关键词设计的,我们在学习的时候也要紧抓住这三个关键词来学习。

三、 HDFS的基本结构之 NameNode

  1. 作用

NameNode的作用是 管理文件目录结构,接受用户的操作请求,是管理数据节点的。名字节点维护两套数据, 一套 是文件 目录与数据块之间的关系 , 另一套 是 数据块与节点之间的关系 。 前一套 数据是 静态的 ,是存放在磁盘上的, 通过fsimage和edits文件来维护 ; 后一套 数据是 动态的 ,不持久放到到磁盘的,每当集群启动的时候,会自动建立这些信息,所以一般都放在内存中。

所以他是整个文件系统的 管理节点。 它维护着整个文件系统的 文件目录树,文件/目录的 元信息和每个文件对应的 数据块列表。接收用户的操作请求 。

文件包括:

① fsimage (文件系统镜像):元数据镜像文件。存储某一时段NameNode内存 元数据信息。

② edits: 操作日志文件。

③ fstime: 保存最近一次checkpoint的时间

以上这些文件是保存在linux的文件系统中

2. 特点

<1>是一种允许文件 通过网络在多台主机上分享的文件系统,可让多机器上的多用户分享文件和存储空间。

<2>通透性。让实际上是通过网络来访问文件的动作,由程序与用户看来,就像是访问本地的磁盘一般。

<3>容错。即使系统中有某些节点脱机,整体来说系统仍然可以持续运作而不会有数据损失。

<4>适用于 一次写入、 多次查询的情况,不支持并发写情况,小文件不合适

3. 目录结构

<1>既然NameNode维护这么多的信息,那么 这些信息都存放在哪里呢?

在hadoop源代码中有个文件叫做 hdfs-default.xml

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

<2>打开这个文件

在第149行和第158行,有两个配置信息,一个是 dfs.name.dir, 另一个是dfs.name.edits.dir 。这两个文件表示的是 NameNode的核心文件fsimage和edits的存放位置,如下图所示

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在对应配置的value值有 ${},这是 变量的表示方式,ER表达式 ,在程序读取文件时,会把变量的值读取出来。那么,第150行的变量 hadoop.tmp.dir的值 (即hadoop临时存储路径),如下图所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

但是在我们在上一章的配置文件 core-site.xml中, 配置的值是/usr/local/hadoop/tmp。

<3>我们可以进入linux文件系统

执行命令 cd /usr/local/hadoop/conf,more core-site.xml 查看,如下图所示

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

可以看出,这 两个文件的存储位置 是在linux文件系统的/usr/local/hadoop/tmp/dfs/name目录下。

<4>我们进入这个目录

查看这个目录的内容,如下图所示

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

从图中可知,NameNode的核心文件 fsimage和 edits的存放在current目录下, 与此同时 name目录下有一个文件 in_use.lock 而查看其内容的时候发现,内容为空,也就是说只能有一个Namenode进程能够访问该目录,读者可以自己试一下,当没有开启hadoop时,该目录下是没有文件 in_use.lock 的,当hadoop启动以后才会生成该文件。

<5>文件 fsimage 是NameNode的核心文件

这个文件非常重要,丢失的话,Namenode无法使用, 那么如何防止该文件丢失而造成不良后果呢。我可以下再次看一下hdfs-default.xml中的一段代码,如下图所示

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

由其中的描述可知,该变量,决定DFS NameNode 的NameTable(fsimage)应该在本地文件系统上的存储位置。如果这是 一个用逗号分隔的列表的目录,那么nametable,会被复复制到所有的目录中,来冗余(备份来保证数据的安全性)。 如${hadoop.tmp.dir}/dfs/name,/name2,/name3,/name4。那么fsimage会分别复制到/name1,/name2,/name3,~/name4 目录中。所以这些目录一般是在不同的机器,不同的磁盘,不同的文件夹上,总之越分散越好,这样能保证数据的安全性。有人会问在多台机上怎么实现呢?其实在Linux中有nfs文件共享系统,这里不做详述。

<6>看一下edits的描述

查看一下 hdfs-default.xml 中的一段代码,如下图所示

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

由其中的描述可知,该变量,决定DFSNameNode的 存储事务文件(edits)在本地文件系统上的位置。 如果这是一个以逗号分隔的目录列表,那么,事务文件会被复制所有的目录中,来冗余。默认值是dfs.name.dir一样。(edit保存事务过程)

四、 HDFS的基本结构之 DataNode

1.作用

DataNode的作用是HDFS中真正存储数据的。

2. block

<1>如果一个文件非常大,比如100GB,那么怎么存储在DataNode中呢?DataNode在存储数据的时候是按照block为单位读写数据的。block是hdfs读写数据的基本单位。

<2>假设文件大小是100GB,从字节位置0开始,每64MB字节划分为一个block,依此类推,可以划分出很多的block。每个block就是64MB大小。

2.1 我们看一下 org.apache.hadoop.hdfs.protocol.Block类

这里面的属性有以下几个,下图所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

由上图可知,类中的属性没有一个是可以存储数据的。 所以block本质上是一个 逻辑概念,意味着block里面不会真正的存储数据,只是划分文件的。

2.2 为什么一定要划分为64MB大小呢?

因为这是在默认配置文件中设置的,我们查看 core-default.xml 文件,如下图所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

上图中的参数ds.block.name指的就是block的大小,值是67 108 864字节,可以换算为64MB。如果我们不希望使用64MB大小,可以在core-site.xml中覆盖该值。注意单位是字节。

2.3 副本

<1>副本就是备份,目的当时是为了 安全。 正是因为集群环境的 不可靠 ,所以才使用副本机制来保证数据的 安全性 。

<2>副本的缺点就是会占用大量的存储空间。副本越多,占用的空间越多。相比数据丢失的风险,存储空间的花费还是值得的。

<3>那么,一个文件有几个副本合适呢?我们查看hdfs-default.xml文件,如下图所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

从图4.3中可以看到,默认的副本数量是3。意味着HDFS中的每个数据块都有3份。当然,每一份肯定会尽力分配在不同的DataNode服务器中。试想:如果备份的3份数据都在同一台服务器上,那么这台服务器停机了,是不是所有的数据都丢了啊?

3. 目录结构

3.1 DataNode是按block来划分文件的

为了做好运维面试路上的助攻手,特整理了上百道 【运维技术栈面试题集锦】 ,让你面试不慌心不跳,高薪offer怀里抱!

这次整理的面试题,小到shell、MySQL,大到K8s等云原生技术栈,不仅适合运维新人入行面试需要,还适用于想提升进阶跳槽加薪的运维朋友。

本份面试集锦涵盖了

  • 174 道运维工程师面试题
  • 128道k8s面试题
  • 108道shell脚本面试题
  • 200道Linux面试题
  • 51道docker面试题
  • 35道Jenkis面试题
  • 78道MongoDB面试题
  • 17道ansible面试题
  • 60道dubbo面试题
  • 53道kafka面试
  • 18道mysql面试题
  • 40道nginx面试题
  • 77道redis面试题
  • 28道zookeeper

总计 1000+ 道面试题, 内容 又全含金量又高

  • 174道运维工程师面试题

1、什么是运维?

2、在工作中,运维人员经常需要跟运营人员打交道,请问运营人员是做什么工作的?

3、现在给你三百台服务器,你怎么对他们进行管理?

4、简述raid0 raid1raid5二种工作模式的工作原理及特点

5、LVS、Nginx、HAproxy有什么区别?工作中你怎么选择?

6、Squid、Varinsh和Nginx有什么区别,工作中你怎么选择?

7、Tomcat和Resin有什么区别,工作中你怎么选择?

8、什么是中间件?什么是jdk?

9、讲述一下Tomcat8005、8009、8080三个端口的含义?

10、什么叫CDN?

11、什么叫网站灰度发布?

12、简述DNS进行域名解析的过程?

13、RabbitMQ是什么东西?

14、讲一下Keepalived的工作原理?

15、讲述一下LVS三种模式的工作过程?

16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?

17、如何重置mysql root密码?

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?

17、如何重置mysql root密码?

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值