一、HDFS的简介
分布式文件系统 HDFS Hadoop Distributed FileSystem 基于流数据访问模式处理超大规模的文件 适合应用大规模的数据集上 HDFS的优点二、HDFS的特性
高容错,可扩展,可配置性强 跨平台 shell命令接口 机架感知 负载均衡 web界面三、HDFS的目标
检测和快速恢复硬件故障 流式数据访问 大规模的数据集 简化一致性模型 移动计算的代价比移动数据的代价 可移植性强 通信协议CRP 基础TCP/IP协议之上的一种远程过程访问的协议四、HDFS的核心设计
数据块是HDFS文件系统上存储数据的基本单位
计算机存储数据的基本单位是byte=8bit int=4byte long=8byte 存储海量数据的时候,需要考虑吞吐量(block)
HDFS的块大小默认是128M 小于一个块的文件,不会占据整个块的空间
对块抽象所带来的好处
1) 解决了,一个文件有可能比集群中单个节点磁盘容量还要大 进行分块来存储
2)使用块的概念而不使用文件的概念,简化了HDFS存储的机制 ,在hdfs内部只有快的概念 存储的单位是块,而不是文件
3)块非常适合用于文件的备份和复制,进而提高数据的容错能力和恢复能力
数据块的复制
1)HDFS为了做到可靠性,它会创建同一块数据的多个副本,这些副本都存储在计算节点 datanode
2)HDFS为每个文件存储块的序列
3)每个文件的块的大小和复制因子replication是可以配置的, hdfs-site.xml
数据块副本的存放策略
HDFS是以同一个份数据的多个副本机制来保证数据可靠性
1280M/128 = 10 1 3 = 3
1:存储在本地机器所在的hdfs的目录里
2:存储在不同于当前机器所在的机架的另外一个机架上的某一个机柜上的某一个机器上
3:可以存储在当前机器所在的机架上的某一个机柜上的某一个机器上 23 = 3
安全模式
hadoop dfsadmin -safemode leave 离开安全模式
hadoop dfsadmin -safemode get 查看安全模式的状态
hadoop dfsadmin -safemode enter 手动进入安全模式
hadoop dfsadmin -safemode wait 等待安全模式结束
负载均衡
start-balancer.sh -t 10%
stop-balancer.sh
机架感知
副本存放…
core-site.xml
topology.script.file.name
/home/zkpk/tmp/f1.p
五、HDFS的体系结构
Master/Slave架构
六、HDFS的主要组件
NameNode NN
1)存储文件的元数据
2)存储在内存中
3)存储的内容信息:
文件名 ,文件目录结构,文件属性(生成的时间,副本数,文件的权限), 文件的块列表信息,块 列表与块所在的DN的地址映射信息。
4)NameNode是中心服务器,单一节点,负责管理文件的名字空间以及客户端对文件的访问 NN一旦宕机,那么元数据就会丢失 连续不断的写数据 产生大量元数据 ,这些元数据会议edits。。。。的方式存储在内存中
5)文件操作,NameNode负责文件的元信息的操作,DataNode负责文件内容的新增或删除,读写请求。 数据流不经过NameNode
读数据,写数据 只会询问将要联系哪个DataNode
6)副本到底存放到哪些DataNode上,是由NameNode决定的,NN根据全局情况做出放置副本的决定, 读取文件的时候,NN尽量让client读取离它最近的datanode上的副本,是为了节省网络的贷款和延迟。
7)NameNode全权管理数据块的复制,还有NameNode周期性的接受从DataNode发送过来的心跳和块的状态报告信息
若接受到心跳信息,NN认为DN工作正常,如果在10分钟后还接受到不到DN的心跳,那么NN认为DN已经宕机了,这是偶 这时候NN准备要把DN上的数据块进行重新的复制。 块的状态报告包含了一个DN上所有数据块的列表,blocks report
每个1小时发送一次
8)NameNode的物理结构
master节点 /home/zkpk/hadoopdata/dfs/name,namesecondary
name/current,in_user.lock
in_use.lock 是一个锁,用来保证namenode的唯一性
current 就是当前namenode存储元数据的目录
current/edits — 对hdfs进行读写操作时产生的元数据的记录文件
current/fsimage ---- 镜像文件,这个是edits在一定的条件下经过secondaryNamenode合并之后产生的高密度的镜像文件。
DataNode 运行在从节点的守护进程,数据节点
1)存储文件的内容
2)文件内容保存到磁盘(blk, blk.meta)
3) DataNode 中维护了blockid和datanode本地文件的映射关系
4)一个数据块在DataNode进程所在的节点上以文件的形式存储在本地磁盘上 包括两个文件:
a.一个是数据本身
b.元数据(这个block块的元数据)数据块的长度,校验和,时间戳
5)DataNode启动后,会向NN进行注册,并且会每个1小时向NN汇报自己本地所有块的状态报告信息
6)心跳,主要是为让NN知道DN还活着。心跳在回来的时候NN就可以把命令携带给DN了 这的命令:比如块的复制,删除某个数据块
SecondaryNameNode 第二个NameNode
SNN是辅助的NN SNN分担了NN的对editslog日志的合成 参考图来认识。
fs.checkpiont.period 3600s
fs.checkpiont.size 64M