HDFS概述和使用

14 篇文章 0 订阅
4 篇文章 0 订阅

目录

hdfs概述

NameNode与DataNode的作用

hdfs的副本机制与机架感知

hdfs的命令行使用

hdfs的高级使用命令

下一篇:HDFS基准测试、写入过程、读取过程、元数据管理


hdfs概述

分布式文件系统

跨机存储,统一管理(提供统一的访问接口)像普通文件系统一样使用分布式文件系统

 

应用场景

1、存储非常大的文件,几百m、g、TB,需要高吞吐量,对延时没有要求

2、流式数据访问:一次写入多次读取,数据集经常从数据源生成或拷贝一次,然后在其上做很多分析工作

 

3、每台主机不必太贵,节约成本

4、容错率高

5、扩展性强

 

不适合的场景

1、低延时的数据访问(毫秒级),为了大吞吐可能牺牲延时

2、大量小文件,因为元数据保存在NameNode的内存中,整个文件系统的文件数量受限于NameNode内存大小,经验上一个文件/目录/文件块一般占有150字节的内存空间,100万文件就是300m,数10亿级则难以支持

3、多放读写,需要任意的文件修改HDFS采用追加的方式写入,不支持文件任意offset(偏移量)的修改。不支持多个写入器

 

 

架构

由4部分组成

1、HDFS Client

文件切分,Client将文件切分成一个个的Block进行存储

与NameNode交互,获取文件位置信息

与DataNode交互,读取或写入数据

2、NameNode 就是master一个主管、管理者

管理HDFS的命名空间

管理数据块(Block)映射信息

配置副本策略

处理客户端读写请求

3、DataNode:就是slave NameNode下达命令,DataNode执行实际操作

存储实际的数据块

执行数据的读/写操作

4、Secondary NameNode:并非NameNode的热备。当NameNode挂掉的时候,它并不能马上替换NameNode并提供服务,只是个辅助作用

辅助NameNode,分担其工作量

定期合并fsimage和fsedits并推送给NameNode

在紧急情况下,可辅助恢复NameNode

NameNode与DataNode的作用

保存着整个文件系统的名称 空间和数据块的地址映射

整个HDFS可存储文件数量受限于NameNode内存的大小

 

当NameNode重启时内存中的数据不就没了?

NameNode的持久化机制

定期将元数据保存在两个文件中:fsimage(镜像文件)、edits(日志文件)

 

1、NameNode元数据信息

2、NameNode文件操作

3、NameNode副本

4、NameNode心跳机制

 

DataNode:

提供真实文件数据的存储服务

1、DataNode以数据块形式存储HDFS文件

2、响应HDFS客户端读写请求

3、周期性向NameNode汇报心跳信息

4、周期性向NameNode汇报数据块信息

5、周期性向NameNode汇报缓存数据块信息(为了提高访问速度会进行块缓存放入内存中)

hdfs的副本机制与机架感知

副本

由之前的hdfs配置文件定义

<!-- 文件切片的副本个数-->

<property>

<name>dfs.replication</name>

<value>2</value>

</property>

<!-- 设置一个文件切片的大小:128M-->

<property>

<name>dfs.blocksize</name>

<value>134217728</value>

</property>

 

机架感知:存数据时会看看在不在同一个机架

前两个副本在同一个机甲,在同一个机架读写会快一些

第三个副本防止前一个机架宕机

hdfs的命令行使用

命令开头都是hdfs dfs

1、hdfs dfs -ls URI

类似于ls命令显示文件列表

例:显示根目录

hdfs dfs -ls

 

2、-ls -R 递归显示

3、mkdir创建一个目录 -p递归创建

4、put可以上传文件也可以上传文件夹

格式-put <localsrc>(本地路径) …<dst>(目的路径)

 

5、moveFromLocal

从本地上传的HDFS,但是源文件会被删除

-moveFromLocal <localsrc>(本地路径) …<dst>(目的路径)

 

6、moveToLocal

还未实现

 

7、get

格式:-get [-ignorecrc](忽略CRC校验)  [-crc](使用CRC校验)  <src> <localdst>

