大家平时经常用的百度网盘存放电影、照片、文档等,那有想过百度网盘是如何存下那么多文件的呢?难到是用一台计算机器存的吗?那得多大磁盘啊?显然不是的,那本文就带大家揭秘。
分布式存储思想既然一台机器的存储所需的磁盘有上限瓶颈,那么我们能否利用多台机器形成一个整体用来存储呢?这就是我们所说的分布式存储。
单机纵向扩展:磁盘不够加磁盘,有上限瓶颈限制
多机横向扩展:机器不够加机器,理论上无限扩展
Hadoop就是采用了这样的一个思想,设计出了分布式存储系统HDFS。
HDFS介绍和使用HDFS(HadoopDistributedFileSystem),意为:Hadoop分布式文件系统。它是ApacheHadoop核心组件之一,作为大数据生态圈最底层的分布式存储服务而存在。也可以说大数据首先要解决的问题就是海量数据的存储问题。
HDFS主要是解决大数据如何存储问题的。分布式意味着是HDFS是横跨在多台计算机上的存储系统。
HDFS是一种能够在普通硬件上运行的分布式文件系统,它是高度容错的,适应于具有大数据集的应用程序,它非常适于存储大型数据(比如TB和PB)。
HDFS使用多台计算机存储文件,并且提供统一的访问接口,像是访问一个普通文件系统一样使用分布式文件系统。
HDFS使用HDFS安装好了,具体是如何使用呢,如何上传和下载文件呢?一共有两种方式,通过shell命令和web页面。
shell命令操作HDFS
类似linux命令,可以直接通过在命令行界面操作。Hadoop提供了文件系统的shell命令行客户端:hadoopfs[genericoptions]
创建文件夹
hadoopfs-mkdir[-p]path
path为待创建的目录
-p选项的行为与Unixmkdir-p非常相似,它会沿着路径创建父目录。
查看指定目录下内容
hadoopfs-ls[-h][-R][path]
path指定目录路径
-h人性化显示文件size
-R递归查看指定目录及其子目录
上传文件到HDFS指定目录下
hadoopfs-put[-f][-p]localsrcdst
-f覆盖目标文件(已存在下)
-p保留访问和修改时间,所有权和权限。
localsrc本地文件系统(客户端所在机器)
dst目标文件系统(HDFS)
/alvinhadoopfs-putfile:///etc/profilehdfs://node1:8020/alvin复制代码
查看HDFS文件内容
hadoopfs-catsrc
读取指定文件全部内容,显示在标准输出控制台。
注意:对于大文件内容读取,慎重。
下载HDFS文件
hadoopfs-get[-f][-p]srclocaldst
下载文件到本地文件系统指定目录,localdst必须是目录
-f覆盖目标文件(已存在下)
-p保留访问和修改时间,所有权和权限。
更多命令可以查看官方文档
/docs/…
2.web界面操作HDFS
另外一种更简单直观的方式是通过web界面操作HDFS,默认是50070端口,如下图所示:
HDFS的架构HFDS采用分布式的架构,可能有成百上千的服务器组成,每一个组件都有可能出现故障。因此故障检测和自动快速恢复是HDFS的核心架构目标,下面是HDFS的官方架构图:
主从架构HDFS集群是标准的master/slave主从架构集群,一般一个HDFS集群是有一个Namenode和一定数目的DataNode组成。
主角色:NameNode
NameNode是Hadoop分布式文件系统的核心,架构中的主角色。
NameNode维护和管理文件系统元数据,包括名称空间目录树结构、文件和块的位置信息、访问权限等信息。
基于此,NameNode成为了访问HDFS的唯一入口。
从角色:DataNode
DataNode是HadoopHDFS中的从角色,负责具体的数据块存储。
DataNode的数量决定了HDFS集群的整体数据存储能力,通过和NameNode配合维护着数据块。
主角色辅助角色:SecondaryNameNode
此外,HDFS中还有一个SecondaryNameNode,虽然途中没有画出,那它有什么用呢?
SecondaryNameNode充当NameNode的辅助节点,但不能替代NameNode。
主要是帮助主角色进行元数据文件的合并动作。可以通俗的理解为主角色的“秘书”。
分块存储由于有的文件很大,一台机器也存不下,于是HDFS会对我们的文件做一个物理上的切割,也就是分块存储。
HDFS中的文件在物理上是分块存储(block)的,默认大小是128M(134217728),不足128M则本身就是一块。
副本机制既然分布式存储海量数据,那么肯定需要成千上百的机器,这样很有可能其中一台机器宕机,出故障了怎么办呢?
当然HDFS也想到了解决方案,文件的所有block都会有副本。副本系数可以在文件创建的时候指定,也可以在之后通过命令改变。副本数由参数控制,默认值是3,也就是会额外再复制2份,连同本身总共3份副本,而且这个副本尽量会分散在不同的机架上,规避风险。
NameNode高可用既然DataNode有副本,出现数据丢失可能性很小,那NameNode挂了不是照样凉凉?
不用担心,那我在启动一个NameNode备在那里不就行了吗。
存在两个NameNode,一个是活动的NameNode,称为Active,另外一个是备用的NameNode,称为Standby。Active节点的数据通过JournalNode节点同步给Standby节点。当Active节点出现问题时,需要将Standby节点切换为Active节点来为客户端提供服务,这样就保证了高可用。
元数据管理前面提到NameNode中包含元数据,那么究竟具体是哪些内容呢?
在HDFS中,Namenode管理的元数据具有两种类型:
文件自身属性信息
文件名称、权限,修改时间,文件大小,复制因子,数据块大小。
文件块位置映射信息
记录文件块和DataNode之间的映射信息,即哪个块位于哪个节点上。
总结现在你终于知道为什么百度网盘可以存下海量的数据了吧,主要采用的是分布式的存储,将数据分块多副本的方式存储到多个数据节点DataNode,然后由唯一的NameNode节点去管理这个文件的信息,比如说它是在那些DataNode节点上,大小是多少等等,注意这里是DataNode主动告诉NameNode它这里有哪些文件块。
版权所有 © Copyright © 2002-2030 龙辉游戏资讯网站地图