hdfsgo语言接口 hdfs教程

大数据之HDFS 在现代的企业环境中,单机容量往往无法存储大量数据,需要跨机器存储 。统一管理分布在集群上的文件系统称为 分布式文件系统。
HDFS (Hadoop Distributed File System)是 Hadoop的核心组件之一 ,  非常适于存储大型数据 (比如 TB 和 PB),HDFS 使用多台计算机存储文件,并且提供统一的访问接口,像是访问一个普通文件系统一样使用分布式文件系统 。
HDFS是分布式计算中数据存储管理的基础 , 是基于流数据模式访问和处理超大文件的需求而开发的,可以运行于廉价的商用服务器上 。它所具有的 高容错、高可靠性、高可扩展性、高获得性、高吞吐率 等特征为海量数据提供了不怕故障的存储,为超大数据集的应用处理带来了很多便利 。
HDFS 具有以下 优点 :
当然 HDFS 也有它的 劣势,并不适合以下场合:
HDFS 采用Master/Slave的架构来存储数据 , 这种架构主要由四个部分组成,分别为HDFS Client、NameNode、DataNode和Secondary NameNode 。
Namenode是整个文件系统的管理节点,负责接收用户的操作请求 。它维护着整个文件系统的目录树,文件的元数据信息以及文件到块的对应关系和块到节点的对应关系 。
Namenode保存了两个核心的数据结构:
在NameNode启动的时候,先将fsimage中的文件系统元数据信息加载到内存 , 然后根据edits中的记录将内存中的元数据同步到最新状态;所以,这两个文件一旦损坏或丢失,将导致整个HDFS文件系统不可用 。
为了避免edits文件过大,SecondaryNameNode会按照时间阈值或者大小阈值,周期性的将fsimage和edits合并,然后将最新的fsimage推送给NameNode 。
并非 NameNode 的热备 。当NameNode 挂掉的时候,它并不能马上替换 NameNode 并提供服务 。其主要任务是辅助 NameNode,定期合并 fsimage和fsedits 。
Datanode是实际存储数据块的地方,负责执行数据块的读/写操作 。
一个数据块在DataNode以文件存储在磁盘上,包括两个文件,一个是数据本身 , 一个是元数据 , 包括数据块的长度,块数据的校验和,以及时间戳 。
文件划分成块,默认大小128M,以快为单位,每个块有多个副本(默认3个)存储不同的机器上 。
Hadoop2.X默认128M ,  小于一个块的文件,并不会占据整个块的空间。Block数据块大小设置较大的原因:
文件上传 HDFS 的时候,Client 将文件切分成 一个一个的Block,然后进行存储 。
Client 还提供一些命令来管理 HDFS,比如启动或者关闭HDFS 。
Namenode始终在内存中保存metedata,用于处理“读请求”,到有“写请求”到来时,namenode会首 先写editlog到磁盘,即向edits文件中写日志,成功返回后,才会修改内存,并且向客户端返回,Hadoop会维护一个fsimage文件,也就是namenode中metedata的镜像,但是fsimage不会随时与namenode内存中的metedata保持一致,而是每隔一段时间通过合并edits文件来更新内容 。
HDFS HA(High Availability)是为了解决单点故障问题 。
HA集群设置两个名称节点,“活跃( Active )”和“待命( Standby )” , 两种名称节点的状态同步,可以借助于一个共享存储系统来实现,一旦活跃名称节点出现故障 , 就可以立即切换到待命名称节点 。
为了保证读写数据一致性,HDFS集群设计为只能有一个状态为Active的NameNode , 但这种设计存在单点故障问题,官方提供了两种解决方案:
通过增加一个Secondary NameNode节点,处于Standby的状态,与Active的NameNode同时运行 。当Active的节点出现故障时,切换到Secondary节点 。

推荐阅读