hadoop的HDFS详解

一、HDFS的shell(命令行客户端)操作

常用命令参数介绍
-help             
功能:输出这个命令参数手册
-ls                  
功能:显示目录信息
示例: hadoop fs -ls hdfs://hadoop-server01:9000/
备注:这些参数中,所有的hdfs路径都可以简写
-->hadoop fs -ls /   等同于上一条命令的效果
-mkdir              
功能:在hdfs上创建目录
示例:hadoop fs  -mkdir  -p  /aaa/bbb/cc/dd
-moveFromLocal            
功能:从本地剪切粘贴到hdfs
示例:hadoop  fs  - moveFromLocal  /home/hadoop/a.txt  /aaa/bbb/cc/dd
-moveToLocal              
功能:从hdfs剪切粘贴到本地
示例:hadoop  fs  - moveToLocal   /aaa/bbb/cc/dd  /home/hadoop/a.txt 
--appendToFile  
功能:追加一个文件到已经存在的文件末尾
示例:hadoop  fs  -appendToFile  ./hello.txt  hdfs://hadoop-server01:9000/hello.txt
可以简写为:
Hadoop  fs  -appendToFile  ./hello.txt  /hello.txt
-cat  
功能:显示文件内容  
示例:hadoop fs -cat  /hello.txt   
-tail                 
功能:显示一个文件的末尾
示例:hadoop  fs  -tail  /weblog/access_log.1
-text                  
功能:以字符形式打印一个文件的内容
示例:hadoop  fs  -text  /weblog/access_log.1
-chgrp 
-chmod
-chown
功能:linux文件系统中的用法一样,对文件所属权限
示例:
hadoop  fs  -chmod  666  /hello.txt
hadoop  fs  -chown  someuser:somegrp   /hello.txt
-copyFromLocal    
功能:从本地文件系统中拷贝文件到hdfs路径去
示例:hadoop  fs  -copyFromLocal  ./jdk.tar.gz  /aaa/
-copyToLocal      
功能:从hdfs拷贝到本地
示例:hadoop fs -copyToLocal /aaa/jdk.tar.gz
-cp              
功能:从hdfs的一个路径拷贝hdfs的另一个路径
示例: hadoop  fs  -cp  /aaa/jdk.tar.gz  /bbb/jdk.tar.gz.2 
-mv                     
功能:在hdfs目录中移动文件
示例: hadoop  fs  -mv  /aaa/jdk.tar.gz  /
-get              
功能:等同于copyToLocal,就是从hdfs下载文件到本地
示例:hadoop fs -get  /aaa/jdk.tar.gz
-getmerge             
功能:合并下载多个文件
示例:比如hdfs的目录 /aaa/下有多个文件:log.1, log.2,log.3,...
hadoop fs -getmerge /aaa/log.* ./log.sum
-put                
功能:等同于copyFromLocal
示例:hadoop  fs  -put  /aaa/jdk.tar.gz  /bbb/jdk.tar.gz.2
-rm                
功能:删除文件或文件夹
示例:hadoop fs -rm -r /aaa/bbb/
-rmdir                 
功能:删除空目录
示例:hadoop  fs  -rmdir   /aaa/bbb/ccc
-df               
功能:统计文件系统的可用空间信息
示例:hadoop  fs  -df  -h  /   
-du 
功能:统计文件夹的大小信息
示例:
hadoop  fs  -du  -s  -h /aaa/*  
-count         
功能:统计一个指定目录下的文件节点数量
示例:hadoop fs -count /aaa/   
-setrep                
功能:设置hdfs中文件的副本数量
示例:hadoop fs -setrep 3 /aaa/jdk.tar.gz
<这里设置的副本数只是记录在namenode的元数据中,是否真的会有这么多副本,还得看datanode的数量>

二、hdfs的工作机制

1、概述

1.  HDFS集群分为两大角色:NameNode、DataNode  (Secondary Namenode)
2.  NameNode负责管理整个文件系统的元数据
3.  DataNode 负责管理用户的文件数据块
4.  文件会按照固定的大小(blocksize)切成若干块后分布式存储在若干台datanode上
5.  每一个文件块可以有多个副本,并存放在不同的datanode上
6.  Datanode会定期向Namenode汇报自身所保存的文件block信息,而namenode则会负责保持文
    件的副本数量
7.  HDFS的内部工作机制对客户端保持透明,客户端请求访问HDFS都是通过向namenode申请来进
    行

2、HDFS写数据的流程

2.1、概述

客户端要向HDFS写数据,首先要跟namenode通信以确认可以写文件并获得接收文件block的datanode,然后,客户端按顺序将文件逐个block传递给相应datanode,并由接收到block的datanode负责向其他datanode复制block的副本。

2.2、详细流程图

2.2、详细步骤解析

1、客户端有一个文件cls.avi,300M,客户端向namenode请求上传文件/aaa/cls.avi,namenode查询元数据,元数据要检查一下看有没有/aaa这个目录,没有就不让传,假设条件满足(有/aaa这个目录)
2、元数据就给客户端一个响应,说可以上传
3、rpc请求上传第一个block(0-128M),请返回哪几台datanode可以上传(namenode记录了这个集群里有哪些datanode,哪些在线,哪些已经死掉了,每一台datanode空间的大小,这是因为每一个datanode定期向namenode汇报它的信息)
4、假设返回dn1、dn3、dn4这3个datanode。考虑的因素有:空间、距离
客户端说要返回几个dn就返回几个dn
上传datanode的选择策略是:
第一个副本:先考虑跟客户端距离最近的,距离指的是客户端到datanode之间网络跳转的极速,如果在同一个机架(路由器)下面,它们的距离基本上是一样的,那这个时候就考虑空间,如果空间也都一样的话,那就随机了。
第二个副本:再考虑跨机架选择一个datanode增加副本的可靠性,因为副本主要是用来考虑安全的,如果在同一个机架上,如果机架断电,那么就都找不到了。
第三个副本:就在第一个副本同机架挑选另外一个datanode存放

一般公司1个机架就搞定了,几十台机器

5、客户端向datanode传数据流,在传之间要先建管道。先跟目标机器(dn1)请求建立一个通道channel,告诉dn1要传数据,同时还要传给dn3和dn4,dn1请求dn3建立一个通道,dn3请求dn4建立一个通道。

client---请求建立通道---->dn1----请求建立通道--->dn3---请求建立通道--------->dn4
                                                                          |                                                                                         |                                                                         |
|                                                                         |
|                                                                         |
|<-----应答成功------dn1<------应答成功-------dn3<------应答成功(准备好了)----                                      
6、管道建成之后开始传输,从客户端开始读文件(0-128M),然后向datanode里面写的,并不是把128M传到dn1成功了才往dn3、dn4复制的,而是以一个一个的小数据包(packet,一个packet有64k)为单位来写,先写进dn1的缓冲区,然后一边向dn1的block1的存储区写,一边向dn3的缓冲区复制,dn3的缓冲区一边向dn3的block1的存储区写,一边向dn4的缓冲区写,这样,block1的三个副本几乎同时传完。
7、每一个packet都有应答,上传成功了就返回上传成功了。block只要dn1上传成功了客户端就认为上传成功了,如果dn3、dn4没上传成功的话,没有关系,namenode最后会做异步的同步,会将dn1上面的block于dn3、dn4进行同步。如果dn1上传失败的话,就向namenode请求,说datanode1不行,请求再换一个datanode,这之后namenode就会几下datanode1这台机器有问题。

8、接下来客户端上传第二个block,这个时候会再次请求namenode,让namenode返回三个datanode,按照上面的原则再选。

9、namenode就记下了这个文件上传到哪个目录,上传了几个block,每个block的每个副本都在哪个dn上。当客户端读的时候就能够返回这些信息

3、HDFS读数据的流程

3.1 概述

客户端将要读取的文件路径发送给namenode,namenode获取文件的元信息(主要是block的存放位置信息)返回给客户端,客户端根据返回的信息找到相应datanode逐个获取文件的block并在客户端本地进行数据追加合并从而获得整个文件

3.2、详细步骤图

3.3、详细步骤解析

1、客户端跟namenode通信查询文件元数据,namenode返回要查询的文件的元数据信息(知道这个文件有几个block,分别在哪里,比如说文件有三个block)
2、根据返回的元数据信息,找到找到第一个block所在的datanode服务器
3、挑选一台datanode(就近原则,然后随机)服务器,请求读取数据
4、建立通道,传输数据(datanode是向通道里面拉取数据,客户端是向通道里面读取数据的)
5、第一个block传输完之后,按照上面的流程获取第二个block
6、获取到第二个block之后,将第二个block块追加到第一个block的末尾
7、再获取第三个block追加到文件的末尾,这样整个文件就获取到了

三、namenode的工作机制

1、namenode的职责

NAMENODE职责:
负责客户端请求的响应
元数据的管理(查询,修改)

2、元数据管理

每隔一段时间,会由secondary namenode将namenode上积累的所有edits和一个最新的fsimage下载到本地,并加载到内存进行merge(这个过程称为checkpoint)
日志文件是滚动的,一个正在写的,几个已经写好滚动的,checkpoint时把正在写的滚动一下,然后把fsimage和日志文件下载到secondary namenode机器,只有第一次才会下载fsimage,这时fsimage不会很大,以后就只下载日志文件



元数据信息首先存在内存里面,如果内存里存满的话, 定时dump到fsimage(整个内存里面元数据的镜像文件),内存里面所有的数据在fsimage里面都有,其实就是序列化到fsimage

当有元数据信息进行更新的时候,首先先在内存里面更新,然后在edits里面记录操作日志,这样即便当前的namenode挂了,也能通过操作日志和fsimage(里面存的是老数据)来得到全新的数据。
如果edits运行久了,里面就会有非常多的操作日志了,这样每次启动的时候加载edits就会加载很长时间,会启动的特别慢,这个时候怎么做呢,将edits和fsimage定期的合并,形成新的fsimage,这样遗留的edits日志就会非常的少。
1、secondary namenode和namenode之间会进行心跳通信,secondary namenode会向namenode请求是否要做checkpoint,当条件满足(比如,设置的定时时间达到了,或者edits里面日志的数量达到了),2、会请求做checkpoint,当执行了checkpoint 3、namenode滚动当前正在写的edits 4、然后将所有的日志文件,包括刚刚滚动出来的日志文件和fsimage下载到secondary namenode 
5、在secondary namenode上将日志文件和fsimage加载到secondary namenode的内存合并成更新后的元数据,6、将元数据dump成新的fsimage.chkpoint文件 7、将fsimage.chkpoint文件上传到namenode 8、将fsimage.chkpoint文件重命名成fsimage 9、当第二次再执行checkpoint的时候,只把edits文件下载到secondary namenode就行了(因为secondary namenode已经有fsimage文件了,namenode上的fsimage还是secondary namenode传过去的),这时候将edits和fsimage.chkpoint合并成最新的元数据信息,dump成fsimage.chkpoint,上传到namenode就行了。
edits和fsimage尽可能的追上内存中的数据


namenode对数据的管理采用了三种存储形式:
内存元数据(NameSystem)
磁盘元数据镜像文件
数据操作日志文件(可通过日志运算出元数据)

1

checkpoint操作的触发条件配置参数
dfs.namenode.checkpoint.check.period=60  #检查触发条件是否满足的频率,60秒
dfs.namenode.checkpoint.dir=file://${hadoop.tmp.dir}/dfs/namesecondary
#以上两个参数做checkpoint操作时,secondary namenode的本地工作目录
dfs.namenode.checkpoint.edits.dir=${dfs.namenode.checkpoint.dir}

dfs.namenode.checkpoint.max-retries=3  #最大重试次数
dfs.namenode.checkpoint.period=3600  #两次checkpoint之间的时间间隔3600秒
dfs.namenode.checkpoint.txns=1000000 #两次checkpoint之间最大的操作记录

2.1、

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容