HDFS笔记,NameNode、SecondaryNameNode、DataNode功能

NameNode、SecondaryNameNode、DataNode

      • NameNode
            • (1)管理元数据
            • (2)响应客户请求
      • SecondaryNameNode
            • 减少NameNode工作量
      • DataNode
          • (1)存储数据块
          • (2)执行文件读写
      • HDFS常用命令:

NameNode

(1)管理元数据

元数据管理有三种方式:

  • 内存元数据;
  • 磁盘元数据镜像文件(FsImage),FsImage里面记录了自最后一次检查点之前HDFS文件系统中所有目录和文件的映射;
  • 数据操作日志文件(可以通过日志运算出元数据)EditLog保存了自最后一次检查点之后所有针对HDFS文件系统的操作

NameNode启动后,从磁盘读取FsImage和EditLog,将EditLog中所有的事务应用到FsImage,保存在磁盘中
HDFS笔记,NameNode、SecondaryNameNode、DataNode功能_第1张图片

(2)响应客户请求

当客户端发出读写请求时,NameNode会根据当前集群状态响应请求。

SecondaryNameNode

减少NameNode工作量

流程如下:
1. 定期与NameNode通信,请求停止使用EditLog文件,暂时写到新文件
2. 通过GET方式从NameNode获取FsImage和EditLog
3. FsImage载入内存,一条一条直行EditLog,使内存中FsImage保持最新
4. POST方式发送给NameNode,NameNode完成替换,将新文件改为EditLog

HDFS 2.0采用了HA,通过一组JournalNode相互通信,共享EditLog,实现元数据同步

DataNode

(1)存储数据块
(2)执行文件读写

HDFS写文件流程:
HDFS笔记,NameNode、SecondaryNameNode、DataNode功能_第2张图片
关键点:
1hadoop2.x版本默认块大小为128M,所以预处理文件时,对200M的文件分块就是分成128M和72M。
1第二步前,namenode需要根据client传递过来的消息来判断是否可以写文件,判断依据有是否存在目录,是否已存在文件等。
1namenode选取datanode时可以遵循机架感知策略来选择机器。默认情况没有开启,是随机选择机器。如果需要开启,需要在hadoop-site.xml文件添加,value指定一个可执行程序,输入为datenode,输出为机架。需要人为编写,一般策略是第一个副本放在一个机架,第二个副本放在和每一个副本同一个机架的机器上,第三个副本放在另一个机架的机器上。
1block传输完毕后,DataNode通知NameNode是为了让NameNode回滚日志,记录更新。
HDFS读文件:
HDFS笔记,NameNode、SecondaryNameNode、DataNode功能_第3张图片
关键点:
1第一步请求下载文件时,namenode会判断你的用户是否有可读权限,指定路径是否有文件。
1client向datanode读数据时,是一块一块读的,属于串行读取。
1当dn1宕机了,namenode会返回dn4给client去读取,如果dn4也宕机了,namenode会把元数据复制一份到另一台datanode。

HDFS常用命令:

hdfs dfs -mkdir /abc #创建名为/abc的文件夹
hdfs dfs -ls / 0 #列出根目录中的内容
hdfs dfs -ls -R / #递归列出多层文件夹的内容
hdfs dfs -put /etc/hosts /abc/hosts #把Linux系统中/etc/hosts文件上传到HDFS中
hdfs dfs -appendToFile /etc/hosts /abc/hosts
#向文件中追加内容
hdfs dfs -checksum /abc/hosts #查看文件的MD5值
hdfs dfs -du -h / #查看文件/文件夹的大小
#-h以人类友好的方式显示大小(过大时带单位)
hdfs dfs -get /abc/hosts ./hosts #把HDFS中的文件下载到本地Linux中
#注意./hosts是下载后保存到本地的位置
hdfs dfs -cat /abc/hosts #查看HDFS中文本文件的内容
#注意:只能查看文件文件
hdfs dfs -tail /abc/hosts #列出文件结尾处1KB的文件内容
hdfs dfs -mv /abc/hosts /abc/xyz #修改文件名字或移动位置
hdfs dfs -cp /abc/xyz /abc/hosts #复制文件
hdfs dfs -find / -name xyz #查找名字为xyz的文件的位置
hdfs dfs -rmdir /abc #删除名为/abc的文件夹
#注意:如果其中还有文件则不能删除
hdfs dfs -rm /abc/hosts #删除文件
hdfs dfs -rm -r /abc #递归删除文件/文件夹,文件夹中有文件也能删除
hdfs dfs -df #查看HDFS文件系统的磁盘使用情况
hdfs dfsadmin –report #查看HDFS文件系统的磁盘使用报告

你可能感兴趣的:(Hadoop)