Hadoop HDFS特性和基本操作(hadoop离线-03)

本文重点

理解分布式文件存储的概念与实现
掌握HDFS分块存储、副本机制等特性
学会shell操作HDFS
掌握HDFS读写流程
理解NameNode元数据管理机制
理解SecondaryNameNode checkpoint机制

内容大纲

#HDFS入门
	HDFS介绍
	如何模拟实现分布式文件存储系统 具备哪些特性。
		分布式、分块存储、副本机制、元数据管理
	HDFS设计目标和重要特性
#HDFS操作
	shell command
#HDFS原理重中之重
	工作机制--读写流程  角色之间如何配合的 每个角色承担了什么职责
	NN DN角色职责概述总结
#HDFS辅助功能
	distcp 跨集群复制数据 
	Archive 归档文件  处理小文件
	Snapshot 快照
#HDFS元数据管理机制
	namenode如何管理元数据
	secondarynamenode职责
		checkpoint机制
#HDFS安全模式

#理清两个东西  数据data 元数据metadata

一、Apache HDFS入门

1.1、HDFS基本概念
  • 首先是一个文件系统就是用来存储文件、存储数据。是大数据最底层一个服务。
  • 其次是一个分布式的文件系统。分布式意味着多台机器存储。

如何模拟实现分布式文件系统。

或者说一个成熟的分布式文件系统应该要具备哪些属性、功能呢

  • 分布式多台机器存储
  • 记录元数据
  • 分块存储
  • 副本机制备份
1.2、Hadoop团队针对HDFS设计目标
  • 具备故障检测和快速恢复的能力容错
  • 面对海量数据的存储注重吞吐能力而不是交互式。延迟高
  • 支持大文件存储越大越开心
  • 一次写入多次读取模型 不支持修改操作
  • 异构存储、可移植性

在这里插入图片描述

  • master|slaves 主从架构

    主角色namenode  管理维护着元数据目录树结构 文件 大小 副本 备份 位置信息
    从角色datanode  存储着最终的数据块
    
  • 分块存储

    物理上把文件分开了。
    
    block size =128M  134217728   hadoop2.x (hadoop1.x 64M)
    
    e.g:
    	1.txt 300M
    		blk-1  0--128
    		blk-2  128-256
    		blk-3  256-300
    	
    	2.txt 100M
    		blk-4  0--100
    
  • 副本机制

    默认是3副本。
    
    1+2=3  本身一份 额外两份 最终3副本。
    
  • namespace 名字空间 命名空间

    #namespace即“命名空间”也称“名称空间” 
    
    层次感结构  兼顾传统对应文件系统的认知  目录树结构
    用户可以针对目录树进行文件夹、文件的增删改查。
    统一的抽象目录树。
    
  • metadata 元数据

    元数据记录数据的数据 描述性数据、解释性数据
    
    对于HDFS来说目录结构及文件分块位置信息叫做元数据。
    元数据是有namenode维护的。
    
  • write one read many

    hdfs的模式是一次写入多次读取  
    hdfs没有随机修改编辑的操作  只能对已有的数据进行追加。
    设计目标是这么决定的。
    
    侧重于数据吞吐量 不注重实时交互性  意味着hdfs操作延迟很高。
    

二、HDFS shell操作

2.1、shell 命令解释
hadoop  fs <args>  文件系统的路径

#hadoop  fs可以操作的文件系统不仅仅有HDFS,还包括本地文件系统、GFS、TFS。
#如何区分操作访问的是什么文件系统呢  根据文件系统协议

hadoop fs -ls hdfs://node1:8020/

hadoop fs -ls file:///
hadoop fs -ls gfs://

#如果不写协议 直接/目录 操作访问的是谁
[root@node1 ~]# hadoop fs -ls /
Found 3 items
drwxr-xr-x   - root supergroup          0 2023-02-01 21:26 /itcast
drwx------   - root supergroup          0 2023-01-31 15:03 /tmp
drwxr-xr-x   - root supergroup          0 2023-01-31 15:03 /user

#默认是谁取决于参数fs.defaultFS
<property>
        <name>fs.defaultFS</name>
        <value>hdfs://node1:8020</value>
</property>

#如果fs.defaultFS没有配置  默认的是file:///

#新旧命令  推荐使用hadoop fs
hadoop fs <args> = hdfs dfs <args>
2.2、shell常见命令操作
# 查看指定目录下信息
hadoop fs -ls [-h] [-R] <args>
	-h 人性化显示(更容易阅读)
	-R 递归显示

#创建文件夹
hadoop fs -mkdir [-p] <paths>
	-p 创建父目录
	
#上传文件
hadoop fs -put src  dst
将单个 src 或多个 srcs 从本地文件系统复制到目标文件系统
	#src代表的是本地目录 所谓的本地指的是客户端所在的机器 
	#dst代表的是HDFS
	-p保留访问和修改时间所有权和权限。
	-f覆盖目的地如果已经存在
	
