理解Hadoop分布式文件系统HDFS(一)

时间:2023-02-06 09:00:29

hdfs-分布式文件系统,既然是分布式文件系统,就必然涉及到网络编程,而网络编程的难度和复杂性是很大的。hdfs在数据读写和节点通讯会涉及到JAVA NIO和RPC机制,所以想要更好的理解hdfs,读懂其源码还是要有这方面相当的知识储备才行。hdfs网上的资料不少,看了那么的架构和原理,内容基本差不多,写这边文章是想记录自己对hdfs的所思所想。

1.关于hdfs的特点

高容错:在Hadoop集群运行过程中,除namenode节点外任意一台datanode宕机也不会给集群带来多大的影响,这得益于hdfs的数据副本机制。

高容量:MB、GB级数据存储对hdfs来说简直是小菜一碟,现在更多的存储TB、PB级数据。

高吞吐量:为大数据的外部应用提供高吞吐的访问支持。数据加工存在hdfs上要能够轻易的被外部应用所调用是很容易办到的,难的是高效的调用大数据量。目前在这方面有很多工具都可以做到,比如impala,Kylin等等。

流式数据访问:什么是流式数据访问?流式即为像水流一样,一点一点的流,并不是一次性加载到内存中,数据量过大的话,内存开销会很大,而流式数据访问的好处就是我读取一点数据计算一点,再读取一点再计算,不会给宝贵的内存资源造成过大的压力。

一致性原则:任一时刻,对一个文件只有一个写操作,可以有多个读操作,只可以追加文件内容,不支持随机写入。这么做的原因是因为假如任务在运行过程,一旦数据发生变化,很有可能造成计算的结果和预想的不一致或者错误。

就近原则:计算程序总是靠近所需数据最近的地方。计算程序在A节点,所需数据在B节点,避免不了要进行IO操作,而且是跨节点之间的数据传输。在上数据量很大的情况下,移动数据势必会造成网络拥塞,从而降低系统的吞吐量。

高延迟:hdfs并不适合低延迟的数据访问,因为它并不是面向用户而设计的,它是面向批处理的。


2.为什么hdfs不适合存储大量小文件?

   应为文件系统的元数据信息是存在namenode的内存中,其内存大小决定了存储的文件数量。大量小文件必然会降低namenode所能存储的文件数量,也降低了hdfs的容量。

数据文件、目录、数据块所占大小为150字节,根据namenode内存大小即可以估算出大致的可存储文件数量。


3.hdfs的读写操作:

理解Hadoop分布式文件系统HDFS(一)

读写操作都是客户端先向namenode节点发送读写请求,不同的是中间的过程不同,很好理解。

4.关于数据块的大小?

hdfs默认的数据文件数据块大小为64MB。一般而言文件系统的块也就几千个字节,为什么hdfs会设置这么大。原因是块设置的大,寻址开销就会小,就会缩短数据的传输时间。项目中就将块大小调至128MB,当然块也不能太大。有一点需要注意的是hdfs中的文件不足一个块大小不会占据整个块的空间,这点设计还是挺实用的。