虽然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. Spring Cloud学习笔记-001

    Spring Boot快速入门 1. Eclipse新建maven工程,骨架选择quickstart: 2. 加入springboot的父工程,和web依赖: 3. 编写一个简单的RESTful接口, ...

  2. Qt 的一些浅知识点

    1 Qt 官网下载地址 http://download.qt.io/ 2 必须得有pro文件么 不是必须的. pro 文件是个中间文件,通过 qmake 程序能将 pro 文件转换成其它平台的项目文件 ...

  3. Java面试题—初级(5)

    41.a.hashCode() 有什么用?与 a.equals(b) 有什么关系? hashCode() 方法对应对象整型的 hash 值.它常用于基于 hash 的集合类,如 Hashtable.H ...

  4. MyBatis基础学习笔记--摘录

    1.MyBatis是什么? MyBatis源自于IBatis,是一个持久层框架,封装了jdbc操作数据库的过程,使得开发者只用关心sql语句,无需关心驱动加载.连接,创建statement,手动设置参 ...

  5. SpringMVC入门到精通(一)

    推荐一个很不错的学习博客 http://jinnianshilongnian.iteye.com/blog/1752171

  6. 控制公司 Controlling Companies

    题目描述 有些公司是其他公司的部分拥有者,因为他们获得了其他公司发行的股票的一部分.(此处略去一句废话)据说,如果至少满足了以下三个条件之一,公司A就可以控制公司B了: 公司A = 公司B. 公司A拥 ...

  7. hdu 5392

    Sample Input 2 3 1 3 2 6 2 3 4 5 6 1   Sample Output 2 6 题意:给一个转置求它的循环长度 题解:分解成循环求最小公倍数 #include< ...

  8. 【poj 1087 a plug for UNIX】

    在大米饼的帮助下,终于找到了大米饼程序中如同大米饼一般的错误! 考点在问题转化,然后就跑一个你喜欢的最大流算法(二分图可以啵?) 再来一个例子吧: [纯手绘大米饼图片] 其中有的边权是1,否则就是in ...

  9. 基于Android的高校饮水宝app

     这是一个高校饮用水配送项目,是一个毕业设计,去年的,包括了服务端和客户端,是一个不错的项目,分享一下: 随着通讯行业的迅猛发展,我国的手机用户也在不断的增加.据信息部的统计数据显示,我国已有接近7. ...

  10. Django中ORM操作

    ORM操作: class UserInfo(models.Model): username = models.CharField(max_length=32) password = models.Ch ...