虽然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. Centos MySQL数据库迁移详细步骤

    其实迁移数据库,一般用sql文件就行,把A服务器数据库的表结构和数据等等导出,然后导入到B服务器数据库, 但是这次数据文件过大,大约有40个G,使用命令行导入,效果不是很好,经常在执行过程中报错.卡死 ...

  2. ACE之通信的设计空间

    本篇文章主要介绍 .无连接的和面向连接的协议之间的对比 .同步的和异步的消息交换之间的对比. .消息传递和共享内存之间的对比. 1:无连接和面向连接的协议对比 协议(protocol)是指一组规则,这 ...

  3. java--- 使用interrupte中断线程的真正用途

    Java线程之中,一个线程的生命周期分为:初始.就绪.运行.阻塞以及结束.当然,其中也可以有四种状态,初始.就绪.运行以及结束. 一般而言,可能有三种原因引起阻塞:等待阻塞.同步阻塞以及其他阻塞(睡眠 ...

  4. 再谈前端HTML模板技术

    在web2.0之前,写jsp的时候虽然有es和JSTL,但是还是坚持jsp.后面在外包公司为了快速交货,还是用了php Smart技术. web2.0后,前端模板技术风行. 代表有如下三大类: Str ...

  5. STM32 - SYSTICK(系统滴答定时器)

    SysTick定时器被捆绑在NVIC中,用于产生SYSTICK异常(异常号:15).在以前,大多操作系统需要一个硬件定时器来产生操作系统需要的滴答中断,作为整个系统的时基.例如,为多个任务许以不同数目 ...

  6. [Awson原创]网络(network)

    Description Awson是某国际学校信竞组的一只菜鸡.学校为了使教育信息化,打算在学校内新建机房,并且为机房联网.但吝啬的学校又不想花费过多的开销,于是将规划 网络路线的任务交给了信竞组的A ...

  7. [SCOI2008]配对

    题目描述 你有 n 个整数Ai和n 个整数Bi.你需要把它们配对,即每个Ai恰好对应一个Bp[i].要求所有配对的整数差的绝对值之和尽量小,但不允许两个相同的数配对.例如A={5,6,8},B={5, ...

  8. *hdu 5536(字典树的运用)

    Input The first line of input contains an integer T indicating the total number of test cases. The f ...

  9. hdu 1402 FFT(模板)

    A * B Problem Plus Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  10. Codeforces Round#402(Div.1)掉分记+题解

    哎,今天第一次打div1 感觉头脑很不清醒... 看到第一题就蒙了,想了好久,怎么乱dp,倒过来插之类的...突然发现不就是一道sb二分吗.....sb二分看了二十分钟........ 然后第二题看了 ...