虽然hadoop经历了多年的发展,作为技术人员都或多或少的使用过或者了解过。这里还是做一个简单的总结,主要原因是之前主要是做hadoop的开发,对hadoop的运维知之甚少,但真正的接触到hadoop运维的工作的时候,其实会发现,对hadoop的一整套框架和理论知识都需要系统的学习,才能把工作做得更好,同时做基于hadoop的数据分析工作的时候,也时常会涉及到一些hadoop参数的调优。因此,在这里做一个简单的总结。由于是自己查阅资料并结合工作进行总结的,不免有疏漏或者错误之处,遇到了敬请一并指出。

一、hadoop是什么:

hadoop是Apache下使用JAVA开发的一个集分布式存储和分布式计算分析于一体的开源软件框架。其中最核心的设计是HDFS和MapReduce,HDFS对大数据存储提供支持,MapReduce则是分布式的计算框架。基于HDFS和MapReduce,hadoop还提供了类SQL分析查询工具HIVE和KV数据库Hbase,以及最近活跃的内存计算引擎Spark等等。
下面将简单介绍其中的几个组件运行机制及操作方法:HDFS、MapReduce、Hive

二、HDFS:

HDFS是为用户提供分布式的文件存储服务的软件框架,主要有以下几个方面的特点:
1、高容错性:由于HDFS的文件备份机制,一份文件会同时在HDFS集群中不同的机器甚至机架上备份多份文件,因此保证了文件不会因某一台机器出现故障而导致数据丢失的情况。
2、数据批处理:HDFS设计就是用来存储大数据文件的、一次写入、多次读取的应用场景而设计的。
3、使用BLOCK作为基本的存储单元:在HDFS中,使用block(文件块)作为基本数据存储单元,一个block空间为64M或者128M(可由用户自定义配置),一个文件会切分为多个block存储在HDFS中,方便了文件的管理和读取。
一个HDFS集群基本由3部分组成:client、namenode、datanode,表现为一个主从的结构,如下图所示:

namenode:HDFS master节点,负责维护整个HDFS的元数据信息,包括文件目录树和文件写记录信息,并且这些信息是维护在内存中。由于HDFS中的文件是以block单位组织的,一个文件的一个block的元数据大小约为130字节,一个文件大小小于block size的文件在HDFS中也会占据一个block(尽管在物理硬盘上实际没有占据这么大的空间),假设有1000万个文件,则会在namenode中消耗约2G的内存(由于文件有多份备份,实际消耗的可能更多)。
datanode:slave节点,负责保存文件的具体数据,并时刻向namenode汇报节点的状态和block信息。
client:向namenode发起文件读写请求,然后从datanode中读写数据。
可以看到,由于namenode是把数据直接放在内存中的,尽管也有checkpoint机制将文件元数据信息持久化到内存中,但单点问题还是导致整个集群的稳定性较差。
HDFS容错机制:
seconday namenode:

seconday namenode本身不对外提供服务,只是实时将namenode的信息同步过来,并完成写日志的合并操作,再将这些信息写入磁盘,因此在namenode挂了之后,可以通过seconday namenode的信息将元数据恢复过来。由于namenode和seconday namenode本身并不会持久化block的状态信息,因此恢复过程中,需要datanode将自己所维护的block状态信息发送给新的namenode,同时由于HDFS的元数据信息是从磁盘恢复到内存,因此恢复集群的服务需要一定的时间。
HDFS HA:
HDFS HA机制增加一个standby节点来提高HDFS的集群服务稳定性

Active namenode节点对外提供服务,Standby namenode节点实时同步Active namenode节点的元数据信息和写日志到自己的内存中,并且Active namenode和Standby namenode都可以配置自己的seconday namenode。集群中的datanode节点不仅需要将自己的状态信息发送给Active namenode,也需要将这些信息发送给Standby namenode,因此保证了Active namenode和Standby namenode的数据一致性。当Active namenode节点挂掉之后,我们可以直接热切换到Standby namenode,因此对外界来讲,集群服务的故障时间是很短暂的,基本保证了整个HDFS集群的高可用性。
HDFS文件写入过程:
client端首先向namenode发起文件写请求,namenode根据集群的状态和datanode的空闲情况,确定待写入文件的datanode节点位置信息并将这些信息返回给client。client获得datanode节点位置信息后向datanode节点发起具体的文件写入请求,然后将文件逐步读入client的内存缓冲区,当client的内存缓冲区的大小达到一个block size大小时,把数据发送给datanode1,datanode1完成数据接收后 向另外一个datanode拷贝这份文件,形成备份文件,之后datanode1向namenode发送消息,报告文件的位置信息,最终结束写事件。
HDFS文件读过程:
client向namenode发起文件读请求,namenode判断请求的文件是否存在,如果不存在就直接返回,否则,namenode将返回该文件及其备份所在的datanode及具体的block信息。client拿到datanode和block信息信息后,向具体的datanode发起文件读请求并发送block信息,datanode拿到block信息后读取block对应的文件数据并将数据返回给client,如果整个数据读取结束,就完成了HDFS的读数据的过程。如果中途有datanode挂了的话,client则去读其文件副本所在的datanode的文件数据。

下一节将简要介绍MapReduce的过程。

