Hadoop基础-HDFS的读取与写入过程剖析

                                     作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

  本篇博客会简要介绍hadoop的写入过程,并不会设计到源码,我会用图和文字来描述hdfs的写入过程。

一.hdfs写数据流程

  如上图所示,想要把一个4.2G的文件写入到hdfs集群中,它是怎么实现的呢?其步骤简要如下:

1>.客户端向NameNode请求在"/user/yinzhengjie/movies/"目录下上传一个名称叫“苍老师.rmvb”的视频;

2>.NameNode检查客户端是否有权限上传,如果有返回客户端可以上传,否则返回权限被拒绝。

3>.客户端请求第一个block上传到哪几个DataNode服务器上;

4>.NameNode返回3个DataNode节点,分别为DataNode1,DataNode2,DataNode3(如上图所示);

5>.客户端请求DataNode1上传数据,DataNode1收到请求会继续调用DataNode2,然后DataNode2再调用DataNode3,将这个同学管道简历完成;

6>.DataNode1,DataNode2,DataNode3逐级应答客户端

7>.客户端开始往DataNode1上传第一个block(先从磁盘读取数据存放到一个本地内存缓冲区),以package为单位,DataNode1收到一个package就会传给DataNode2,DataNode2传给DataNode3;DataNode1每传一个packet会放入一个应答队列等待应答;

8>.当一个block传输完成后,客户端再次请求NameNode上传第二个block的服务器。(重复执行3~7步)

HDFS Client:
DistributedFileSystem:分布式文件系统,负责链接NameNode
FSDataOutputStream:数据输出流,负责数据的存储和输出 NameNode:
存放元数据 DataNode:
存储数据 一致性模型:
hdfs默认的写入方式是:客户端开始往DataNode1上传第一个block(先从磁盘读取数据存放到一个本地内存缓冲区),
以package为单位,DataNode1收到一个package就会传给DataNode2,DataNode2传给DataNode3;DataNode1每传一个
packet会放入一个应答队列等待应答。
据说所述,默认的写入方式可靠性很强,但是也意味着会消耗着大量的传输时间,浪费了大量的时间。如果客户端开始往
DataNode1上传第一个block成功后,DataNode1立即写入数据到磁盘并告诉NameNode写入完毕,接下来就上传第二个block,
与此同时,DataNode1会将client传来的数据同步到其它两个节点中。
想要使用一致性模型,我们在写入的时候只要调用输出流的“hflush()”一致性刷新方法即可。

二.hdfs读数据流程

  如上图所示,想要把一个4.2G的文件从hdfs集群中读取,它是怎么实现的呢?其步骤简要如下:

1>.客户端向NameNode请求下载"/user/yinzhengjie/movies/苍老师.rmvb"的文件;

2>.NameNode通过查询元数据,如果找到文件块所在的DataNode地址列表就返回给客户端,如果没有找到元数据信息就返回客户端访问的资源不存在;

3>.客户端拿到NameNode的数据之后,挑选一台DataNode服务器(就近原则,然后随机)请求读取数据;

4>.DataNode开始传输数据给客户端(从磁盘里面读取数据放入流,以package为单位来做实验);

5>.客户端以package为单位接收,现在本地缓存,然后写入目标文件;

一. Hadoop中需要哪些配置文件,其作用是什么?
>core-site.xml:
()fs.defaultFS:hdfs://cluster1(域名),这里的值指的是默认的HDFS路径 。
()hadoop.tmp.dir:/export/data/hadoop_tmp,这里的路径默认是NameNode、DataNode、secondaryNamenode等存放数据的公共目录。用户也可以自己单独指定这三类节点的目录。
()ha.zookeeper.quorum:hadoop101:,hadoop102:,hadoop103:,这里是ZooKeeper集群的地址和端口。注意,数量一定是奇数,且不少于三个节点 。
>.hadoop-env.sh: 只需设置jdk的安装路径,如:export JAVA_HOME=/usr/local/jdk。
>.hdfs-site.xml:
()dfs.replication:他决定着系统里面的文件块的数据备份个数,默认为3个。
()dfs.data.dir:datanode节点存储在文件系统的目录 。
()dfs.name.dir:是namenode节点存储hadoop文件系统信息的本地系统路径 。
>.mapred-site.xml:
mapreduce.framework.name: yarn指定mr运行在yarn上。 二.请列出正常工作的Hadoop集群中Hadoop都分别需要启动哪些进程,它们的作用分别是什么?
>.NameNode它是hadoop中的主服务器,管理文件系统名称空间和对集群中存储的文件的访问,保存有metadate。
>.SecondaryNameNode它不是namenode的冗余守护进程,而是提供周期检查点和清理任务。帮助NN合并editslog,减少NN启动时间。
>.DataNode它负责管理连接到节点的存储(一个集群中可以有多个节点)。每个存储数据的节点运行一个datanode守护进程。
>.ResourceManager(JobTracker)JobTracker负责调度DataNode上的工作。每个DataNode有一个TaskTracker,它们执行实际工作。
>.NodeManager(TaskTracker)执行任务。
>.DFSZKFailoverController高可用时它负责监控NN的状态,并及时的把状态信息写入ZK。它通过一个独立线程周期性的调用NN上的一个特定接口来获取NN的健康状态。FC也有选择谁作为Active NN的权利,因为最多只有两个节点,目前选择策略还比较简单(先到先得,轮换)。
>.JournalNode 高可用情况下存放namenode的editlog文件。 三.简述Hadoop的几个默认端口及其含义
>.dfs.namenode.http-address:
>.SecondaryNameNode辅助名称节点端口号:
>.dfs.datanode.address:
>.fs.defaultFS: 或者9000
>.yarn.resourcemanager.webapp.address:

Hadoop基础-HDFS的读取与写入过程剖析的更多相关文章

  1. Hadoop基础-HDFS的读取与写入过程

    Hadoop基础-HDFS的读取与写入过程 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 为了了解客户端及与之交互的HDFS,NameNode和DataNode之间的数据流是什么样 ...

  2. Hadoop基础-HDFS数据清理过程之校验过程代码分析

    Hadoop基础-HDFS数据清理过程之校验过程代码分析 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 想称为一名高级大数据开发工程师,不但需要了解hadoop内部的运行机制,还需 ...

  3. Hadoop基础-Hdfs各个组件的运行原理介绍

    Hadoop基础-Hdfs各个组件的运行原理介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.NameNode工作原理(默认端口号:50070) 1>.什么是NameN ...

  4. Hadoop基础-HDFS的API实现增删改查

    Hadoop基础-HDFS的API实现增删改查 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客开发IDE使用的是Idea,如果没有安装Idea软件的可以去下载安装,如何安装 ...

  5. Hadoop基础-HDFS分布式文件系统的存储

    Hadoop基础-HDFS分布式文件系统的存储 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.HDFS数据块 1>.磁盘中的数据块 每个磁盘都有默认的数据块大小,这个磁盘 ...

  6. Hadoop基础-HDFS递归列出文件系统-FileStatus与listFiles两种方法

    Hadoop基础-HDFS递归列出文件系统-FileStatus与listFiles两种方法 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. fs.listFiles方法,返回Loc ...

  7. Hadoop基础-HDFS安全管家之Kerberos实战篇

    Hadoop基础-HDFS安全管家之Kerberos实战篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们都知道hadoop有很多不同的发行版,比如:Apache Hadoop ...

  8. Hadoop基础-HDFS集群中大数据开发常用的命令总结

    Hadoop基础-HDFS集群中大数据开发常用的命令总结 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本盘博客仅仅列出了我们在实际生成环境中常用的hdfs命令,如果想要了解更多, ...

  9. Hadoop基础-HDFS的API常见操作

    Hadoop基础-HDFS的API常见操作 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本文主要是记录一写我在学习HDFS时的一些琐碎的学习笔记, 方便自己以后查看.在调用API ...

随机推荐

  1. [福大软工] Z班——Beta现场答辩反馈

    Beta现场答辩 互评反馈 各组对于 麻瓜制造者 的评价与建议 队伍名 评价与建议 *** 功能继续完善,二手市场有闲鱼这条大鱼,要继续体现区域性的优势 *** web端的UI很好看,但安卓和web相 ...

  2. Docker查看容器IP

    https://segmentfault.com/q/1010000001637726 https://blog.csdn.net/sannerlittle/article/details/77063 ...

  3. Appium学习笔记3_Genymotion模拟器安装

    如果你已经配置好了安卓的运行环境,也配置好了自带的模拟器AVD,而且也launch了你的安卓模拟器,那么我相信你是不再愿意launch安卓模拟器第二次了,因为实在是太卡了(当然如果你电脑的配置够高,你 ...

  4. Linux中gcc与g++编译器的区别

    一.对于C文件 对于C文件gcc和g++所做的事情确实是一样的,g++在编译C文件时调用了gcc. 二.对于C++文件 1.预处理 预处理gcc与g++做了相同的事. 2.编译 gcc无法自动和c++ ...

  5. python箱型图

    #-*- coding: utf-8 -*- import pandas as pd catering_sale = '../data/catering_sale.xls' #餐饮数据 data = ...

  6. pandas重新索引

    #重新索引会更改DataFrame的行标签和列标签.重新索引意味着符合数据以匹配特定轴上的一组给定的标签. #可以通过索引来实现多个操作 - #重新排序现有数据以匹配一组新的标签. #在没有标签数据的 ...

  7. jdk1.8 HashMap红黑树操作详解-putTreeVal()

    以前也看过hashMap源码不过是看的jdk1.7的,由于时间问题看的也不是太深入,只是大概的了解了一下他的基本原理:这几天通过假期的时间就对jdk1.8的hashMap深入了解了下,相信大家都是对红 ...

  8. \r\n

    转载自http://www.studyofnet.com/news/285.html '\r'是回车,'\n'是换行,前者使光标到行首,后者使光标下移一格,通常敲一个回车键,即是回车,又是换行(\r\ ...

  9. 写给正在入坑linux系统的伙伴

    光阴似箭,时光如梭,转年出来工作已经3年了.从一个职场新人慢慢熟悉职场的工作方式,适应职场工作的环境,学习了很多知识,也总结了很多经验.现在的目标就是一步一个脚印,慢慢打磨自己,希望早日成为取代其他人 ...

  10. python---random模块详解

    在python中用于生成随机数的模块是random,在使用前需要import, 下面看下它的用法. random.random random.random()用于生成一个0到1的随机符点数: 0 &l ...