淘先锋技术网

首页 1 2 3 4 5 6 7

1. HDFS体系结构
 

HDFS采⽤的是master/slaves这种主从的结构模型来管理数据,这种结构模型主要由 四个部分组成,分别是 Client、NameNode、DataNode、SecondaryNameNode

 不同的线代表不同的通信协议

1.1 NameNode

1. NameNode时整个文件系统的管理节点,它主要作用

  • 维护整个文件系统的目录树
  • 维护每个文件对应的数据块列表
  • 接收客户端的请求

2. NameNode主要包含以下文件,这些内容常驻内存,也会存在文件里面。

  • Fsimage: 元数据镜像文件,是元数据的镜像快照,元数据信息包括:文件目录树、每个文件对应的数据块列表
  • Edits: 操作日志文件(事务文件)会实时记录用户的所有操作
  • seen_txid : 存储的是edits文件的尾数,是一个数字
  • VERSION : 保存的集群的版本信息

NameNode总结

 1.2 SecondaryNameNode

主要负责定期把edits文件中的内容合并到fsimage中,这个合并操作被称为checkpoint,在合并的时候会对edits中的内容进行转换,生成新的内存保存到fsimage中

注意: 在NameNode的HA架构中没有SecondaryNameNode进程,文件合并操作会由standby NameNode负责实现。

1.3 DataNode

 查看数据块的位置

/opt/module/hadoop-2.7.2/data/tmp/dfs/data/current/BP-1435466945-192.168.21.101-1664012102328/current/finalized/subdir0/subdir0

 注:

NameNode、datanode目录下 都有一个clusterID,当重新格式化NameNode时,clusterID会发生改变,而datanode中的clusterID不变。因此在格式化NameNode时要先删除data目录。

2. HDFS高级操作

2.1 HDFS垃圾回收站

开启HDFS的垃圾箱功能

  •  在core-site.xml 添加如下配置 , 单位是分钟
<property>
	<name>fs.trash.interval</name>
	<value>1140</value>
</property>
  • 重启集群
     
  • 删除测试

  • 恢复数据
hadoop fs -mv hdfs://linux01:9000/user/root/.Trash/Current/user/root/input/ /user/root/

说明:

(1)垃圾回收目录是一个HDFS目录,恢复数据时只需要mv回去就行了。

(2)skipTrash 选项删除文件,该选项不会将文件发送到垃圾箱

hadoop fs -rm -R  -skipTrash /user/root/input

(3)HDFS会为每个用户创建一个回收站目录: /user/用户名/.Trash/

(4)回收站中的数据都会有一个默认保存周期,过期未恢复则会被HDFS自动彻底删除

2.2 HDFS的安全模式

集群刚启动时HDFS会进入安全模式,此时无法执行写操作

查看安全模式:

hdfs dfsadmin -safemode get

离开安全模式

hdfs dfsadmin -safemode leave

2.3 定时上传数据到HDFS

定时上传日志数据到HDFS,有补数据的功能

#!/bin/bash

# 获取昨天日期字符串
yesterday=$1

if [ "$yesterday" = "" ]
then
        yesterday=`date +%Y_%m_%d --date="1 days ago"`
fi
# 拼接日志路径信息
logPath=/opt/data/log/access_${yesterday}.log

# 将日期字符串中的_去掉,并且拼接称HDFS的路径
hdfsPath=/log/${yesterday//_/}

# 在HDFS创建目录
hadoop fs -mkdir -p ${hdfsPath}
# 将数据上传到HDFS的指定目录中
hadoop fs -put ${logPath} ${hdfsPath}

注: 执行脚本时加上-x 选项可以看到脚本的执行过程

3. HDFS的高可用和高扩展

抛出两个问题

NameNode节点宕机了怎么办?

NameNode节点内存不够了怎么办?

3.1 HDFS的高可用(HA)

HA : 集群中有多个NameNode

  •  HFDS的HA 表示集群中存在多个NameNode,只有一个NameNode时Active状态,其它的是Standby状态
  • Active NameNode(ANN)负责所有客户端的操作
  • Standby NameNode(SNN) 用来同步ANN的状态信息,以提供快速故障恢复能力
  • 使用HA的时候不能启动SecondayNameNode,会出错。因为SecondayNameNode的职责已经分配给了StandBy NN

3.2 HDFS的高扩展(Federation)

Federation可解决单一命名空间的问题,提供一下特性

  • HDFS集群扩展性
  • 性能更高效
  • 良好的隔离性

可以和HA结合起来使用