一、HDFS基础知识
1. namenode 负责:
管理着文件系统命名空间
– 维护着文件系统树及树中的所有文件和目录
存储元数据
– NameNode保存元信息的种类有:
• 文件名目录名及它们之间的层级关系
• 文件目录的所有者及其权限
• 每个文件块的名及文件有哪些块组成
元数据保存在内存中
– NameNode元信息并不包含每个块的位置信息
元信息持久化
- 在NameNode中存放元信息的文件是fsimage。在系统运行期间所有对元信息的操作都保存在内存中并被持久化到另一个文件edits中。并且edits文件和fsimage文件会被SecondaryNameNode周期性的合并
fsimage: 内存中的元数据定时写入 磁盘,保存在 fsimage 中,是一个checkpoint
edits: 在这个checkpoint之后, 文件系统定时更新会记录在 edits 文件中
2. datanode 负责:
- 存储文件
- 文件被分成block存储在磁盘上
- 为保证数据安全,文件会有多个副本
3. Secondary NameNode
合并FsImage 和 EditLog 成为一个新的snapshot
定期清理和压缩NameNode的文件系统的状态信息,以便NameNode更高效
FsImage:is a snapshot of the filesystem at some checkpoint
EditLog:records each incremental change (delta) to the filesystem after that checkpoint
4. JobTracker 负责:
- 接收客户提交的计算任务
- 把计算任务分给 TaskTrackers 执行
- 监控TaskTrackers 的执行情况
5. TaskTrackers 负责:
- 执行 JobTracker 分配的计算任务
二、HDFS命令
1. hadoop fs -setrep -R -w 3 /data/analytic/ //手动设置指定路径下所有文本的副本个数
2. hadoop fsck / 可以查看/ 路径下所有文件的健康状况
3. hadoop fsck -delete 可以移除 missing block
4. hadoop fsck [filepath] -files -blocks -racks //查看文件的具体存储信息(文件被分成多少个block, 在哪个 rack 上, 有几个replica 等)
5. hadoop fsck /path/to/corrupt/file -locations -blocks -files
6. 平衡集群
dfsadmin -setBalancerBandwidth newbandwidth //默认值是 1MB
hadoop dfsadmin -setBalancerBandwidth 10485760 //更改成 10MB
hdfs balancer -threshold 5 //平衡集群数据分布,这个操作是带宽密集形操作,建议在凌晨或周末运行
7. 动态删除datanode
dfs.hosts.exclude //指向一个文件,该文件每行写一个要删除的datanode 的hostname
然后运行:hadoop dfsadmin -refreshNodes
8. 动态添加datanode
对新添加的datanode进行文件配置,在各台机子的 /etc/hosts 中添加该机子的IP, 在各台机子的/etc/hadoop/conf/slaves 中添加该机子的IP
然后手动开启 这台datanode
9. distcp(同步文件)
源 目的地
hadoop distcp /tmp/test hdfs://hudson.novalocal:8020/tmp
10. namenode 退出安全模式:
sudo -u hdfs hdfs dfsadmin -safemode leave
hadoop 在启动时,namenode 会把img 加载进内存,在安全模式中,整个HDFS对于客户端只是可读的,系统中的block具体位置信息不是由namenode来维护的,是以block list 的形式存在datanode中的,正常工作中,namenode会在内存中保留所有block的location映射信息,在安全模式中,每个datanode会把最新的block location 信息发送给namenode