大数据之Hadoop--HDFS

HDFS是一个分布式文件系统,用于存储大规模数据,强调吞吐量而非交互速度。文件被切片并有副本,支持大文件存储,但不支持文件的随机修改。NameNode是核心,管理元数据,而DataNode存储实际数据。安全模式是HDFS启动时的保护状态,确保元数据完整性。
摘要由CSDN通过智能技术生成

HDFS基本概念

  • 首先是一个文件系统,就是用来存储文件、存储数据。是大数据最底层一个服务。

  • 其次是一个分布式的文件系统。分布式意味着多台机器存储。

Hadoop HDFS--起源发展和设计目标

  • 具备故障检测和快速恢复的能力(容错)

1、HDFS上存储数据都是先进行切片存储,每一个切片都有副本,不怕丢失
  • 面对海量数据的存储,注重吞吐能力,而不是交互式。(延迟高)

1、由于HDFS存储的过程很复杂,所以当我向HDFS存储文件时,存储过程时间比较长
2、HDFS最擅长的就是存海量数据
  • 支持大文件存储(越大越开心)

1、由于不管多大的文件存入之后,都是进行切片,所以HDFS对文件的大小是无感的
2、NemeNode中每一个文件的元数据大概是150字节, 1K---》150字节 1T--->150字节
  • 一次写入多次读取模型 (不支持修改操作)

1、HDFS上的文件一旦写入,不支持对文件的随机修改,只支持对文件尾部的内容追加
  • 异构存储、可移植性

HDFS分布式存储系统可以在多个不同的平台运行(Windows、Linux、Mac)

HDFS的架构

HDFS 是一个主/从(Mater/Slave)体系结构,由三部分组成: NameNode

DataNode 以及 SecondaryNamenode。

NameNode

NameNode是HDFS的核心。
NameNode也称为Master。
NameNode仅存储HDFS的元数据:文件系统中所有文件的目录树,并跟踪整个集群中的文件。
NameNode不存储实际数据或数据集。数据本身实际存储在DataNodes中。
NameNode知道HDFS中任何给定文件的块列表及其位置。使用此信息NameNode知道如何从块中构建文件。
NameNode并不持久化存储每个文件中各个块所在的DataNode的位置信息,这些信息会在系统启动时从数据节点重建。
NameNode对于HDFS至关重要,当NameNode关闭时,HDFS / Hadoop集群无法访问。
NameNode是Hadoop集群中的单点故障。
NameNode所在机器通常会配置有大量内存(RAM)。

DataNode

DataNode负责将实际数据存储在HDFS中。
DataNode也称为Slave。
NameNode和DataNode会保持不断通信。
DataNode启动时,它将自己发布到NameNode并汇报自己负责持有的块列表。
当某个DataNode关闭时,它不会影响数据或群集的可用性。NameNode将安排由其他DataNode管理的块进行副本复制。
DataNode所在机器通常配置有大量的硬盘空间。因为实际数据存储在DataNode中。
DataNode会定期(dfs.heartbeat.interval配置项配置,默认是3秒)向NameNode发送心跳,如果NameNode长时间没有接受到DataNode发送的心跳, NameNode就会认为该DataNode失效。
block汇报时间间隔取参数dfs.blockreport.intervalMsec,参数未配置的话默认为6小时

SecondaryNamenode

Secondary NameNode 用来监控 HDFS 状态的辅助后台程序,每隔一段时间获取 HDFS 元数据的快照。最主要作用是辅助 NameNode 管理元数据信息。

HDFS的核心重要特性

master/slave架构

HDFS采用master/slave架构。一般一个HDFS集群是有一个Namenode和一定数目的Datanode组成。
Namenode是HDFS集群主节点,Datanode是HDFS集群从节点,两种角色各司其职,共同协调完成分布式的文件存储服务。

分块存储

HDFS中的文件在物理上是分块存储(block)的,块的大小可以通过配置参数来规定,默认大小在hadoop2.x版本中是128M

副本机制

为了容错,文件的所有block都会有副本。每个文件的block大小和副本系数都是可配置的。应用程序可以指定某个文件的副本数目。副本系数可以在文件创建的时候指定,也可以在之后改变。
副本数量也可以通过参数设置dfs.replication,默认是3。

名字空间(NameSpace)

