Hdfs(分布式文件系统)是hadoop的两大核心(hdfs和mapreduce)之一,hdfs又是mapreduce运算的数据存放地,因此hdfs是hadoop的根基。没有hdfs,就没有hadoop。
Hdfs是一个分布式文件系统,作用就是用来存放数据的。大家想一想,对于存放数据的文件系统,我们应该怎么学习,掌握哪些知识哪?
首先我们应该知道是如何存放的吧,hadoop是通过DataNode存放数据的。那么一个文件存放在哪些DataNode上,文件多大,这些信息在哪里?是NameNode。可以看出,NameNode是管理DataNode的。真正存放数据的地方是DataNode,管理文件与这些DataNode之间的映射关系的是NameNode。这就是核心,就这么简单。
那么,DataNode在磁盘存放数据的基本单位是什么哪?块。一个块默认是64MB。
既然是分布式存放数据,那么就需要考虑DataNode节点所在机器的故障,因此需要对数据冗余备份,也就是要设置存放的数据的副本数。可以想象到:副本数肯定小于等于DataNode数量。
假设数据有3份副本,也就是说2个存放数据的DataNode坏掉,不会影响数据的安全性,还有一份可以用。想过吗,管理这些DataNode的NameNode坏掉怎么办?没办法。这里的NameNode是单点的,一旦NameNode坏掉,hdfs就不能用了。因此,必须备份NameNode的数据,防止系统down掉,这就是SecondaryNameNode的职责。SecondaryNameNode的作用就是备份NameNode。目前不能实时备份。不过,有胜于无嘛。
以上谈的都是原理性的东西。对于我们程序员,最关心的是如何访问、操作这些数据。这就是hdfs公布的对外访问方式,包括java访问方式和shell访问方式。这两种访问方式都是非常重要的,必须熟练掌握。
如果把我上面说的知识都掌握了,hdfs这块就过关了。
|