hadoop fs -put file:///root/itcast.txt hdfs://node1:8020/itcast	

hadoop fs -put itcast.txt /itcast

#下载文件
hadoop fs -get  src  localdst
	#将文件复制到本地文件系统。
hadoop fs -get hdfs://node1:8020/itcast/itcast.txt file:///root/
hadoop fs -get /itcast/itcast.txt ./

#追加内容到文件尾部 appendToFile
[root@node3 ~]# echo 1 >> 1.txt
[root@node3 ~]# echo 2 >> 2.txt 
[root@node3 ~]# echo 3 >> 3.txt 
[root@node3 ~]# hadoop fs -put 1.txt /
[root@node3 ~]# hadoop fs -cat /1.txt
1
[root@node3 ~]# hadoop fs -appendToFile 2.txt 3.txt /1.txt
[root@node3 ~]# hadoop fs -cat /1.txt
1
2
3
 
#追加的用途把本地的小文件上传中合并成为大文件 解决小文件场景的。

#文件内容的查看
cat 适合小文件
tail 将文件的最后一千字节内容显示到stdout  -f参数支持实时追踪查看

#权限 拥有者 所属组修改

	hdfs在设计的时候 借鉴模仿着linux权限管理模式
	也有所谓的读写执行 user group others  777
chgrp  修改所属组
chmod  修改权限
chown  修改拥有者

hadoop fs -chmod 755 /1.txt

#文件移动 复制 删除
mv cp 
rm -r递归删除 


#合并下载 getmerge
合并下载多个文件  其功能和appendToFile相反的动作
[root@node3 ~]# hadoop fs -mkdir /small
[root@node3 ~]# hadoop fs -put *.txt /small
[root@node3 ~]# hadoop fs -getmerge /small/* ./merge.txt
[root@node3 ~]# cat merge.txt 

#统计HDFS可用空间  指定目录大小
[root@node3 ~]# hadoop fs -df -h /
Filesystem            Size   Used  Available  Use%
hdfs://node1:8020  111.1 G  5.0 M     98.3 G    0%

#修改文件的副本数
hadoop fs -setrep -w N -R   N就是修改之后的副本数
-w wait等待 修改副本客户端是否等待修改完毕再推出

[root@node3 ~]# hadoop fs -setrep 2 /small/1.txt
Replication 2 set: /small/1.txt

[root@node3 ~]# hadoop fs -setrep -w 2 /small/2.txt
Replication 2 set: /small/2.txt
Waiting for /small/2.txt ...
WARNING: the waiting time may be long for DECREASING the number of replications.
. done

#企业中避免使用setrep修改文件的副本数。
副本的修改操作可能会影响hdfs正常的读写服务请求。
因此在实际工作中 事先根据数据的重要性在上传之前就决定该文件的备份数是多少 避免线上修改。

三、HDFS工作机制

3.1、namenode、datanode职责
  • namenode 管理元数据 维护namespace

在这里插入图片描述

  • datanode 管理数据

在这里插入图片描述

3.2、读写流程图
  • 上传文件写数据流程

在这里插入图片描述

  • HDFS默认3副本机制

在这里插入图片描述

  • 下载文件读数据流程

在这里插入图片描述

3.3、NameNode与DataNode通信机制
  • dn启动时

    #datanode向nameNode进行注册 并行汇报自己持有数据块信息
    
    注册表示自己启动成功 汇报是高速namenode自己保存了哪些数据块
    
  • dn后续工作时

    #心跳机制
    datanode每隔3S向namenode进行心跳 目的:报活   dfs.heartbeat.interval
    
    #数据块汇报机制 blockreport
    datanode每隔6小时向nameNode进行数据块汇报自己数据块信息 dfs.blockreport.intervalMsec
    

四、HDFS辅助工具

4.1、跨集群复制数据 distcpdistributed copy
  • 功能实现在不同的hadoop集群之间进行数据复制同步。

  • 用法

    #同一个集群内 复制操作
    hadoop fs -cp /zookeeper.out /itcast
    
    #跨集群复制操作
    hadoop distcp hdfs://node1:8020/1.txt  hdfs:node5:8020/itcast
    
