Hadoop HDFS基础知识小结

HDFS

基本信息

什么是HDFS

Hadoop分布式文件系统,进行海量数据存储

设计思想

分而治之,将大文件切割成小文件,存放在大量的服务器上
###一些相关名词

  • 服务器(节点):服务器(一台没有显示器的主机,运行着很多服务【进程】,为客户端【任何一个使用者都可以理解为客户端】提供服务)
  • 集群:由很多台服务器组成的逻辑型的超级计算机
  • 文件切片:将大文件切分成一个个小的block块以进行存储(Hadoop2后默认一个block块128M,之前默认64M),若一个文件129M那么多出来的1M也是单独开一个block。(注:spark的并行度由block决定)
  • 文件目录树:hdfs文件系统会给我们提供一个统一的抽象文件目录树,客户端可以通过文件目录树进行访问HDFS里面的文件,形式是:hdfs://namenode:port/(根目录),文件目录树由namenode进程保存
  • 元数据:描述数据(真正存储到磁盘的数据)的数据(描述磁盘上存储的数据,隶属于什么…例如是存储到了那个表,什么数据库的)

重要特性

  1. HDFS物理存储是按照块进行存储的(block),(dfs.blocksize),默认大小,hadoop02:128M,老版本是64M
  2. hdfs文件系统会给我们提供一个统一的抽象文件目录树,客户端可以通过文件目录树进行访问HDFS里面的文件,形式是:hdfs://namenode:port/(根目录)
  3. 目录结构及文件分块位置信息(元数据)由namenode节点来掌管的,namenode也是集群的主节点,负责维护整个集群的文件目录树,以及每个路径(文件所在的位置)的block信息都要记录下来
  4. HDFS是适合一次写入,多次读取的场景,不支持文件的修改

HDFS核心概念

Hadoop是Master/Slave结构,大数据的框架基本都是(主从架构)(Master:namenode,Slave:datanode),namenode(主节点) namenode进程在哪台机器,哪台机器就是主节点
datanode(从节点)同理

  • namenode

    是Master节点,是大领导。管理数据块映射;处理客户端的读写请求;配置副本策略;管理HDFS的名称空间

    namenode存储的内容:

    文件路径(文件目录树):hdfs掌管的每一个文件的路径

    文件副本数:hdfs中每一个文件都有几个副本

    blockid:hdfs中的文件是需要切片的(默认:128M),记录一下每个文件的每一个数据切片分别存储到了那台机器

    注意:集群重启的话:namenode节点内存中只有,文件目录树、文件副本数,没有每个文件的切片在那台机器的信息(blockid)

  • datanode

    Slave节点,奴隶,干活的。负责存储client发来的数据块block;执行数据块的读写操作

    namenode存储的内容:
    datanode是真正掌管了切片文件的节点,知道每个切片是属于哪个文件的

Hadoop心跳机制(heartbeat)
  1. Master启动的时候,会启动一个进程间通信, 等待Slave连接
  2. 当连接成功了之后,datanode从节点要向主节点进行汇报(心跳),汇报我当前机器的block块是那个文件的、文件块是属于哪个数据范围的等等
  3. namenode主节点通过心跳机制能知道那个机器是存活的,从而响应客户端
  4. 如果长时间没有收到从节点汇报的心跳,那么就认为从节点宕机(宕机:当前机器不能对外提供服务)

HDFS的优缺点

优点
  1. 可构建廉价的机器上(因为要通过多个副本提高数据可用性(可靠性)),对于集群来说提高了整个系统的容错性
  2. 高容错性:数据自动保存多个副本,副本丢失后,能够自动恢复
  3. 适合批处理:计算方式是,移动的不是数据,移动的是计算程序(任务,job)
  4. 一次写入,多次读取,适合做数据分析
缺点
  1. 低延迟数据访问是不可以的(毫秒级别的,1秒级别)

  2. 文件不能随机修改(注意事项:一个文件同时只能有一个写者【一个客户端可以写】),但可进行文件覆盖,文件追加(不是每个版本都可以)。(注:不支持并发写入,但是支持并发的读)

  3. 小文件存储不允许

     why?
     文件目录树是存储在内存中的,每每增加一个文件时,block块会增加,元数据就会增加,文件目录树掌管的文件越多,那么消耗的内存也就越多,
     一个block(128m一个块)的元数据信息占150bytes内存,小文件的存储会大大消耗内存
    

HDFS的安全模式

安全模式有三种状态:active(可用模式)、standby(备用模式)、safemode(安全模式)

何时会出现safemode
  1. 集群重新启动的时候,一般会出现这个现象
  2. 集群中hdfs存储的文件大量丢失的时候,一般会出现这个状况
safemode的原理

namenode进程会自动检测看看自己文件的丢失程度,如果文件丢失的程度达到了一个阈值,那么就会安全模式

safemode何时会退出

namenode接收datanode汇报的信息,自己现在掌管的信息足够对外(客户端)提供文件读写需求了,那么安全模式退出

HDFS的副本存放策略

