NameNode:名称节点,主要功能在于实现保存文件元数据,这些元数据直接保存在内存中,为了保证元数据的持久性,而也会周期性的同步到磁盘上去。磁盘上的数据通常被称为元数据的映像数据 image file

以防万一,如果服务或机器崩溃了,它会基于Image File以及各个DateNode的报告信息重新生成元数据。

·Secondary NameNode:第二名称节点,NameNode在早期只有一个,后来提供了第二个名称节点Secondry NameNode ,万一主节点崩溃,secondary无非是将image file整合到本地实现快速启动节点而已,同时也能够对Namenode节点映像文件合并的功能,平时不提供任何节点的服务。

·HDFS DataNode:所有大数据都保存在数据节点上,我们称为DataNode

HDFS不支持FUSE挂载到本地,所以支持基于HDFS的AIP(HadoopAPI)来进行访问,因此必须自己去研发专用的命令行工具。

服务是如何在HDFS中写数据

(1) 当我们创建一个数据时候,需要先向NameNode发起请求;

(2)NameNode收到请求之后,会告知HDFSDataNode,说明需要分别存储至什么位置,当报告返回回来之后,HDFS Client将对其发起写操作请求;

(3)NameNode会为HDFS Client会分配一个DataNode数据节点;

(4)数据节点可能是多个,但HDFS Client却无知这一点,只需要向其一节点发起写操作即可;

(5)第一个数据节点datanode 接到请求之后,自行将数据复制到其它节点

