Hadoop中的HDFS学习总结

博主自己学习hdfs的一些笔记,整理了一下(有什么不懂的可以问我。尽量解答,希望对大家有帮助)

Hadoop组成

Hadoop HDFS:一个高可靠、高吞吐量的分布式文件系统,对海量数据的存储。
Hadoop MapReduce:一个分布式的资源调度和离线并行计算框架。
Hadoop Yarn:基于HDFS,用于作业调度和集群资源管理的框架。
Hadoop Common:Hadoop工具包,支持其他模块的工具模块(Configuration、RPC、序列化机制、日志操作)

hadoop 的组成部分

  1. List item

HDFS 分布式文件存储系统
管理者:NameNode
工作者:DataNode
辅助者:SecondayNameNode
MapReduce 分布式离线计算框架
Yarn Hadoop资源调度器
管理者:ResourceManager
工作者:NodeManager

HDFS数据副本机制

1、第一份数据来源于用户的客户端
2、第二份数据存放在与第一份副本在同一个机架,不同的节点,按照一定的机制(cpu 内存 io 使用率和节点磁盘剩
余容量)选取一个节点进行存放
3、第三份副本存放在,与第一第二副本不在同一机架,且逻辑距离最近的机架上,按照一定的机制(cpu 内存 io 使
用率和节点磁盘剩余容量),选择一个节点进行存放
Hadoop中的HDFS学习总结_第1张图片
hadoop 视硬件设备经常损坏为常态,为了防止硬件损坏导致系统不可用,所
以构建多副本机制。

Namenode作用

对存放的元数据,名字空间,目录树进行管理维护
监控datanode的心跳信息
确定指定文件到datanode的映射关系
 响应客户端的所有请求  
客户端和dataname交流之间的桥梁

DataNode作用

响应客户端的读写操作
周期性的向namenode发送自己的心跳信息,namenode 如果10分钟没有接受到该节点的心跳报告,认为该节点lost
数据的流水线复制(一点一点的复制)
以 block的形式存储在hdfs中

机架感知

是一个脚本,记录着主机ip与交换机之前的对应关系
.告诉hadoop集群那台机器属于那台机架
NameNode分配节点的时候,会用到机架感知

HDFS文件读写流程(博主前面写了一篇,点超链接吧)

读写流程

HDFS数据完整性计算(保证数据的完整性)

Hadoop中的HDFS学习总结_第2张图片
数据写入之后进行数据首次校验,文件系统周期性进行校验,防止数据丢失。
读取数据之前进行数据校验,若两个校验相同,那么表示数据没有丢失,开始读取数据。
若两个校验不相同,那么表示数据有部分丢失,换到其他节点(相同副本的节点)读取数据

HDFS的shell命令操作

