HDFS原理详细解读
来源:互联网 发布:淘宝开店卖虚拟物品 编辑:程序博客网 时间:2024/06/05 14:56
1.HDFS简介
- HDFS(Hadoop Distributed File System )Hadoop分布式文件系统。是根据google发表的论文翻版的。论文为GFS(Google File System)Google 文件系统(中文,英文)。
- Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件上的分布式文件系统。HDFS体系结构中有三类节点,一类是NameNode,又叫”名称节点”;另一类是DataNode,又叫”数据节点”;还有一个是Secondary NameNode,称为“第二名称节点”。
2.HDFS架构设计
- 角色分配:
1. Client:客户端,系统使用者,调用HDFS API操作文件;与NN交互获取文件元数据;与DN交互进行数据读写。
2. Namenode
存储:
- 文件系统的命名空间,文件名称,文件目录结构,文件的属性[权限,创建时间,副本数];
- 文件对应哪些数据块–>数据块对应哪些datanode节点
- 当然namenode节点不会持久的存储这种映射关系,是通过集群在启动和运时,datanode定期发送blockReport给namenode,以此namenode在内存中来动态维护的这种映射关系
作用:管理文件系统的命名空间。它维护着文件系统树及整棵树内所有的文件和目录。这些信息以两个文件形式永久保存在本地磁盘上:命名空间镜像文件fsimage和编辑日志文件editlog。
3.Datanode
存储:
- 数据块和数据块校验和
- 与Namenode通信:
- 每隔3秒发送一个心跳包
- 每十次心跳发送一次blockReport.
作用(主要):读写文件的数据块
4.Scondarynode
存储:fsimage+editlog
作用:定期合并fsimage+editlog文件为新的fsimage推送给namenode.俗称检查点动作,checkpoint.
参数:fs.checkpoint.period–>1h fs.checkpoint.size–>64M
下图为原理图:
3.副本放置策略
- 第一副本:放置在上传文件的DataNode上;如果是集群外提交,则随机挑选一台磁盘不太慢、CPU不太忙的节点上;
- 第二副本:放置在于第一个副本不同的机架的节点上;
- 第三副本:与第二个副本相同机架的不同节点上;
- 如果还有更多的副本:随机放在节点中;
4.文件写流程
1.写流程的整个过程
- Client调用FileSystem.create(filePath)方法,去与Namenode进行rpc通信,check该路径的文件是否存在以及有没有权限创建该文件,假如ok,就创建一个新文件,但是并不关联任何block,返回一个FSDataOutputStream对象;(假如not ok,就返回错误信息,所以写代码要try-catch)
- Client调用FSDataOutputStream对象的write()方法,会将第一个块写入第一个Datanode,第一个Datanode写完传给第二个节点,第二个写完传给第三节点,当第三个节点写完返回一个ackpacket给第二个节点,第二个返回一个ackpacket给第一个节点,第一个节点返回ackpacket给FSDataOutputStream对象,意思标识第一个块写完,副本数为3;然后剩余的块依次这样写;
(当然写操作对于Client端也是透明的) - 当向文件写入数据完成后,Client调用FSDataOutputStream.close()方法,关闭输出流,flush缓存区的数据包;
- 再调用FileSystem.complete()方法,告诉Namenode节点写入成功。
2分部解析
1.角色定位
- 客户端:负责文件切割
- NN:为数据块分配DN地址
- DN:存储数据,并将数据冗余备份多个DN中
2.用户向客户端发送请求
HDFS中的存储单元是block。文件通常被分成64或128M一块的数据块进行存储。与普通文件系统不同的是,在HDFS中,如果一个文件大小小于一个数据块的大小,它是不需要占用整个数据块的存储空间的。
3.文件切分
4.文件分配
5.数据写入
6.写入成功
5.文件读流程
HDFS采用的是“一次写入多次读取”的文件访问模型。一个文件经过创建、写入和关闭之后就不需要改变。这一假设简化了数据一致性问题,并且使高吞吐量的数据访问成为可能。
- Client通过FileSystem.open(filePath)方法,去与Namenode进行rpc通信,返回该文件的部分或全部的block列表(也包含该列表各block的分布在Datanode地址的列表),也就是返回FSDataInputStream对象;
- Client调用FSDataInputStream对象的read()方法,
a. 去与第一个块的最近的datanode进行read,读取完后,会check,假如successful,会关闭与当前Datanode通信;(假如check fail,会记录失败的块+Datanode信息,下次就不会读取;那么会去该块的第二个Datanode地址读取)
b. 然后去第二个块的最近的Datanode上的进行读取,check后,会关闭与此datanode的通信。
c. 假如block列表读取完了,文件还未结束,那么FileSystem会从Namenode获取下一批的block的列表。(当然读操作对于Client端是透明的,感觉就是连续的数据流)。 - Client调用FSDataInputStream.close()方法,关闭输入流.
过程详解
1.用户需求
2.客户端向NN发送要求
3.NN返回该文件的部分或全部的block列表
4.读取数据(就近原则)
(参考地址:36dsj.com)
6.常用命令
1.hadoop fs == hdfs dfs (等价)
2.查询命令
[hadoop@zydatahadoop001 ~]$ hdfs dfs -ls /Found 2 itemsdrwx------ - hadoop supergroup 0 2017-12-19 00:37 /tmpdrwxr-xr-x - hadoop supergroup 0 2017-12-19 00:36 /user逆序查询[hadoop@zydatahadoop001 ~]$ hdfs dfs -ls -r / Found 2 itemsdrwxr-xr-x - hadoop supergroup 0 2017-12-19 00:36 /userdrwx------ - hadoop supergroup 0 2017-12-19 00:37 /tmp显示所有目录结构[hadoop@zydatahadoop001 ~]$ hdfs dfs -ls -R / drwx------ - hadoop supergroup 0 2017-12-19 00:37 /tmpdrwx------ - hadoop supergroup 0 2017-12-19 00:37 /tmp/hadoop-yarndrwx------ - hadoop supergroup 0 2017-12-19 00:40 /tmp/hadoop-yarn/stagingdrwx------ - hadoop supergroup 0 2017-12-19 00:37 /tmp/hadoop-yarn/staging/hadoopdrwx------ - hadoop supergroup 0 2017-12-19 00:49 /tmp/hadoop-yarn/staging/hadoop/.stagingdrwxr-xr-x - hadoop supergroup 0 2017-12-19 00:40 /tmp/hadoop-yarn/staging/historydrwxrwxrwt - hadoop supergroup 0 2017-12-19 00:40 /tmp/hadoop-yarn/staging/history/done_intermediatedrwxrwx--- - hadoop supergroup 0 2017-12-19 00:49 /tmp/hadoop-yarn/staging/history/done_intermediate/hadoop-rwxrwx--- 1 hadoop supergroup 59514 2017-12-19 00:49 /tmp/hadoop-yarn/staging/history/done_intermediate/hadoop/job_1513614870362_0001-1513615072017-hadoop-QuasiMonteCarlo-1513615771997-5-1-SUCCEEDED-default-1513615335075.jhist-rwxrwx--- 1 hadoop supergroup 358 2017-12-19 00:49 /tmp/hadoop-yarn/staging/history/done_intermediate/hadoop/job_1513614870362_0001.summary-rwxrwx--- 1 hadoop supergroup 135003 2017-12-19 00:49 /tmp/hadoop-yarn/staging/history/done_intermediate/hadoop/job_1513614870362_0001_conf.xmldrwxr-xr-x - hadoop supergroup 0 2017-12-19 00:36 /userdrwxr-xr-x - hadoop supergroup 0 2017-12-19 00:49 /user/hadoop
3.创建命令
创建文件夹[hadoop@zydatahadoop001 ~]$ hdfs dfs -mkdir /demo1[hadoop@zydatahadoop001 ~]$ hdfs dfs -ls /Found 3 itemsdrwxr-xr-x - hadoop supergroup 0 2017-12-19 10:15 /demo1drwx------ - hadoop supergroup 0 2017-12-19 00:37 /tmpdrwxr-xr-x - hadoop supergroup 0 2017-12-19 00:36 /user创建文件[hadoop@zydatahadoop001 ~]$ hdfs dfs -touchz /demo1/test.txt[hadoop@zydatahadoop001 ~]$ hdfs dfs -ls /demo1/Found 1 items-rw-r--r-- 1 hadoop supergroup 0 2017-12-19 10:18 /demo1/test.txt
4.上传文件(写)
[hadoop@zydatahadoop001 ~]$ hdfs dfs -put demo1.txt /demo1[hadoop@zydatahadoop001 ~]$ hdfs dfs -ls /demo1/Found 2 items-rw-r--r-- 1 hadoop supergroup 7 2017-12-19 10:27 /demo1/demo1.txt-rw-r--r-- 1 hadoop supergroup 0 2017-12-19 10:18 /demo1/test.txt
5.查看文件(读)
[hadoop@zydatahadoop001 ~]$ hdfs dfs -cat /demo1/demo1.txtaaaaaa
阅读全文
0 0
- HDFS原理详细解读
- 【漫画解读】HDFS存储原理
- 【漫画解读】HDFS存储原理
- 【漫画解读】HDFS存储原理
- 【漫画解读】HDFS存储原理
- 解读HDFS
- 解读HDFS
- 解读HDFS
- Hadoop学习笔记(三)漫画解读HDFS读写原理
- 显卡结构及工作原理详细解读
- 显卡结构及工作原理详细解读
- 显卡结构及工作原理详细解读
- 显卡结构及工作原理详细解读
- Hadoop生态系统介绍及HDFS与MapReduce原理详细阐述
- 学习Hadoop第七课(HDFS的详细架构原理)
- 漫画解读HDFS机制
- hdfs dfsadmin -rollingUpgrade解读
- 分布式文件系统HDFS解读
- Anti DDoS Guardian(防DDoS攻击软件)官方V5.0下载 | ddos 攻击防御工具
- 自动化技术积累
- Linux CentOS 6.5中安装与配置Tomcat-8方法
- zookeeper使用和原理探究
- md5加密
- HDFS原理详细解读
- Android的IPC机制(六)—— BroadcastReceiver的使用
- 数据分析充电1-sql必知必会第四版学习笔记总结2017/12/19--2017/12/19
- (三)spring-boot集成MongoDB
- MySQL索引使用方法和性能优化
- OutOfMemoryError
- name 'cap_name' is not defined
- 8618 大牛之路II
- Intellij2017下springboot项目启动热部署功能