HDFS支持传统的层次型文件组织结构。用户或者应用程序可以创建目录,然后将文件保存在这些目录里。文件系统名字空间的层次结构和大多数现有的文件系统类似:用户可以创建、删除、移动或重命名文件。
Namenode负责维护文件系统的名字空间,任何对文件系统名字空间或属性的修改都将被Namenode记录下来。
HDFS会给客户端提供一个统一的抽象目录树,客户端通过路径来访问文件,形如:hdfs://namenode:port/dir-a/dir-b/dir-c/file.data。
全路径(绝对路径): hadoop fs -get hdfs://node1:8020/a.txt ./
简写路径(相对路径): hadoop fs -get /a.txt ./
如果你的客户端就是集群内部的某台主机,也就是说你本身就在集群内部,则直接使用简写路径
如果你的客户端是在集群外部的某台主机,也就是说你不在集群中,则必须要使用全路径

Namenode元数据管理

我们把目录结构及文件分块位置信息叫做元数据。Namenode负责维护整个hdfs文件系统的目录树结构,以及每一个文件所对应的block块信息(block的id,及所在的datanode服务器)。

一次写入,多次读出

1、HDFS一般用于离线分析,一般存储的都是历史数据
2、历史数据最大的特点是已经发生了,成为了既定事实
3、对于历史数据我们只能遵循既定事实,不能进行任何修改(篡改历史)
4、hdfs的模式是一次写入多次读取,hdfs没有随机修改编辑的操作,只能对已有的数据进行追加。
设计目标是这么决定的。
5、侧重于数据吞吐量 不注重实时交互性 意味着hdfs操作延迟很高。

HDFS的基本操作

Shell 命令选项

选项名称

使用格式

含义

-ls

-ls <路径>

查看指定路径的当前目录结构

-lsr

-lsr <路径>

递归查看指定路径的目录结构

-du

-du <路径>

统计目录下个文件大小

-dus

-dus <路径>

汇总统计目录下文件(夹)大小

-count

-count [-q] <路径>

统计文件(夹)数量

-mv

-mv <源路径> <目的路径>

移动

-cp

-cp <源路径> <目的路径>

复制

-rm

-rm [-skipTrash] <路径>

删除文件/空白文件夹

-rmr

-rmr [-skipTrash] <路径>

递归删除

-put

-put <多个linux上的文件> <hdfs路径>

上传文件

-copyFromLocal

-copyFromLocal <多个linux上的文件> <hdfs路径>

从本地复制

-moveFromLocal

-moveFromLocal <多个linux上的文件> <hdfs路径>

从本地移动

-getmerge

-getmerge <源路径> <linux路径>

合并到本地

-cat

-cat <hdfs路径>

查看文件内容

-text

-text <hdfs路径>

查看文件内容

-copyToLocal

-copyToLocal [-ignoreCrc] [-crc] [hdfs源路径] [linux目的路径]

从本地复制

-moveToLocal

-moveToLocal [-crc] <hdfs源路径> <linux目的路径>

从本地移动

-mkdir

-mkdir <hdfs路径>

创建空白文件夹

-setrep

-setrep [-R] [-w] <副本数> <路径>

修改副本数量

-touchz

-touchz <文件路径>

创建空白文件

-stat

-stat [format] <路径>

显示文件统计信息

-tail

-tail [-f] <文件>

查看文件尾部信息

-chmod

-chmod [-R] <权限模式> [路径]

修改权限

-chown

-chown [-R] [属主][:[属组]] 路径

修改属主

-chgrp

-chgrp [-R] 属组名称 路径

修改属组

-help

-help [命令选项]

帮助

Shell常用命令介绍

-ls

使用方法:hadoop fs -ls [-h] [-R] <args>

功能:显示文件、目录信息。

示例:hadoop fs -ls /user/hadoop/file1

-mkdir

使用方法:hadoop fs -mkdir [-p] <paths>

功能:在hdfs上创建目录,-p表示会创建路径中的各级父目录。

示例:hadoop fs -mkdir –p /user/hadoop/dir1

-put

使用方法:hadoop fs -put [-f] [-p] [ -|<localsrc1> .. ]. <dst>

功能:将单个src或多个srcs从本地文件系统复制到目标文件系统。

-p:保留访问和修改时间,所有权和权限。

-f:覆盖目的地(如果已经存在)

示例:hadoop fs -put -f localfile1 localfile2 /user/hadoop/hadoopdir

