https://hadoop.apache.org
A distributed file system that provides high-throughput access to application data.
特点:
- 大文件、一次写入多次读取,修改只支持Append
- 多副本
- 流式、非低延时
一 概念
元数据、File-Block、机架、副本、读数据、写数据
File-Block、Replication
QJM部署
NameNode、DataNode、ZKFC、JournalNode
HA
zk节点
- /hadoop-ha/${dfs.nameservices}/ActiveBreadCrumb 永久节点
- /hadoop-ha/${dfs.nameservices}/ActiveStandbyElectorLock 临时节点
代码
org.apache.hadoop.hdfs.tools.DFSZKFailoverController
二 常用命令
hdfs dfs -ls /
hdfs dfs -du -h /
hdfs dfsadmin -report
hdfs haadmin -getAllServiceState
hdfs fsck /tmp/36c8b0727c814dc2ae5d520a45fadeb0.51c9f1f1e3652991ed3071c6c0bb0264 -files -blocks -locations -racks
hdfs dfs -setrep 2 /user/hive/warehouse/temp.db/test_ext_o/000000_0
hdfs balancer -threshold 10
hadoop distcp hdfs://master1:8020/foo/a hdfs://master1:8020/foo/b hdfs://master2:8020/bar/foo
三 读写过程
读
写
四 Namenode相关
文件
全量+增量
fsimage、edit log
内存估算
Total = 198 ∗ num(Directory + Files) + 176 ∗ num(blocks) + 2% ∗ size(JVM Memory Size)
五 Datanode相关
分配策略
选择策略:
- 1 当前机架(相对hdfs client而言)chooseLocalNode
- 2 远程机架(相对hdfs client而言)chooseRemoteRack
- 3 另一机架
- 4 全部随机 chooseRandom
代码:
org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.findNewDatanode
副本检查
BlockManager中启动线程ReplicationMonitor,ReplicationMonitor定期检查哪些block存在副本缺失,并将待复制block信息通知原始DataNode,DataNode收到信息后会不断复制block,默认一次2个block;
代码:
org.apache.hadoop.hdfs.server.blockmanagement.BlockManager
相关配置:
dfs.replication
dfs.namenode.replication.interval
dfs.namenode.replication.work.multiplier.per.iteration
dfs.namenode.replication.max-streams
六 安全模式
SafeMode 是 NameNode 的一种特殊状态,在这种状态下,文件系统只接受读数据请求,而不接受上传、删除、修改等变更请求。
在 NameNode 主节点启动时,HDFS 首先进入安全模式,DataNode 在启动的时候会向 NameNode 发送心跳信号并汇报可用的 block 的状态,当整个系统达到安全标准时,HDFS 自动离开安全模式。
安全标准:block缺失率低于0.1%
dfs.namenode.safemode.threshold-pct=0.999
退出安全模式命令
hdfs dfsadmin -safemode leave