(#一个数据块 报文为64k 于是其按报文逐一开始存放)

(为了保证数据可用性以及降低集群的成本,hadoop是工作在商用计算机硬件(说白了就是服务器或专业级存储),而且服务器不需要做RAID,它会在磁盘上自行存储多个副本,而且是在不同主机上)

(6)每个数据块存储结束之后,数据节点DataNode都要向Namenode报告存储完毕,接着存放下一个数据块然后报告。。。以此类推;

(7)一旦所有数据都存储完成,NameNode会保存一个列表,记录着数据的副本保存在哪个数据节点上。

如何在HDFS中读取数据:

比如文件file1 分别存储在 D1 D2 D3 上,所以一旦有请求读取数据时,那么3个节点都有数据,那么该找谁去读取呢?如上图所示:

当 客户端要请求访问某个数据块的时候,一个数据块可能在多个节点都有,那么所以这时候名称节点NameNode会告知它第一个块或文件 分别存储在D1 D2 D3 这么3个节点上,那么我们的客户端将会去第一个节点datanode1上去取数据,datanode1接到请求,将数据返回给客户端,假如中途出现中断的 情况,那么客户端则去找datanode2,datanode2接到请求后如果有数据那么则将数据返回给用户

其实用户请求的为列表,告知的节点上都存在同样的数据;

如果用户请求存放某大文件,那么会被分割为报文,以报文形式存储到datanode 再由datanode相互复制 从而达到并行存储;

同样,也可以并行去读取文件,如果某台数据节点出现问题,那么肯定会导致数据不统一,所以每个datanode每隔3秒钟会向namenode报告自己的心跳信息、所持有的数据块的列表,如果超过阀值则将移除可用列表

在向namenode报告时候为了避免报告出错,还要检验一次数据块是否有问题,如果没有问题则报告,如果namenode没有接到其报告信息,则认为这个数据块缺少副本,并找将报告的完整副本完全复制到其故障节点上

hadoop 初探之第二篇(杂谈)的更多相关文章

  1. Hadoop环境搭建|第二篇:hadoop环境搭建

    硬件配置:1台NameNode节点.2台DataNode节点 一.Linux环境配置 这里我只配置NameNode节点,DataNode节点的操作相同. 1.1.修改主机名 命令:vi /etc/sy ...

  2. Hadoop初探

    本文转自:https://blog.csdn.net/column/details/14334.html 前言 Hadoop是什么? 用百科上的话说:“Hadoop是一个由Apache基金会所开发的分 ...

  3. 跟我学SpringCloud | 第二篇:注册中心Eureka

    Eureka是Netflix开源的一款提供服务注册和发现的产品,它提供了完整的Service Registry和Service Discovery实现.也是springcloud体系中最重要最核心的组 ...

  4. EnjoyingSoft之Mule ESB开发教程第二篇:Mule ESB基本概念

    目录 1. 使用Anypoint Studio开发 2. Mule ESB Application Structure - Mule ESB应用程序结构 3. Mule ESB Application ...

  5. [ 高并发]Java高并发编程系列第二篇--线程同步

    高并发,听起来高大上的一个词汇,在身处于互联网潮的社会大趋势下,高并发赋予了更多的传奇色彩.首先,我们可以看到很多招聘中,会提到有高并发项目者优先.高并发,意味着,你的前雇主,有很大的业务层面的需求, ...

  6. 从0开始搭建SQL Server AlwaysOn 第二篇(配置故障转移集群)

    从0开始搭建SQL Server AlwaysOn 第二篇(配置故障转移集群) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www ...

  7. (转)从0开始搭建SQL Server AlwaysOn 第二篇(配置故障转移集群)

    原文地址:  http://www.cnblogs.com/lyhabc/p/4682028.html 这一篇是从0开始搭建SQL Server AlwaysOn 的第二篇,主要讲述如何搭建故障转移集 ...

  8. 深入理解javascript对象系列第二篇——属性操作

    × 目录 [1]查询 [2]设置 [3]删除[4]继承 前面的话 对于对象来说,属性操作是绕不开的话题.类似于“增删改查”的基本操作,属性操作分为属性查询.属性设置.属性删除,还包括属性继承.本文是对 ...

  9. 前端工程师技能之photoshop巧用系列第二篇——测量篇

    × 目录 [1]测量信息 [2]实战 [3]注意事项 前面的话 前端工程师使用photoshop进行的大量工作实际上是测量.本文是photoshop巧用系列第二篇——测量篇 测量信息 在网页制作中需要 ...

随机推荐

  1. Python【pymysql】模块

    import pymysql# 1.连上数据库 账号.密码 ip 端口号 数据库#2.建立游标#3.执行sql#4 .获取结果# 5.关闭游标#6.连接关闭coon = pymysql.connect ...

  2. GO_00:Mac之Item2的配置安装

    申明:Mac 本上的终端感觉不是那么多好用,以前在 Windows 上操作 Linux 都是通过 XShell 来操作的,界面美观大方.操作使用比较简单.故在 Mac 上也需要有这样一款类似的工具,那 ...

  3. jquery.lazyload插件实现图片延迟加载详解

    什么是LazyLoad技术? 在页面上图片比较多的时候,打开一张页面必然引起与服务器大数据量的交互.尤其是对于高清晰的图片,占了几百K的空间.Lazy Load 是一个用 JavaScript 编写的 ...

  4. EChart介绍和使用

    一.简单介绍 Echart是百度研发团队开发的一款报表视图JS插件,功能十分强大,使用内容做简单记录:(EChart下载地址 http://echarts.baidu.com/download.htm ...

  5. tomcat修改java不重启

    修改tomcat   server.xml 找到项目的Context配置 <Context docBase="项目名" path="/项目路径" relo ...

  6. 20155307 2016-2017-2 《Java程序设计》第七周学习总结

    学号 2016-2017-2 <Java程序设计>第七周学习总结 教材学习内容总结 认识Lambda语法,方法参考在重用现有API上扮演了重要角色,重用现有方法操作,可避免到处写下Lamb ...

  7. 【leetcode 简单】 第八十八题 猜数字大小

    我们正在玩一个猜数字游戏. 游戏规则如下: 我从 1 到 n 选择一个数字. 你需要猜我选择了哪个数字. 每次你猜错了,我会告诉你这个数字是大了还是小了. 你调用一个预先定义好的接口 guess(in ...

  8. HDU 4545 (模拟) 魔法串

    题目链接 Problem Description 小明和他的好朋友小西在玩一个新的游戏,由小西给出一个由小写字母构成的字符串,小明给出另一个比小西更长的字符串,也由小写字母组成,如果能通过魔法转换使小 ...

  9. atan2 atan

    atan2 definition In terms of the standard arctan function, whose range is (−π/2, π/2), it can be exp ...

  10. 《廖雪峰Git教程》学习笔记

    原文链接 一.创建版本库 ①初始化一个Git仓库:git init ②添加文件到Git仓库:1.git add<file> ;  2.git commit 二.时光机穿梭 ①查看工作区状态 ...