文章目录

  • HDFS
  • 一、元数据
  • 1.元数据安全
  • 2.SecondaryNameNode
  • 3.元数据查看
  • 二、辅助功能
  • 1.Distcp
  • 2.Archive
  • 3.Snapshot
  • 三、Hadoop HA和Hadoop Federation
  • 1.HA
  • 2.Federation


HDFS

一、元数据

1.元数据安全

1.元数据的产生
第一次格式化namenode的时候,产生磁盘元数据:fsimage文件

2.HDFS元数据存储的位置
磁盘:fsimage
内存:NameNode维护的内存元数据

3.如何解决NameNode从文件中读写元数据性能差的问题?
每次NameNode启动时会读取fsiamge文件加载到内存中

4.HDFS的元数据怎样保证安全?
将内存元数据的变化写入edits文件,每次NameNode启动将fsimage与edits文件合并,生成原来的元数据

2.SecondaryNameNode

1.Secondary NameNode功能
帮助NameNode阶段性的合并fsimage和edit logs文件,生成最新的fsimage文件,下一次NameNode启动,只要加载最新的fsimage文件和少量的edits文件的内容就可以快速的恢复元数据

2.Secondary NameNode是NameNode的备份?
错误,因为Secondary NameNode和NameNode的功能不同
NameNode主要是用来保存HDFS的元数据信息,比如命名空间信息,块信息等。
Secondary NameNode的职责是合并NameNode的edits到fsimage文件中。

3.如何解决NameNode启动合并速度慢的问题?
原因:每次元数据的变化都将写入到edits文件中会导致edits文件内越来越大,但是其中包括了许多无用的数据,最终导致fsimage与edits文件合并速度非常慢
解决方案 : 使用SecondaryNameNode阶段性的合并老的fsimage和edits文件生成新的fsimage文件,拿新的edits与新的fsimage合并即可

3.元数据查看

在配置文件hdfs-site.xml中记录了fsimage文件和edits文件的存放位置,因此我们可以通过查看hdfs-site.xml文件查看他们的位置(hdfs-site.xml文件在etc下)

1.通过hdfs-site文件查看fsimage和edits文件的存放位置

怎么查看hadoop其他节点是否启动成功 hadoop怎么查看hdfs_hdfs


2.切换到fsimage存放的目录下

cd /export/server/hadoop-2.7.5/hadoopDatas/namenodeDatas/current

怎么查看hadoop其他节点是否启动成功 hadoop怎么查看hdfs_hdfs_02


3.查看fsimage文件中的信息,将fsimage转成xml

hdfs oiv -i fsimage_0000000000000000526 -p XML -o fsimage.xml

怎么查看hadoop其他节点是否启动成功 hadoop怎么查看hdfs_hdfs_03


4.切换到edits存放的目录下

cd /export/server/hadoop-2.7.5/hadoopDatas/nn/edits/current

怎么查看hadoop其他节点是否启动成功 hadoop怎么查看hdfs_hdfs_04


5.查看edits文件中的信息,将edits转成xml

hdfs oev -i edits_0000000000000000505-0000000000000000526 -p XML -o edits.xml

怎么查看hadoop其他节点是否启动成功 hadoop怎么查看hdfs_hdfs_05

二、辅助功能

1.Distcp

distcp的功能:用于实现两个HDFS集群之间的数据拷贝

语法:

hadoop distcp resource  target
hadoop distcp hdfs://master1:8020/foo/a hdfs://master1:8020/foo/b hdfs://master2:8020/bar/foo

2.Archive

Archive功能:将多个小文件从逻辑上合并为一个整体文件,减少数据存储
创建归档文件:

hdfs dfs -mkdir -p /hartest/test1
hadoop  archive  -archiveName wc.har -p /wordcount /hartest/test1

查看归档文件

hdfs dfs -ls -R /hartest/test1/wc.har
hdfs dfs -ls -R har:///hartest/test1/wc.har
hdfs dfs -cat /hartest/test1/wc.har/part-0

3.Snapshot

Snapshot功能:用于对某个目录构建快照,实现状态备份
创建测试目录:

hdfs dfs -mkdir /test
hdfs dfs -put /export/data/wordcount.txt /test/

允许构建快照:

hdfs dfsadmin -allowSnapshot /test

创建快照:

hdfs dfs -createSnapshot /test

查看快照:

/test/.snapshot/

对比、恢复快照:

hdfs dfs -put cron.txt /test/
hdfs snapshotDiff /test . .snapshot/s20210424-145744.748
hdfs dfs -cp /test/.snapshot/s20210424-145744.748/*  /test/

删除快照:

hdfs dfs -deleteSnapshot /test s20210424-145744.748

禁止构建快照:

hdfs dfsadmin -disallowSnapshot /test

三、Hadoop HA和Hadoop Federation

1.HA

Hadoop HA:高可用机制,启动两个主节点,一个为Active状态,另外一个为Standby
特点:一个节点工作,一个节点不工作

1.单点故障问题如何解决?
通过高可用机制,如果Active出现故障,Standby会切换为Active状态,可解决主节点单点故障问题

2.两个NameNode,如何判断active和standy
由zookeeper来解决,两个NameNode都向zookeper注册一个临时节点,谁创建成功,谁就是Active,另外一个监听这个临时节点,谁创建成功,谁就是Active,另外一个监听这个临时节点

特殊的进程:ZKFC【Zookeeper Failover Controller】
监听NameNode状态,实现状态指令的发布
辅助NameNode向ZK中进行注册,创建临时节点或者监听临时节点
每一个NameNode会有一个ZKFC进程

3.两个NameNode,DataNode会向哪个NameNode发送心跳和汇报块?
每个DataNode会向所有的NameNode注册,发送心跳和汇报块

4.如何保证两个NameNode的内存元数据是一致的,只有这样,Active宕机或者故障,Standby才能完整的接替原来的Active?
要实现共享edits文件,JournalNode集群:设计类似于zookeeper,公平节点,属于Hadoop内部的一个组件,可以存储大数据文件
Active的NameNode将edits写入JournalNode,Standby的NameNode从JournalNode中读取Edits

2.Federation

Hadoop Federation:联盟机制,启动多个主节点,并且多个主节点共同工作,起到负载均衡作用

1.如何解决单个主节点NameNode负载过高的问题?
通过联盟机制,启动多个节点共同工作