4.2、文件归档工具 archive
  • 背景

    hdfs的架构设计不适合小文件存储的。
    因为小文件不管多小 都需要一定的元数据记录它 元数据保存在内存中的
    如果集群小文件过多 就会造成内存被撑爆。 俗称 小文件吃内存。
    
  • archive功能

    • 将一批小文件归档一个档案文件。
    • 底层是通过MapReduce程序将小文件进行合并的。启动yarn集群执行mr程序
    • 企业中可以根据时间 定时进行归档比如一周创建一个档案。
  • 使用

    #创建档案
    hadoop archive -archiveName test.har -p /small /outputdir
    
    基于自己的需求 删除小文件 减少对内存的消耗
    hadoop fs -rm /small/*
    
    #查看档案文件 --归档之后的样子
    [root@node1 ~]# hadoop fs -ls hdfs://node1:8020/outputdir/test.har
    Found 4 items
    hdfs://node1:8020/outputdir/test.har/_SUCCESS
    hdfs://node1:8020/outputdir/test.har/_index
    hdfs://node1:8020/outputdir/test.har/_masterindex
    hdfs://node1:8020/outputdir/test.har/part-0
    
    #查看档案文件 --归档之前的样子
    [root@node1 ~]# hadoop fs -ls har://hdfs-node1:8020/outputdir/test.har
    Found 3 items
     har://hdfs-node1:8020/outputdir/test.har/1.txt
     har://hdfs-node1:8020/outputdir/test.har/2.txt
     har://hdfs-node1:8020/outputdir/test.har/3.txt
    
    #从档案文件中提取文件
    [root@node1 ~]# hadoop fs -cp har://hdfs-node1:8020/outputdir/test.har/* /small/
    [root@node1 ~]# hadoop fs -ls /small
    Found 3 items
    -rw-r--r--   3 root supergroup          2 2023-02-04 00:48 /small/1.txt
    -rw-r--r--   3 root supergroup          2 2023-02-04 00:48 /small/2.txt
    -rw-r--r--   3 root supergroup          2 2023-02-04 00:48 /small/3.txt
    
  • 注意

    • archive没有压缩的功能 就是简单的合二为一的操作 减少小文件个数

五、HDFS namenode元数据管理机制

5.1、namenode元数据
  • 元数据是什么

    元数据Metadata又称中介数据、中继数据为描述数据的数据data about data主要是描述数据属性property的信息用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。
    
    #记录数据的数据 描述数据的数据
    
  • hdfs中元数据指的是什么

    • 文件系统的元数据namespace、块的位置
    • datanodes状态信息健康、磁盘使用率
  • 回想首次启动HDFS集群的时候 进行format操作

    • 本质就是初始化操作 初始化namenode工作目录和元数据文件。

    • 元数据存储的目录由参数dfs.namenode.name.dir决定 在NN部署机器的本地linux文件系统中

      针对课程环境 最终目录
      
      /export/data/hadoopdata/dfs/name
      
5.2、secondarynamenode功能职责
  • 要想成为namenode的备份 需要具备两个东西
    • 数据状态要和namenode保持一致。
    • 承担和namenode一样的职责
  • secondarynamenode根本不是namenode的备份其主要职责帮助nameNode进行元数据的合并

六、HDFS 安全模式

  • 安全模式safe mode是HDFS集群处于一种保护状态文件系统只可以读不可以写

  • 安全模式如何进入离开的

    • 自动进入离开

      #在HDFS集群刚启动时候 会自动进入 
      
      #step1启动namenode
      hadoop-daemon.sh start namenode
      
      #step2: 执行事务性操作 报错
      [root@node1 ~]# hadoop fs -mkdir /aaaa
      mkdir: Cannot create directory /aaaa. Name node is in safe mode.
      
      Safe mode is ON. The reported blocks 0 needs additional 52 blocks to reach the threshold 0.9990 of total blocks 52. The number of live datanodes 0 has reached the minimum number 0. Safe mode will be turned off automatically once the thresholds have been reached.
      
      #1、条件1:已经汇报的block达到总数据块的 0.999
      #2、条件2:存活的dn数量大于等于0  说明这个条件不严格
      
      
      #step3:依次手动启动datanode
      hadoop-daemon.sh start datanode
      
      Safe mode is ON. The reported blocks 52 has reached the threshold 0.9990 of total blocks 52. The number of live datanodes 2 has reached the minimum number 0. In safe mode extension. Safe mode will be turned off automatically in 25 seconds.
      #3、条件3:满足12条件的情况下 持续30s 结束自动离开安全模式
      
      Safemode is off.
      
      
      #为什么集群刚启动的时候 要进入安全模式 
      文件系统元数据不完整 无法对外提供可高的文件服务  属于内部的元数据汇报、校验、构建的过程。
      
      
    • 手动进入离开

      hdfs dfsadmin -safemode enter
      hdfs dfsadmin -safemode leave
      
      Safe mode is ON. It was turned on manually. Use "hdfs dfsadmin -safemode leave" to turn safe mode off.
      
      #运维人员可以手动进入安全模式 进行集群的维护升级等动作 避免了群起群停浪费时间。
      
  • 安全模式的注意事项

    • 刚启动完hdfs集群之后 等安全模式介绍才可以正常使用文件系统 文件系统服务才是正常可用。
    • 后续如果某些软件依赖HDFS工作必须先启动HDFS且等安全模式结束才可以使用你的软件。
    • 启动–>启动成功–>可用安全模式结束
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: Hadoop