hadoop入门级总结一:HDFS的更多相关文章

  1. hadoop入门级总结二:Map/Reduce

    在上一篇博客:hadoop入门级总结一:HDFS中,简单的介绍了hadoop分布式文件系统HDFS的整体框架及文件写入读出机制.接下来,简要的总结一下hadoop的另外一大关键技术之一分布式计算框架: ...

  2. Hadoop学习笔记: HDFS

    注:该文内容部分来源于ChinaHadoop.cn上的hadoop视频教程. 一. HDFS概述 HDFS即Hadoop Distributed File System, 源于Google发表于200 ...

  3. hadoop的API对HDFS上的文件访问

    这篇文章主要介绍了使用hadoop的API对HDFS上的文件访问,其中包括上传文件到HDFS上.从HDFS上下载文件和删除HDFS上的文件,需要的朋友可以参考下hdfs文件操作操作示例,包括上传文件到 ...

  4. hadoop系列二:HDFS文件系统的命令及JAVA客户端API

    转载请在页首明显处注明作者与出处 一:说明 此为大数据系列的一些博文,有空的话会陆续更新,包含大数据的一些内容,如hadoop,spark,storm,机器学习等. 当前使用的hadoop版本为2.6 ...

  5. Hadoop 系列文章(二) Hadoop配置部署启动HDFS及本地模式运行MapReduce

    接着上一篇文章,继续我们 hadoop 的入门案例. 1. 修改 core-site.xml 文件 [bamboo@hadoop-senior hadoop-2.5.0]$ vim etc/hadoo ...

  6. Hadoop集群(二) HDFS搭建

    HDFS只是Hadoop最基本的一个服务,很多其他服务,都是基于HDFS展开的.所以部署一个HDFS集群,是很核心的一个动作,也是大数据平台的开始. 安装Hadoop集群,首先需要有Zookeeper ...

  7. 马士兵hadoop第二课:hdfs集群集中管理和hadoop文件操作

    马士兵hadoop第一课:虚拟机搭建和安装hadoop及启动 马士兵hadoop第二课:hdfs集群集中管理和hadoop文件操作 马士兵hadoop第三课:java开发hdfs 马士兵hadoop第 ...

  8. 一图看懂hadoop分布式文件存储系统HDFS工作原理

    一图看懂hadoop分布式文件存储系统HDFS工作原理

  9. Hadoop(四)HDFS的高级API操作

    一 HDFS客户端环境准备 1.1 jar包准备 1)解压hadoop-2.7.6.tar.gz到非中文目录 2)进入share文件夹,查找所有jar包,并把jar包拷贝到_lib文件夹下 3)在全部 ...

  10. 马士兵hadoop第二课:hdfs集群集中管理和hadoop文件操作(转)

    马士兵hadoop第一课:虚拟机搭建和安装hadoop及启动 马士兵hadoop第二课:hdfs集群集中管理和hadoop文件操作 马士兵hadoop第三课:java开发hdfs 马士兵hadoop第 ...

随机推荐

  1. 关于Java中的Null

    什么是Java中的Null? null在Java中是一个非常重要的概念,它最初是为了表示缺少某些东西,例如缺少用户.资源或任何东西而发明出来的.但是这也为Java程序员带来了很多麻烦,比如最常见的空指 ...

  2. 洞见世界(1): 拉勾网大数据告诉你, 会计最高月薪达33k!

    前言: 小李是个很有上进心的女孩, 老板让她了解下会计这个行业的薪资情况, 她不清楚怎么去做, 所以找了笔者, 当当当, 然后这一份薪资报告就出来了^_^.(小李为虚拟人物) by  璀璨者张健, 专 ...

  3. [LeetCode] Minimum Genetic Mutation 最小基因变化

    A gene string can be represented by an 8-character long string, with choices from "A", &qu ...

  4. [LeetCode] Number of Longest Increasing Subsequence 最长递增序列的个数

    Given an unsorted array of integers, find the number of longest increasing subsequence. Example 1: I ...

  5. 【GDOI】【图论-最短路】时间与空间之旅

    最近打的一场校内训练的某题原题... 题目如下: Description 公元22××年,宇宙中最普遍的交通工具是spaceship.spaceship的出现使得星系之间的联系变得更为紧密,所以spa ...

  6. [Noi2015]小园丁和老司机

    来自FallDream的博客,未经允许,请勿转载,谢谢. 小园丁 Mr. S 负责看管一片田野,田野可以看作一个二维平面.田野上有n棵许愿树,编号1,2,3,…,n,每棵树可以看作平面上的一个点,其中 ...

  7. 中断API之setup_irq【转】

    转自:https://blog.csdn.net/tiantao2012/article/details/78957472 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blo ...

  8. TOJ 数据结构实验--静态顺序栈

    描述 创建一个顺序栈(静态),栈大小为5.能够完成栈的初始化.入栈.出栈.获取栈顶元素.销毁栈等操作. 顺序栈类型定义如下: typedef struct {  int data[Max];    i ...

  9. Python【第三课】 函数基础

    本篇内容 函数基本语法及特性 嵌套函数 递归函数 匿名函数 高阶函数 内置函数 1.函数的基本语法及特性 1.1 函数概念 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提 ...

  10. (转)Linux下C++开发初探

    1.开发工具 Windows下,开发工具多以集成开发环境IDE的形式展现给最终用户.例如,VS2008集成了编辑器,宏汇编ml,C /C++编译器cl,资源编译器rc,调试器,文档生成工具, nmak ...