一、DataNode概述
client: 通过nn和dn访问HDFS上文件
HDFS API : 1. FileSystem 分布式的文件系统
2. FSDataInputStream/FSDataOutputStream
NameNode:一个集群一个nn,整个HDFS的系统的总管,
管理HDFS上的数据目录树和文件元数据的信息(fsimage) ---磁盘存储
记录用户操作日志edits ---磁盘存储
负责监控所有的DataNode的健康状态(如果一个dn宕机了,nn将此移除列表,备份其上的数据)
一个数据块block ----- 150byte 存储 (不适合存储大量的小文件)
SecondaryNameNode:辅助nn工作的,可以实现nn数据的恢复(是nn的副本,不适合热备份)
主要工作是融合nn上的fsimage和多份edits,保证nn中持有最新的文件信息
DateNode: 一个slave节点上一个dn,存储真实的数据。
定时将其持有的数据汇报给nn。
以固定的block为基本单位进行 组织数据信息( 128MB )
128 MB ---- 1b 1万个小文件
128 MB ---- 128 MB
保证数据的可靠性,将block以流水的方式进行备份
Replication: 数据的副本
<1>配置DataNode宕机时间
DataNode心跳机制:3秒和nn交互一次 (传递操作信息)
DataNode数据同步:1小时 触发一次 将 所有的块信息 发送给nn
DataNode宕机的时间判断值:hdfs-default.xml
recheck-interval * 2 + interval * 10 = 10分钟 + 30秒
配置检测间隔: hdfs-site.xml
默认是5分钟
<property>
<name>dfs.namenode.heartbeat.recheck-interval</name>
<value>300000</value>
</property>
<property>
<name>dfs.heartbeat.interval</name>
<value>3</value>
</property>
保持连接
dn ----------------------------- nn(如果dn 10分钟 + 30秒 没有回馈 , dn认定此节点为宕机节点)
<2>DataNode的多目录配置
数据节点多目录中存储的数据时不一样的(数据的副本和备份)
扩充DataNode的存储容量
linux目录结构:/home 2G
/usb 1T
设置:hdfs-site.xml
<property>
<name>dfs.datanode.data.dir</name>
<value>file://${hadoop.tmp.dir}/dfs/data,file://${hadoop.tmp.dir}/dfs/data2</value>
</property>
core-site.xml : hadoop.tmp.dir ------> /home/zhangsan/hadoop
二、节点的服役和退役
<1>节点的服役
当前集群规模扩充
将正在运行的节点从Hadoop集群上移除,影响其他节点,Hadoop集群的运行
步骤:
1. 购买一台新的机器(数据节点),克隆一台新的节点
2. 修改配置
hosts /etc/hosts
hostname /etc/hostname
ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-enxx
3. 安装软件
jdk/hadoop
xcall.sh/rsynch2.sh (主节点中脚本的for语句)
注意:添加当前新节点的SSH无密登陆,要设置全面
3.1 让master 访问当前新节点
3.2 让resourceManager 访问当前新节点
4. 服役(在主节点,NameNode)
4.1 在配置文件中创建一个服役的节点的列表配置文件
touch /opt/programfile/hadoop/etc/hadoop/dfs.hosts
vi /opt/programfile/hadoop/etc/hadoop/dfs.hosts
服役节点列表:
s201
... ...
s204(添加的节点)
4.2 将此文件告知hadoop集群(在系统配置文件中,配置此参数)
将服役列表配置文件的路径添加到hdfs-site.xml中
<property>
<name>dfs.hosts</name>
<value>/opt/programfile/hadoop/etc/hadoop/dfs.hosts</value>
</property>
注意:分发配置文件
4.3 刷新节点(NameNode,读取配置文件中的内容)
hdfs dfsadmin -refreshNodes
4.4 web查看此节点
4.5 更新ResourceManager
yarn rmadmin -refreshNodes
4.6 在namenode配置文件etc中修改slaves (配置子节点列表)
4.7 在新的节点上启动进程(datanode/nodeManager)
hadoop-daemon.sh start datanode
yarn-daemon.sh start nodemanager
4.8 web查看此节点
<2>节点的退役
当前集群规模缩减
步骤:
1. 在namenode的配置文件中,创建退役的配置文件 : dfs.hosts.exclude
touch /opt/programfile/hadoop/etc/hadoop/dfs.hosts.exclude
vi /opt/programfile/hadoop/etc/hadoop/dfs.hosts.exclude
服役节点列表:
s202(退役的节点)
2. 在nameNode中的hdfs-site.xml中添加退役列表
<property>
<name>dfs.hosts.exclude</name>
<value>/opt/programfile/hadoop/etc/hadoop/dfs.hosts.exclude</value>
</property>
3. 刷新NameNode节点(NameNode,读取配置文件中的内容)
hdfs dfsadmin -refreshNodes
刷新resourcemanager节点
yarn rmadmin -refreshNodes
4. web查看此节点
5. 等待节点完全退役后,停止相关的进程
hadoop-daemon.sh stop datanode
yarn-daemon.sh stop nodemanager
6. 更新服役文件
将s202(退役的节点)从服役列表中删除
7. 刷新NameNode节点(NameNode,读取配置文件中的内容)
hdfs dfsadmin -refreshNodes
刷新resourcemanager节点
yarn rmadmin -refreshNodes
8. web查看此节点
三、HDFS常见操作
<1>Hadoop归档 (HDFS不适合存储大量的小文件) (NameNode的优化)
1. 问题
NameNode存储一个数据需要消耗150byte,内存资源比较昂贵,普遍都128G/256G
NameNode不管DataNode中存储的数据大小,每一个数据Block都占用150byte
小文件较多,造成namenode中内存资源的浪费
2. 归档
将多个小文件看成一个大文件,给付给Namenode维护
步骤:
liux上:小文件
~e1.xml
~e2.xml
~e3.xml
~myfile.txt
~newfile.txt
HDFS存储:
1. 启动yarn进程
start-yarn.sh
2. 使用归档命令 : har filesystem (namenode把文档文件当成一个单独的文件,存储多个小文件)
hadoop archive -archiveName zhangsan.har -p /home/zhangsan/ ... /home/lisi
myfiles.har
3. 查看、复制、移动、删除等操作
hadoop fs -lsr -mv -cp -rm har:///zhangsan.har/myfile.txt
<2>回收站
2.1 启动回收站: core-site.xml
回收站数据的存储时间:分钟
<property>
<name>fs.trash.interval</name>
<value>2</value>
</property>
检查回收站是否可以回收的时间:分钟
<property>
<name>fs.trash.checkpoint.interval</name>
<value>1</value>
</property>
2.2 修改回收站的所有者
<property>
<name>hadoop.http.staticuser.user</name>
<value>dr.who</value>
</property>
2.3 回收站的位置
/user/用户名称/.Trash/current/删除文件的位置和名称
2.4 恢复数据
从回收站进行数据的移动或者拷贝