HDFS
HDFS的设计理念:
- 超大存储
- 廉价x86服务器
- 流式数据访问(一次写入,多次读取,如果不借助HUE,无法直接对hdfs文件进行修改保存,需要利用 hdfs dfs –put命令)
HDFS缺点:
- 实时访问弱,如要求秒级或者毫秒级数据访问,考虑使用HBase
- 不适合存储大量小文件,HDFS启动时,Namenode将所有元数据读至内存,一条元数据150B,内存小会对Namenode有极大压力,解决方法,hdfs联邦
HDFS架构:
Namenode,Secondary Namenode,DataNode,common storage
NameNode和其冷备Secondary NameNode:
- SNN引导NN滚动更新Edit Log,将新的操作写入EditLog.new
- SNN将NN的时间最近的FSImage和时间最近的Editlog复制到SNN的检查点
- SNN将FSImage+Editlog合并成新的FSImage,将新的FSImage写入磁盘。
- SNN将新的FSImage返回给NN,NN接受FSImage直接加载和应用。NN将Editlog.new 更名为Edit Log
HDFS三副本,两冗余,副本存储策略选择,随机选择一个DataNode->另一机架节点->与副本2同机架的随机另一节点,策略选定后,会根据集群网络拓扑创建管道。
HDFS读与写:
- 读:HDFS客户端请求,NN返回数据块,主机名,HDFS Client再次向DataNode请求数据块
- 写:客户端与三个要写入数据的datanode的写入顺序与写完响应,手拉手成环。
- HDFS以写方式打开text.txt
- 请求送达至Namenode创建对应的元数据,但不与block关联
- 数据写入流,数据自动拆分成数据包。打开复制管道,管道类似于进程锁复制,
- 一批完成继续复制下一批,完成后结束。
NameNode HA:(热备)
技术点及其实现:
- 主备同步,备节点共享存储,QJM周期性获取编辑日志(Paxos算法),zookeeper的选主机制
- 防止脑裂,防止突然都挂死或者突然都具备控制权。共享存储进行隔离,客户端隔离
- 切换上层应用无感知。RPC封装,失败连接新的namenode,对应用户几乎无感知。
HDFS联邦:
- HDFS Federation+ViewFS
- HDFS Federation+ViewFS+HA
- HDFS元数据迁移,FastCopy,全局硬链接?
HDFS命令行接口:
Hdfs dfs –ls /,hdfs dfs –lsr,hdfs dfs –expunge (清空回收站,rm的第一步是mv到trash目录),hdfs dfs –cat ,hdfs dfs –touchz,hdfs dfs –mkdir ,hdfs dfs –put/copyFromLocal,hdfs dfs –get/copyToLocal