-get

使用方法:hadoop fs -get [-ignorecrc] [-crc] [-p] [-f] <src> <localdst>

-ignorecrc:跳过对下载文件的CRC检查。

-crc:为下载的文件写CRC校验和。

功能:将文件复制到本地文件系统。

示例:hadoop fs -get hdfs://host:port/user/hadoop/file localfile

-appendToFile

使用方法:hadoop fs -appendToFile <localsrc> ... <dst>

功能:追加一个文件到已经存在的文件末尾

示例:hadoop fs -appendToFile localfile /hadoop/hadoopfile

-cat

使用方法:hadoop fs -cat [-ignoreCrc] URI [URI ...]

功能:显示文件内容到stdout

示例:hadoop fs -cat /hadoop/hadoopfile

-tail

使用方法:hadoop fs -tail [-f] URI

功能:将文件的最后一千字节内容显示到stdout。

-f选项将在文件增长时输出附加数据。

示例:hadoop fs -tail /hadoop/hadoopfile

-chgrp

使用方法:hadoop fs -chgrp [-R] GROUP URI [URI ...]

功能:更改文件组的关联。用户必须是文件的所有者,否则是超级用户。

-R将使改变在目录结构下递归进行。

示例:hadoop fs -chgrp othergroup /hadoop/hadoopfile

-chmod

功能:改变文件的权限。使用-R将使改变在目录结构下递归进行。

示例:hadoop fs -chmod 666 /hadoop/hadoopfile

-chown

功能:改变文件的拥有者。使用-R将使改变在目录结构下递归进行。

示例:hadoop fs -chown someuser:somegrp /hadoop/hadoopfile

-cp

功能:从hdfs的一个路径拷贝hdfs的另一个路径

示例:hadoop fs -cp /aaa/jdk.tar.gz /bbb/jdk.tar.gz.2

-mv

功能:在hdfs目录中移动文件

示例:hadoop fs -mv /aaa/jdk.tar.gz /

-getmerge

功能:合并下载多个文件

示例:比如hdfs的目录 /aaa/下有多个文件:log.1, log.2,log.3,...

hadoop fs -getmerge /aaa/log.* ./log.sum

-rm

功能:删除指定的文件。只删除非空目录和文件。-r 递归删除。

示例:hadoop fs -rm -r /aaa/bbb/

-df

功能:统计文件系统的可用空间信息

示例:hadoop fs -df -h /

-du

功能:显示目录中所有文件大小,当只指定一个文件时,显示此文件的大小。

示例:hadoop fs -du /user/hadoop/dir1

-setrep

功能:改变一个文件的副本系数。-R选项用于递归改变目录下所有文件的副本系数。

示例:hadoop fs -setrep -w 3 -R /user/hadoop/dir1

HDFS的工作机制

HDFS上传文件流程(写文件流程)

HDFS下载文件流程(读文件流程)

NN和DN之间的通信机制

  • dn启动时

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

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

NameNode 安全模式

  • 安全模式(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 in25 seconds.
#3、条件3:满足12条件的情况下 持续30s 结束自动离开安全模式

Safemode is off.
#为什么集群刚启动的时候 要进入安全模式
文件系统元数据不完整 无法对外提供可高的文件服务 属于内部的元数据汇报、校验、构建的过程。
  • 手动进入离开

hdfs dfsadmin -safemode enter #手动进入安全模式
hdfs dfsadmin -safemode leave #手动离开安全模式
hdfs dfsadmin -safemodeget #获取安全模式状态

Safe mode is ON. It was turned on manually. Use "hdfs dfsadmin -safemode leave" to turn safe mode off.

#运维人员可以手动进入安全模式 进行集群的维护升级等动作 避免了群起群停浪费时间。
  • 安全模式的注意事项

刚启动完hdfs集群之后 等安全模式介绍才可以正常使用文件系统 文件系统服务才是正常可用。
后续如果某些软件依赖HDFS工作,必须先启动HDFS且等安全模式结束才可以使用你的软件。
启动-->启动成功-->可用(安全模式结束)

NameNode元数据管理机制

  • 元数据

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

文件系统的元数据(namespace、块的位置)
datanodes状态信息(健康、磁盘使用率)
  • hdfs文件系统元数据存储位置

内存中元数据
磁盘上元数据文件(fsimage edits log)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值