还可以在web中操作

 

8、mv

格式:-mv URI <dest>

作用:将hdfs上的文件从原路径移动到目标路径(移动后文件删除),注意不能跨文件系统(不能本地到hdfs)

 

9、rm

格式 -rm [-r] [-skipTrash](跳过回收站) URI [URI…]

作用:删除参数指定的文件,可以有多个,只删除文件和非空目录

不用skipTrash就会放入回收站

删目录要加-r

回收站会在第一次执行删除命令后创建

 

10、cp

格式:-cp RUI [URL…] <dest>

将文件拷贝到目标路径,如果<dest> 为目录的话,可以将多个文件拷贝到该目录下

-f 若存在就覆盖

-p 深度拷贝:保留文件的属性(时间戳、所有权、许可、ACL、XAttr)

 

11、-cat URI [URI…]

作用:将参数所指示的文件内容输出到stdout

 

12、-chmod [-R] URI[URI…]

作用:改变文件权限  -R选项对整个目录递归修改

使用这一命令的用户必须是文件的所属用户,或者超级用户

 

13、-chown [-R] URI[URI…]

作用:改变文件的所属用户和用户组(linux下的用户与用户组),-R递归

使用者是文件所属用户或超级用户

例子:hdfs dfs -chown -R hadoop:hadoop /install.log

将这个文件所属改为hadoop组的hadoop用户

 

14、-appendToFile <localsrc> (注意是本地目录)….<dst>

作用:追加一个或者多个文件到hdfs指定文件中,也可以从命令行输入

例子:

 

 

补充:查看文件分片信息

hdfs dfs 路径 -files  -blocks locations

 

hdfs的高级使用命令

 

一、HDFS限额配置

作用限制用户的存储额度

1、查看配额信息

-count -q -h

示例:查看这个文件的限额

hdfs dfs -count -q -h /user/root/dir

这么写也可以hdfs dfs -count -q -h dir

因为默认命令路径就是/user/root

 

修改限额

2、数量限额

hdfs dfsadmin -setQuota 2 dir 给该文件夹下面设置最多上传两个文件,发现只能上传一个文件,因为该目录也算一个所以只能放n-1

修改后在查,就变了

如果上传了大于1个文件则会报错

-clrQuota /user/root/dir  清除文件数量限制

 

3、空间大小限额  

在设置空间配额时,设置的空间至少是block_size*n大小,n代表副本数

dfsadmin -setSpaceQuota 4k /user/root/dir

注意我们这是的block_size是128m当我们设置的大小是4k,当放入一个非常小的文件时

报错,这个文件再小也会被分作一个block

这里我们设置的副本数是2,所以会报256m一般副本数设置为奇数,方便纠错

 

清除空间限额

dfsadmin -clrSpaceQuota /user/root/dir2

 

例题:

现在假设有个文件大小为129m,副本数为3,现要装入这个文件,限额要配多少?

128*2*3=768m

129m多出来的1m也要占一个block

这里有个命令,可以生成指定大小的文件

dd if=/dev/zero of=1.txt bs=129M count=1

这个命令在当前目录生成了一个指定大小的文件

可以测试上面的例子

 

二、hdfs的安全模式

是一种保护机制,保证集群中的数据块的安全性,集群启动时,会首先进入安全模式,检查数据的完整性

会检查副本率(检查每个block的副本是否完整)

 

副本率=实际副本数/设置的副本数

假设现在,设置3个副本,启动只有两个

则2/3=0.66667…

hdfs默认副本率是0.999

显然达不到,只有副本率>0.999才完整

不完整就会到其他机器上拷贝一份,放在对应主机上

 

我们可以去官方文档看这个默认副本率

http://hadoop.apache.org/docs/r2.10.1/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml

ctrl+f搜safemode

 

这个是完整性检测后安全模式持续时间30s

安全模式下只能读,不能删改

当整系统达到安全标准时,HDFS自动离开安全模式

 

操作命令

dfsadmin -safemode get   查看安全模式状态

网页上也可以看

enter是进入安全模式

leave关闭安全模式

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值