HDFS(first)
基础知识
HDFS 被设计成用来使用低廉的服务器来进行海量数据的存储,那是怎么做到的呢?
-
大文件被切割成小文件,使用分而治之的思想让很多服务器对同一个文件进行联合管理
-
每个小文件做冗余备份,并且分散存到不同的服务器,做到高可靠不丢失
类似于之前博客中写到的磁盘阵列
适合场景: 大文件多读取,且不支持对应数据的随意修改,也就是说适合海量数据PB级别的数据的存储,不支持时效较高的数据处理,说白了HDFS一般用于阿里,腾讯,美团等公司里面数据处理,由于数据量比较爆炸,使用简单数据库不会太友好,且数据库价格贵,磁盘价格低,同时可以多备份。HDFS也就是直接操作文件的一种技术,存储,可以简单这样理解,同时不适合存储较小的文件数据,里面有个block的概念,由于在前面说了,不支持数据的修改,只支持append,这样就造成如果存储数据较小的数据也占用一个block,且每个block直接不支持并发写,这样会导致效率奇低,所以一般数据大小尽量满足稍稍小于block大小即可(tips:一般块的大小一般在128M)
同时可以设置
${1024*1024*128}
${10241024128} 表示128M,可以随便写,
default: 在单机模式下为32M,集群下为128M
打开hadoop官网就会看见这样一张图:
其中nameNode 就是类似于master,存储datanode的文件地址,等处理client的信息。举个简单的例子,namenode就是部门主管,datanode就是我们这些搬砖的,namenode处理外部需求,datanode实际存储数据,处理数据(但是HDFS没有处理),可以简单将这个mapreduce,spark,flink这些类比起来
大概知识就这点,但是需要继续code,HDFS是一个codeing的东西,不是说说,这些去忽悠面试官的。
namenode:管理整个文件系统的元数据
namenode工作职责:管理元数据、维护目录结构、响应客户端请求
datanode:复制管理用户的文件数据块
datanode的工作职责:管理用户提交的数据 心跳机制 块报告
secondarynamenode:namenode的助理,帮助加载元数据,紧急情况下(例如namenode宕机),可以帮助恢复数据
这个图感觉很酷,能够说明整个数据流向:
这整个过程比较抽象,比大学老师讲课都抽象。说实话,看完这个图,等于啥都不会,不过不重要,大概看一下就ok