HDFS
简要概括
HDFS(Hadoop Distribute File System),从它的英文全称拆开理解如下:
- Hadoop : 它是Hadoop的组件,言简意赅,其实不只是组件,它还是hadoop的核心,基础;
- Distribute : 分布式的,说明它能多台机器共用;
- File System: 本身是一个文件系统,类似于linux的文件系统;
在hdfs集群中,机器被分为存储元数据的NameNode和存储文件数据的DataNode。
重要特性
不同于linux文件系统,hadoop的文件系统有以下特性:
基于操作系统的文件系统之上
:
操作系统负责将文件数据写到物理磁盘的不同位置,hdfs则将它的数据存到了操作系统的文件系统中;为大量数据提供冗余存储
:
默认每个文件存三份,为了保持高可用性,这三份文件会存放到不同DataNode机器上,具体存在哪里,怎么去获取这个文件,这些信息保存在集群的NameNode上。WriteOnece
这个怎么理解,hadoop不像linux、windows的文件系统,linux和windows的文件可以通过文本编辑器去修改内容,而hdfs的文件,它是没有vim去修改它的内容的,一旦存到hdfs,修改方法就是删掉原来的文件,再重新存新文件。分块存储,大文件存储
hdfs 默认将文件分为128M的block,存到不同的机器上,由此可见,他适合存大文件,因为如果小文件特别多的话,每个文件分128M是很浪费资源的,小文件特别多的话,推荐压缩再上传hdfs。
hdfs的高可用
-
hadoop2.0以下的解决方案——冷备份架构
Hdfs的各种client与namenode之间交互,活跃的namenode会在响应client请求的同时将元数据同步到备份的Secondary NameNode,一旦NameNode 挂掉(宕机)之后,激活备份的namenode,仍然可以使用。
(上图也可以看到,文件分块,存三份。) -
hadoop 2.0+ 高可用架构
zookeeper的zkfc(ZookeeperFailoverController)进程负责对两台NameNode的状态进行监控,要求NameNode定时发送心跳(证明自己还活着)信息,一旦某段时间内没有收到心跳信息返回,就开始集群选举,选取新任NameNode自动激活,实现了高可用,与上述的手动切换namenode不同,zkfc进程详细信息我就不多说了,看下图:
hdfs基本操作
通过hdfs dfs
的前缀加上linux文件操作的各种命令,熟悉linux的朋友可以亲切的操作hdfs(注:hadoop fs
前缀虽然也能用,但是官方已经说明以后有新命令不再支持,建议使用hdfs dfs
)
- 查看目录
hdfs dfs -ls [hdfs目录]
列举当前或者指定路径目录中的文件,不加hdfs目录就是当前目录(建议使用绝对路径,当前路径指的是/user/<当前用户>
,比如没有使用kerberos安全的集群root用户的当前路径就是/user/root)
- 上传文件
hdfs dfs -put <本地文件> <hdfs路径>
上述命令就是将本地的文件上传到了hdfs的目录下面
- 下载文件
hdfs dfs -get <hdfs文件名> <下载到哪个目录>
与put相似,将hdfs的文件下载至操作系统文件系统。
- 修改文件权限
hdfs dfs [-chown] [-chmod] [-getfacl] [-setfacl]
上述命令与linux文件操作系统类似,不展开说明。
注:关于hdfs权限,后面再专门写一篇hdfs的权限说明,基本开发过程中有关于hdfs的最多问题,也就是权限问题了;此外hdfs提供了各个其他组件系统的接口,不属于初探系列,以后再说,原创不易,轻喷。