NameNode具有RackAware机架感知功能,这个可以配置

  • 若client为DataNode节点,那存储block时,规则为:副本1,同client的节点上;副本2,不同机架节点上;副本3,同第二个副本机架的另一个节点上;其他副本随机挑选。
  • 若client不为DataNode节点,那存储block时,规则为:副本1,随机选择一个节点上;副本2,不同副本1,机架上;副本3,同副本2相同的另一个节点上;其他副本随机挑选。

负载均衡

机器与机器之间的磁盘利用率出现不均衡的现象的解决方案,一般时候是集群机器扩容(增加新节点在集群中)

  • sbin/start-balancer.sh:能够让hdfs的文件自动进行负载均衡

  • sbin/start-balancer.sh -t 10%:这个命令中-t参数后面跟的是HDFS达到平衡状态的磁盘使用率偏差值。如果机器与机器之间磁盘使用率偏差小于10%,那么我们就认为HDFS集群已经达到了平衡的状态。

  • 脚本:控制负载均衡时网络传输数据的带宽(理论来说带宽越大,单位时间负载均衡的效果越好)

    带宽不能开的非常大,因为网络带宽传输速度有限的,datanode需要向客户端进行网络传输数据

HDFS的读写流程

写流程
  1. 使用hdfs提供的客户端(client)向远程的namenode发起请求(主要就是想让进程与进程之间通信,通过网络)
  2. namenode会检查当前的文件是否已经存在,创建者是否有权限执行操作,不可以的话,向客户端抛出异常
  3. namenode告诉客户端你有权限写数据了
  4. 客户端告诉namenode我想写第一个block块的数据
  5. namenode会找整个集群中比较空闲的节点,返回给客户端,通知写数据
  6. 客户端是要将切片文件分成一个一个的包,以队列的形式发送
  7. 发送之后,每个datanode节点之间建立连接,除了最后一个节点之外,每个节点把内存中的数据写到磁盘,同时发送给下一个datanode节点,默认三个副本,每个节点写完数据之后会像前一个节点发送ack确认(是否写数据成功了),默认的情况下,只要有一个节点写数据成功了,那么就算写数据成功了(默认三个副本,但是一个写成功了,意味着集群中只有一个副本,那么其它两个副本会怎么办呢?那么hdfs系统会自动复制)注: 如果三个节点都写数据失败了,怎么办? 返回到第4步,客户端重新向namenode要一个新的写的写数据的列表(datanode地址)
  8. 当最后block数据写完之后,客户端和namenode断开连接
    写操作
读流程
  1. 使用hdfs提供的客户端(client)向远程的namenode发起请求(主要就是想让进程与进程之间通信,通过网络)
  2. namenode会检查当前的文件是否已经存在,客户端是否有权限执行操作,不可以的话,向客户端抛出异常
  3. 客户端和namenode通信,我想读取一个block块,因为默认有三个副本,namenode要把三个副本的地址(哪台机器等信息)返回给客户端,客户端和datanode建立连接,之后直接读取数据,客户端读取数据之后要做校验,看看数据是否读取成功
  4. 当客户端最后一个block块读取成功之后,那么客户端和namenode断开连接
    读操作

HDFS常用命令

查看文件

  • hdfs dfs -ls path 查看文件列表

  • hdfs dfs (-lsr/-ls -R) path 递归查看文件列表

  • hdfs dfs -du path 查看path下的磁盘情况,单位字节

    E:hdfs dfs -ls /

创建文件夹

  • hdfs dfs -mkdir path(无法递归创建)

    E:hdfs dfs -mkdir /user/trunk

创建文件

  • hdfs dfs -touchz path(无法递归创建)

    E:hdfs dfs -touchz /user/test1.txt

复制文件和目录

  • hdfs dfs –cp 原目录 目标目录

    E:hdfs dfs -cp /user/testdir1 /user/testdir2

移动文件和目录

  • hdfs dfs -mv 原目录 目标目录

    E:hdfs dfs -mv /user/testdir1 /user/testdir2

赋予权限

  • hdfs dfs –chmod [权限参数][拥有者][:[组]] path

    E:hdfs dfs –chmod 777 /user/test.txt

上传文件

  • hdfs dfs - put 源文件夹 目标文件夹

    E:hdfs dfs -put /home/hadoop/data/record /guide/todayData 上传record整个文件夹(含文件夹)

下载文件

  • hdfs dfs -get 源文件夹 目标文件夹

查看文件内容

  • hadoop fs -cat path 从头查看这个文件

    E:hadoop fs -cat /user/trunk/test.txt

  • hadoop fs -tail path 从尾部查看最后1K字节

    E:hadoop fs -tail /user/trunk/test.txt

删除文件

  • hdfs dfs -rm 目标文件(只能用于删除文件)

    E:hdfs dfs -rm /user/test.txt 删除test.txt文件

  • hdfs dfs -rmr 目标文件 递归删除

    E:hdfs dfs -rmr /user/testdir 递归删除testdir文件夹及其内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值