介绍
hadoop是一个分布式文件系统,运行在多台机器上,具有高容错性,可运行在廉价的机器上(hdfs用java构建,支持java的机器)。
目标
1、故障检测和快速自动恢复是HDFS的核心架构目标
2、为批处理而设计,适合高吞吐的数据访问,而不是低延迟的小文件访问,适合处理大型文件
3、保持数据一致性,文件一旦被创建、写入和关闭,除了追加和截断外,不应该去更新他,即一写多读
4、hdfs为应用程序提供接口,让计算更接近数据,以减少网络开销,增加系统总体吞吐量,提高运行效率
角色
namenode:一个集群只有一个活跃的master server,用来管理命名空间和客户端访问文件的主服务器构成。负责文件的操作(open、close、rename、move)、文件块到数据节点集的映射。
DataNode:用于管理附加到运行在自身节点上的存储。一个文件通常被分割成一个或多个块,存储在数据节点集中。负责文件的读写服务。根据namenode操作文件块(create、delete、replication)。
数据备份
1、文件中除了最后一个块,其他块的大小完全相同
2、namenode定期从每个DataNode获取心跳和块报告,心跳用来确认DataNode还活着,块报告包含该节点的所有块列表,确保数据访问的正确性
3、副本放置是一个需要大量调优和经验
4、DataNode通常分布在不同的机架上,通过交换机实现网络互通,同一机架的网络带宽通常大于不同机架机器间的网络带宽
简单的副本放置策略:副本放在同一机架上,使得副本均匀的分布在集群中,容易平衡负载均衡。缺点是会增加写成本
常见的策略:副本数为3时,第一个副本放在本地机器上,第二个放在同一机架的其他机器上,第三个放在不同机架的某台机器上。这样可以提高写性能,保证数据的可靠性和可用性。
副本数大于3:如果复制因子大于3,则随机确定第4个和后面几个副本的位置,同时保持每个机架的副本数量低于上限(基本上是(replicas - 1) /机架+ 2)。最大副本数为DataNode的总数。
元数据持久性
1、namenode使用EditLog(事务日志)记录文件系统命名空间的元数据发生的每个更改,这个EditLog存储在namenode本地文件系统。(元数据的快照)
2、同时,还有一个FSImage记录整个命名空间的映射,也存储在本地文件系统中。(文件系统镜像)
3、当namenode启动或处罚checkpoint时,将把EditLog更新到FSImage中,并刷新本地磁盘的FSImage。(过程称为checkpoint)
4、可触发checkpoint条件:①给定的时间间隔 ②EditLog累计到一定数量
通讯协议
TCP/IP。
RPC:远程过程调用,DataNode向NameNode发送请求或通信
健壮性
①常见的三类故障:Namenode故障、DataNode故障,网络分区
网络分区可能导致slave与master没有心跳交流而失去连接,可通过设置最大失去心跳时间判断slave挂掉,避免数据块复制风暴。对于挂掉的slave,master考虑要不要复制数据块。复制数据块的原因有很多,比如副本损坏、硬盘损坏、副本数增加、slave挂掉等。
②数据完整性:当数据块已经损坏,客户机可以选择从具有该块副本的另一个DataNode检索该块。
③集群再平衡:比如某个节点的空闲空间低于某个值,会从这个节点转移一部分数据到另一个节点
④元数据损坏:可通过设置EditLog和FSImage的副本数同步更新,当出现故障选择最近的恢复系统。或者选用多个namenode、NFS上的共享存储、使用分布式编辑日志journalnode。
⑤快照:在特定时刻存储数据副本,发生损坏则回滚
数据结构
一写多读,可设置文件块大小,默认128MB。数据块复制,namenode列出符合的节点,然后写入第一个节点,后续的节点依次在复制管道接收前一个节点的数据块
易用性
①FS Shell:给普通用户用的,hadoop dfs[fs] -cat[…] /…
②DFSAdmin:给管理员用的
③Web UI
空间回收
文件删除或恢复:如果启用了垃圾配置,被FS Shell删除的文件不会立即从HDFS中删除