HDFS概述与架构
概述
HDFS即Hadoop分布式文件系统。源自GFS论文。
有以下特点:
1、高容错性的分布式文件系统。
2、可构建在廉价机器上,通过多副本机制,提高可靠性。
3、易扩展、为用户提供性能不错的文件存储服务。
缺点:
1、不适合低延时数据访问,比如毫秒级的存储数据,是做不到的。
2、无法高效的对大量小文件进行存储。
3、不支持并发写入,不支持文件的随机修改(仅支持append)
HDFS为什么不适合存储小文件?
1、HDFS中存储的数据的元数据信息会加载到NameNode的内存中,每个块大概占用内存中的150字节,存储大量小文件的话,它会占用NameNode大量的内存。因为NameNode的内存是有限的, 所以这样容易挤爆NameNode。
2、一般来说,NN会不断跟踪并检查每个数据块的存储位置(通过DN的心跳信息)。数据节点需要上报的block越多,则也会消耗越多的网络带宽/时延。
3、小文件存储的寻址时间会超过读取时间,它违反了HDFS的设计目标。
解决方法: 合并小文件(合并后大小最好接近并小于等于块大小)
块(block)
HDFS中的文件在物理上是分块存储(block),块的大小可以通过配置参数( dfs.blocksize)来规定,默认大小在hadoop2.x版本中是128M,1.x中是64M。块的副本数是根据参数(dfs.replication)来规定的。
HDFS的块比磁盘的块大,其目的是为了最小化寻址开销。如果块设置得足够大,从磁盘传输数据的时间会明显大于定位这个块开始位置所需的时间。因而,传输一个由多个块组成的文件的时间取决于磁盘传输速率。
假一个文件260M,块大小为128,副本系数为3,则应有 3 * 3 个块,实际占用的空间为260M * 3 。
注:当一个4M的文件存在128M的块中时,实际占用的空间是4M。
HDFS架构
这种架构主要由四个部分组成,分别为HDFS Client、NameNode、DataNode和Secondary NameNode。其中Rack代表机架。
1)Client:客户端。
(1)文件切分。文件上传HDFS的时候,Client将文件切分成一个一个的Block,然后进行存储;
(2)与NameNode交互,获取文件的元数据信息;
(3)与DataNode交互,读取或者写入数据;
(4)Client提供一些命令来管理HDFS,比如启动、关闭、访问HDFS;
2)NameNode:NN 。管理文件系统的命名空间(namespace),以及客户端对文件的访问。
(1)管理 文件名称、文件目录结构、文件属性(创建时间、权限、副本数)等;
注:上述信息会以fsimage、editlog的方式持久化在硬盘上,启动时加载到内存中。
(2)管理 每个文件的块列表以及块所在的DataNode;
注: NN不会持久化存储以上这种映射关系,DN周期性得发送心跳信号和块状况报告(blockReport)给NN,NN在内存中动态维护这种映射关系。
(3)文件操作,NameNode 负责文件元数据的操作,DataNode负责处理文件内容的读写请求,跟文件内容相关的数据流不经过NameNode,只会询问它跟那个DataNode联系。
3) DataNode:DN。NameNode下达命令,DataNode执行实际的操作。
(1)存储一个是数据本身,一个是元数据(数据块的长度、校验和、时间戳);
(2)每隔3秒发送一次心跳。如果超过10分钟没有收到某个DataNode 的心跳,则认为该节点不可用。
(3)执行数据块的读/写操作。
4) Secondary NameNode:SNN。NN的冷备份。
(1)辅助NameNode,分担其工作量;
(2)定期合并Fsimage和Edits为新的fsimage文件,并推送给NameNode;(checkpoint机制)
参数:dfs.namenode.checkpoint.period 3600s (默认一小时备份一次。不可靠)
(3)在紧急情况下,可辅助恢复NameNode(不能马上替换)。
HDFS常用命令
1. 单独启动和关闭hadoop服务
启动名称节点
#hadoop-daemon.sh start namenode
启动数据节点
#hadoop-daemons.sh start datanode slave
启动secondarynamenode
#hadoop-daemon.sh start secondarynamenode
启动resourcemanager
#yarn-daemon.sh start resourcemanager
启动nodemanager
#bin/yarn-daemons.sh start nodemanager
停止数据节点
#hadoop-daemons.sh stop datanode
2. 常用的命令
创建目录
#hdfs dfs -mkdir /xxx
查看
#hdfs dfs -ls
递归查看
#hdfs dfs ls -R
上传
#hdfs dfs -put
下载
#hdfs dfs -get
删除
#hdfs dfs -rm
从本地剪切粘贴到hdfs
#hdfs fs -moveFromLocal /input/xx.txt /input/xx.txt
从hdfs剪切粘贴到本地
#hdfs fs -moveToLocal /input/xx.txt /input/xx.txt
追加一个文件到另一个文件到末尾
#hdfs fs -appedToFile ./hello.txt /input/hello.txt
查看文件内容
#hdfs fs -cat /input/hello.txt
显示一个文件到末尾
#hdfs fs -tail /input/hello.txt
以字符串的形式打印文件的内容
#hdfs fs -text /input/hello.txt
修改文件权限
#hdfs fs -chmod 666 /input/hello.txt
修改文件所属
#hdfs fs -chown ruoze.ruoze /input/hello.txt
从本地文件系统拷贝到hdfs里
#hdfs fs -copyFromLocal /input/hello.txt /input/
从hdfs拷贝到本地
#hdfs fs -copyToLocal /input/hello.txt /input/
从hdfs到一个路径拷贝到另一个路径
#hdfs fs -cp /input/xx.txt /output/xx.txt
从hdfs到一个路径移动到另一个路径
#hdfs fs -mv /input/xx.txt /output/xx.txt
统计文件系统的可用空间信息
#hdfs fs -df -h /
统计文件夹的大小信息
#hdfs fs -du -s -h /
统计一个指定目录下的文件节点数量
#hadoop fs -count /aaa
设置hdfs的文件副本数量
#hadoop fs -setrep 3 /input/xx.txt
- HDFS 架构概述
- JavaEE体系架构概述
- linux高可用性架构概述
- OpenDaylight控制器:SAL架构概述
- 1.Oracle深度学习笔记——内存架构之概述
- 深入学习Hadoop之第一篇——HDFS架构解析
- WinCE Boot方式及 Bootloader架构概述
- Meteor应用架构 — Mantra概述
- HDFS原理解析(总体架构,读写操作流程及源码查看等)
- 第一部分:HDFS架构,启动过程
- 大型互联网架构概述
- AngularJS学习之四(分支之二):架构概述
- Hadoop系列-HDFS设计思想与架构(四)
- 【架构】概述
- (转载)NET面向上下文、AOP架构模式(概述)
- InfoSphere Warehouse 数据挖掘与 Cognos 集成架构概述(一)
- Hadoop核心架构HDFS+MapReduce+Hbase+Hive内部机理详解
- LAMP+LNMP(一) LAMP架构概述
- 系统架构_软件架构风格概述
- 八种架构设计模式及其优缺点概述