HDFS操作
1 HDFS文件上传
2 HDFS文件下载
3 定位文件读取
4 HDFS写数据流程
- 客户端向NameNode请求上传文件(test.txt)
- NameNone向客户端响应可以上传文件
- 客户端请求上传第一个Block(0-128m),请返回DataNode
- NameNone给客户端返回dataNode2, dataNode2节点,表示采用节点存储数据
- 客户端请求每一个dataNode节点建立Block传输通道
- 每一个dataNode节点回应客户端成功
- 客户端向每一个节点传输数据Packet 按顺序传输
- 最后客户端向NameNode传输数据完成
5 HDFS读数据流程
- 客户端向NameNode请求下载文件
- NameNode向客户端返回目标文件的元数据
- 客户端请求读取第一个dataNode1的数据
- dataNode1传数据给客户端
- 客户端请求读取第一个dataNode2的数据
- dataNode2传数据给客户端
- 客户端请求读取第一个dataNode3的数据
- dataNode3传数据给客户端
5.1 查看fsimage文件
1.查看位置/usr/local/hadoop-2.7.6/data/dfs/name/current
2.找到你需要查看的文件
3.转换成xml文件
4.查看文件内容
5.2 查看edits文件
转换成xml文件
查看文件内容
5.3 模拟namenode故障,并采用任一方法,恢复namenode数据
- 先启动集群,然后杀死namenode
- 删除namenode数据
- 然后启动namenode节点
- 刚访问时会发现处于安全模式,安全模式关闭再访问就可以
5.4 集群安全模式操作1
(1)hdfs dfsadmin -safemode get (功能描述:查看安全模式状态)
(2)hdfs dfsadmin -safemode enter (功能描述:进入安全模式状态)
(3)hdfs dfsadmin -safemode leave (功能描述:离开安全模式状态)
(4)hdfs dfsadmin -safemode wait (功能描述:等待安全模式状态)
6.1 DataNode工作机制
1. DataNode启动后向namenode注册
2. namenode回应DataNode1注册成功
3. DataNode1通过后,周期性(1小时)的向namenode上报所有的块信息。
4. 每 3 秒一次返回结果带有 namenode 给该 datanode 的命令如复制块数据到另一台机器,或删除某个数据块。 如果超过 10 分钟没有收到某个 datanode 的返回结果,则认为该节点不可用。
6.5 服役新数据节点
1.创建文件 dfs.hosts,添加主机
2. 在 namenode 的 hdfs-site.xml 配置文件中增加 dfs.hosts 属性
3. 刷新 namenode
4.刷新resourcemanager 节点
5. 用jps检查
6.6 退役旧数据节点
1.创建目录添加节点
2. hdfs-site.xml 配置文件中增加 dfs.hosts.exclude 属性
3. 刷新 namenode、刷新 resourcemanager
4. 检查 web 浏览器,退役节点的状态为 decommission in progress(退役中),说明数据节点正在复制块到其他节点。
6 NameNode&Secondary NameNode工作机制
NadmeNode工作机制:
负责客户端请求的响应,元数据的管理(查询,修改)
是整个文件系统的管理节点。它维护着整个文件系统的文件目录树,文件/目录的元信息和每个文件对应的数据块列表。接收用户的操作请求。
secondary namenode的工作流程
1、secondary通知namenode切换edits文件
2、secondary从namenode获得fsimage和edits(通过http)
3、secondary将fsimage载入内存,然后开始合并edits
4、secondary将新的fsimage发回给namenode
5、namenode用新的fsimage替换旧的fsimage
Secondary NameNode:
从NameNode上下载元数据信息(fsimage,edits),然后把二者合并,生成新的fsimage,在本地保存,并将其推送到NameNode,替换旧的fsimage
7 .NameNode故障了怎么办
- kill -9 namenode进程
(2)删除namenode存储的数据(/usr/local/hadoop-2.7.6/data/dfs/name)
rm -rf /usr/local/hadoop-2.7.6/data /dfs/name/*
(3)拷贝SecondaryNameNode中数据到原namenode存储数据目录
scp-rhadoop:/usr/local/hadoop-2.7.6/data/dfs/namesecondary/*/usr/local/hadoop-2.7.6/data/dfs/name
(4)重新启动 namenode
hadoop-daemon.sh start namenode