一、HDFS介绍
我们前面已经知道了HDFS是一个分布式的文件系统,具体这个分布式文件系统是如何实现的呢?
我们来举个例子分析一下。
小明租房:
小明同学呢,今年是大四,需要离校去实习了,出去实习首要解决的是住宿的问题,目前软件行业很少包住宿的,反正我是没听说过,但是小明呢,有一个特点,就是懒,还穷,天天出去住酒店肯定是住不起的,那只能租房了,租房呢他还不想自己去找房子,嫌麻烦,所以就随便在路边找了一个二房东贴的广告,单间出租,拎包入住,无中介费,押一付一,一月300,小明一看,可以,还不错,所以就直接打电话过去看房子办手续了,这样就解决了住宿的问题。
紧接着小明的同学看他这么快就搞定了住宿问题,房租也挺便宜,都问他要二房东的电话,小明就把二房东的电话发到了他们的年级群里,上千人啊,结果二房东的手机就被打爆了,最后只能关机了,人太多了,实在搞不定了。
因为目前有租房需求的学员太多了,全部都去找这一个二房东,他是搞不定的,因为他每天带看的人数是有限的。
那这个时候怎么办呢?
小明同学还是比较热心的,发现二房东解决不了这么大的需求,然后他正发愁呢,结果一抬头看到了一个中介公司,小明露出了满嘴的大白牙。
然后他就顺利搞到了这个中介公司的电话,赶紧把这个电话发到了年级群里面,这个时候,当再有学员有租房需求的时候,直接打中介公司的电话,然后中介公司会让具体的工作人员直接联系这个学员,负责他的租房需求,每一个工作人员最多负责5个人,因为中介公司里面是有很多工作人员的,这样一分流,就很轻松的解决了这个问题。
这个时候针对中介公司而言,它只负责管理房源和工作人员就行了,具体干活的是工作人员。
这样就算同时过来很多人,中介公司也是可以扛得住的,因为具体看房租房的流程是直接和工作人员对接的,不会造成阻塞。
ok 这就是小明租房的一个案例,那这个案例和我们要讲的HDFS有什么关系呢?
不要着急,我们来往下面看。
假设让我们来设计一个分布式的文件系统,我们该如何设计呢?
看这个图片,用户在写入数据和读取数据的时候会通过一个文件系统,这个文件系统后面会有很多台服务器,所以我们的数据就可以存储在多台服务器上面。后期服务器增加或者减少,对我们用户而言,不用关注,这个统一由文件系统进行管理,我们只需要和文件系统进行交互就可以了。
这样是不是就实现了分布式存储了,这种方案在实际应用中可行吗?
在这里就可以把文件系统理解为二房东,服务器理解为房子,这种设计架构会存在一个问题,假设同时过来很多人都需要租房子,那么一个二房东是忙不过来的,就会造成阻塞。
那继续往下面看
现在这种设计是,我们去找一个中介公司,这里的主节点就可以理解为一个中介公司
这里的从节点就可以理解为是房源,中介公司会在每块房源都安排一个工作人员,当我们找房子的时候,先联系中介公司,中介公司会告诉我们哪里有房子,并且把对应工作人员的信息告诉我们,我们就可以直接去找对应的工作人员去租房子。这样对于中介公司而言,就没什么压力了。
中介公司只负责管理房源和工作人员信息,具体干活的是工作人员。
这样就算同时过来很多人,中介公司也是可以扛得住的,因为具体看房租房的流程是我们直接和工作人员联系的,不会造成阻塞。
所以对应到我们的分布式存储设计上面:
用户请求查看数据时候会请求主节点,主节点上面会维护所有数据的存储信息,
主节点会把对应数据所在的节点信息返回给用户,
然后用户根据数据所在的节点信息去对应的节点去读取数据,这样压力就不会全部在主节点上面。
这个就是HDFS这个分布式文件系统的设计思想。
二、HDFS(Hadoop Distributed File System)
HDFS的全称是Hadoop Distributed File System ,Hadoop的 分布式 文件 系统
它是一种允许文件通过网络在多台主机上分享的文件系统,可以让多台机器上的多个用户分享文件和存储空间
其实分布式文件管理系统有很多,HDFS只是其中一种实现而已
还有 GFS(谷歌的)、TFS(淘宝的)、S3(亚马逊的)
为什么会有多种分布式文件系统呢?这样不是重复造轮子吗?
不是的,因为不同的分布式文件系统的特点是不一样的,HDFS是一种适合大文件存储的分布式文件系统,不适合小文件存储,什么叫小文件,例如,几KB,几M的文件都可以认为是小文件
三、HDFS的Shell介绍
通过前面的学习,我们对HDFS有了基本的了解,下面我们就想实际操作一下,来通过实操加深对HDFS的理解
针对HDFS,我们可以在shell命令行下进行操作,就类似于我们操作linux中的文件系统一样,但是具体命令的操作格式是有一些区别的
格式如下:
使用hadoop bin目录的hdfs命令,后面指定dfs,表示是操作分布式文件系统的,这些属于固定格式。
如果在PATH中配置了hadoop的bin目录,那么这里可以直接使用hdfs就可以了
这里的xxx是一个占位符,具体我们想对hdfs做什么操作,就可以在这里指定对应的命令了
大多数hdfs 的命令和对应的Linux命令类似
HDFS的schema是hdfs,authority是集群中namenode所在节点的ip和对应的端口号,把ip换成主机名也是一样的,path是我们要操作的文件路径信息
其实后面这一长串内容就是core-site.xml配置文件中fs.defaultFS属性的值,这个代表的是HDFS的地址。