(1)-help:输出这个命令参数
bin/hdfs dfs -help rm
(2)-ls: 显示目录信息
hdfs dfs -ls /
(3)-mkdir:在hdfs上创建目录
hdfs dfs -mkdir -p /aaa/bbb/cc/dd
(4)-moveFromLocal从本地剪切粘贴到hdfs
hdfs dfs -moveFromLocal /home/Hadoop/a.txt /aaa/bbb/cc/dd
(5)-moveToLocal:从hdfs剪切粘贴到本地
hdfs dfs -moveToLocal /aaa/bbb/cc/dd /home/Hadoop/a.txt
(6)–appendToFile :追加一个文件到已经存在的文件末尾
hdfs dfs -appendToFile ./hello.txt /hello.txt
(7)-cat :显示文件内容
hdfs dfs -cat /hadoop-daemon.sh
(8)-tail:显示一个文件的末尾
hdfs dfs -tail /weblog/access_log.1
(9)-text:以字符形式打印一个文件的内容
hdfs dfs -text /weblog/access_log.1
(10)-chgrp 、-chmod、-chown:linux文件系统中的用法一样,修改文件所属权限
hdfs dfs -chmod 666 /hello.txt
hdfs dfs -chown someuser:somegrp /hello.txt
(11)-copyFromLocal:从本地文件系统中拷贝文件到hdfs路径去
hdfs dfs -copyFromLocal ./jdk.tar.gz /aaa/
(12)-copyToLocal:从hdfs拷贝到本地
hdfs dfs -copyToLocal /aaa/jdk.tar.gz
(13)-cp :从hdfs的一个路径拷贝到hdfs的另一个路径
hdfs dfs -cp /aaa/jdk.tar.gz /bbb/jdk.tar.gz.2
(14)-mv:在hdfs目录中移动文件
hdfs dfs -mv /aaa/jdk.tar.gz /
(15)-get:等同于copyToLocal,就是从hdfs下载文件到本地
hdfs dfs -get /aaa/jdk.tar.gz
(16)-getmerge :合并下载多个文件,比如hdfs的目录 /aaa/下有多个文件:log.1, log.2,log.3,…
hdfs dfs -getmerge /aaa/log.* ./log.sum
(17)-put:等同于copyFromLocal
hdfs dfs -put /aaa/jdk.tar.gz /bbb/jdk.tar.gz.2
(18)-rm:删除文件或文件夹
hdfs dfs -rm -r /aaa/bbb/
(19)-rmdir:删除空目录
hdfs dfs -rmdir /aaa/bbb/ccc
(20)-df :统计文件系统的可用空间信息
hdfs dfs -df -h /
(21)-du统计文件夹的大小信息
hdfs dfs -du -s -h /aaa/*
(22)-count:统计一个指定目录下的文件节点数量
hdfs dfs -count /aaa/
(23)-setrep:设置hdfs中文件的副本数量
hdfs dfs -setrep 3 /aaa/jdk.tar.gz
在这里插入图片描述
这里设置的副本数只是记录在namenode的元数据中,是否真的会有这么多副本,还得看datanode的数量。因为目前只有3台设备,最多也就3个副本,只有节点数的增加到10台时,副本数才能达到10。
(24) - expunge :清空hdfs垃圾桶
hdfs dfs -expunge

HDFS的特性

1、海量数据存储: HDFS可横向扩展,其存储的文件可以支持PB级别或更高级别的数据存储。
2、高容错性:数据保存多个副本,副本丢失后自动恢复。可构建在廉价的机器上,实现线性扩展。当集群增加新节点之后,namenode也可以感知,进行负载均衡,将数据分发和备份数据均衡到新的节点上。
3、商用硬件:Hadoop并不需要运行在昂贵且高可靠的硬件上。它是设计运行在商用硬件(廉价商业硬件)的集群上的。
4、大文件存储:HDFS采用数据块的方式存储数据,将数据物理切分成多个小的数据块。所以再大的数据,切分后,大数据变成了很多小数据。用户读取时,重新将多个小数据块拼接起来。

HDFS的缺点

1.不擅长低延时数据访问
由于hadoop针对高数据吞吐量做了优化,牺牲了获取数据的延迟,所以对于低延迟访问数据的业务需求不适合HDFS。
2.不擅长大量小文件存储
存储大量小文件的话,它会占用 NameNode大量的内存来存储文件、目录和块信息。这样是不可取的,因为NameNode的内存总是有限的。
3.不支持多用户并发写入一个文本
同一时间内,只能有一个用户执行写操作
4.不支持文件随机修改(多次写入,一次读取)
仅支持数据末尾 append(追加),不支持文件的随机修改。

HDFS高级命令

特定文件夹下的副本数可以设置、存储容量可以设置,存储的文件个数可以设置。
设置文件夹内数据的个数: hdfs dfsadmin -setQuota 50 lisi (lisi 本身算一个 最多可上传49个)
清除文件数量限制 hdfs dfsadmin -clrQuota /user/root/lisi
限制空间大小 hdfs dfsadmin -setSpaceQuota 100M /user/root/lisi (最多可以存储100M)
清除空间限额 hdfs dfsadmin -clrSpaceQuota /user/root/lisi
查看hdfs文件限额数量 hdfs dfs -count -q -h /user/root/lisi

HDFS 安全模式(safemode)

目标:掌握什么是HDFS的安全模式,以及安全模式的作用
安全模式是HDFS所处的一种特殊状态,在这种状态下,文件系统只接受读数据请求,而不接受删除、修改等变更请求。在NameNode主节点启动时,HDFS首先进入安全模式,DataNode在启动的时候会向namenode汇报可用的block等状态,当整个系统达到安全标准时,HDFS自动离开安全模式。
如果HDFS处于安全模式下,则文件block不能进行任何的副本复制操作,因此达到最小的副本数量要求是基于datanode启动时的状态来判定的,启动时不会再做任何复制(从而达到最小副本数量要求),hdfs集群刚启动的时候,默认30S钟的时间是处于安全期的,只有过了30S之后,集群脱离了安全期,然后才可以对集群进行操作

安全模式有什么特点?
只允许数据读取,不允许数据的修改与添加等变更操作。
在安全模式下集群在做什么?
datanode会汇报block状态给namenode
在安全模式下集群在进行恢复元数据,即在合并fsimage和edits log,并且接受datanode的心跳信息,
恢复block的位置信息,将集群恢复到上次关机前的状态
如何查看集群当前的状态:
hdfs dfsadmin -safemode get
如何进入/退出安全模式?
hdfs dfsadmin -safemode enter
hdfs dfsadmin -safemode leave
什么时候进入安全模式?
集群重新启动进去安全模式

hdfs的文件权限验证

hdfs的文件权限机制与linux系统的文件权限机制类似
r:read w:write x:execute 权限x对于文件表示忽略,对于文件夹表示是否有权限访问其内容
如果linux系统用户zhangsan使用Hadoop命令创建一个文件,那么这个文件在HDFS当中的owner就是zhangsan
HDFS文件权限的目的:防止好人做错事,而不是阻止坏人做坏事。HDFS相信你告诉我你是谁,你就是谁

Fsimage,Edits详解

目标:掌握Fsimage和Edits的作用。

元数据信息目录的配置
hdfs-site.xml当中
Hadoop中的HDFS学习总结_第3张图片
Hadoop中的HDFS学习总结_第4张图片
dfs.namenode.name.dir 设置fsimage 数据的存放路径
dfs.namenode.edits.dir 设置edits数据的存放路径

Hadoop中的HDFS学习总结_第5张图片
Hadoop中的HDFS学习总结_第6张图片
将edits文件转换成XML
hdfs oev -i edits_0000000000000000416-0000000000000000418 -p XML -o test002.xml
将Fsimage文件转换成XML
hdfs oiv -i fsimage_0000000000000000418 -p XML -o test001.xml

Fsimage 和 Edits 的作用是什么?

		fsimage存储的是系统最近一次关机前的集群镜像,
		edits是客户端对HDFS文件系统的所有操作日志
		恢复集群到上次关机前的状态

什么时候会使用Fsimage Edits?
1.在集群二次启动时,会使用fsimage和edits合并进行恢复元数据
2.SecondayNameNode周期性的拉取fsimage和edits进行合并生成新的fsimage

secondarynameNode工作原理(意义)

前提:未使用secondarynameNode时,NameNode工作中会产生fsimage 和edtes,edits日志过大,直接导致集群
二次开机恢复原本状态过慢,引起开机时间过长
SecondaryNamenode存在的意义是什么?
一:进行Fsimage和Edits的合并操作,减少edits日志大小,加快集群的启动速度
二:将Fsimage与Edits进行备份,防止丢失
SecondaryNamenode 的工作原理?
Hadoop中的HDFS学习总结_第7张图片
1、 secnonaryNN通知NameNode切换editlog
2、secondaryNN从NameNode中获得FSImage和editlog(通过http方式)
3、secondaryNN将FSImage载入内存,然后开始合并editlog,合并之后成为新的fsimage
4、secondaryNN将新的fsimage发回给NameNode
5、NameNode用新的fsimage替换旧的fsimage
触发secondarynameNode合并文件的条件
1、时间维度, 默认一小时合并一次 , 人为设置使用如下参数
dfs.namenode.checkpoint.period :3600
2、次数维度,默认100W次合并一次。人为设置使用如下参数
dfs.namenode.checkpoint.txns : 1000000

namenode元数据信息多目录配置

为了保证元数据的安全性,我们一般都是先确定好我们的磁盘挂载目录,将元数据的磁盘做RAID1
namenode的本地目录可以配置成多个,且每个目录存放内容相同,增加了可靠性。

2)具体配置如下:
hdfs-site.xml
Hadoop中的HDFS学习总结_第8张图片

HDFS新增节点(具体操作关注下篇文章)

新节点需要做哪些准备?
1.配置JDK
2.配置SSH免密钥
3.关闭防火墙
4.关闭selinux
5.修改主机名
6.修改hosts
集群添加一个节点的流程?
在配置文件目录添加dfs.hosts白名单文件,文件中加入包括新增节点在内的所有节点
Hadoop中的HDFS学习总结_第9张图片
在hdfs.site.xml中配置白名单文件生效
在这里插入图片描述
主节点弄node01配置slaves文件,将新增节点加入
刷新hdfs和yarn
hdfs dfsadmin -refreshNodes
yarn rmadmin -refreshNodes
新节点开启相应服务
浏览WEB界面

如何合并小文件?

	HDFS -> local    :hadoop fs -getmerge  小文件目录   下载的目录	
	local -> HDFS   :  遍历所有的已有小文件追加到一个文件中,再上传(文件不在HDFS)

设置 开启权限控制的key是什么?

		dfs.permissions

使用java API 在hdfs创建一个全新的目录的过程是?

	//实例Configuration 
		Configuration configuration = new Configuration();
		//实例文件系统
		FileSystem fileSystem = FileSystem.get(new URI("hdfs://192.168.100.88:8082"),configuration);
		//使用文件系统对象调用mkdirs(相应的API )
		boolean mkdirs = fileSystem.mkdirs(new Path("目录路径"));

你可能感兴趣的:(HDFS分布式存储文件系统)