Hadoop 原理总结

 

一、Hadoop技术原理

Hdfs主要模块:NameNode、DataNode

Yarn主要模块:ResourceManager、NodeManager

常用命令:

1)用hadoop fs 操作hdfs网盘,使用Uri的格式访问(URI格式:secheme://authority/path ,默认是hdfs://namenode:namenode port /parent path / child  , 简写为/parent path / child)

2)使用start-dfs.sh启动hdfs

1  MR执行流程:

1)客户端提交Mr 的jar包程序给JobClient

2)JobClient通过RPC和JobTracker 进行通信返回新的JOB ID 和路径

3)Client将jar包写入到HDFS当中(提交10份)

4)开始提交任务(任务的描述信息,不是Jar),有任务的详细信息

5)JobTracker进行初始化任务,把任务放到调度器中,在一台机器上

6)读取HDFS上的要处理的文件,开始计算输入分片

7)TaskTracker通过心跳机制领取任务

8)下载所需要的jar,配置文件等

9)TaskTracker启动一个Java child子进程

10)将结果写入HDFS 当中

二、HDFS主要模块及运行原理

Hdfs主要模块:

Hdfs的块的实际保存位置:tmpHdfsPath + /dfs/data/current/BP-126879239-192.168.1.213-1648462/cureent/finalized中,保存俩文件一个是块,一个是块的描述信息,即:blk_1073434 、blk_1073434_1015.meta

1)NameNode:

功能:是整个文件系统的管理节点。维护整个文件系统的文件目录树,文件/目录的元数据和每个文件对应的数据块列表。接收用户的请求。

存储:存储DataNode中各个文件的基本元数据信息,其中元数据存储是瓶颈,因为元数据需要保存2份,一份存在内存中(内存中有3个文件,fsimage,edits,内存中的metaData),一份序列化到硬盘上,但是内存空间有限,如果不停的保存几K的元数据,容易导致内存的不足,同时由于不停的从内存序列化到硬盘,也占CPU。

结构:

fsimage元数据镜像文件:存储某一段时间的NameNode的内存元数据信息(fsimage.ckpt文件)

edits:操作日志文件。(上传文件的过程中,不停的向edits写日志,不断的追加,直到成功后,内存的元数据才会更新元数据。edits都是从0开始的)

fstime:保存最近一次checkpoint的时间(checkpoint跟文件的一键还原点意义相同)

以上文件都保存在Linux系统中,edits日志是实时保存在磁盘,但edits与fsimage是v2.0版本,才是实时保存,2.0没有SecondaryNameNode。

2)DataNode:

以下针对Hadoop V 1.0 、V 0 的版本

SecondaryNameNode

功能:是HA(高可用性)的一个解决方案,是备用镜像,但不支持热备

执行过程:

1)Secondary通知NameNode切换edits文件

2)Secondary从NameNode中获取fsimage和edits(通过http),Secondary获取文件后,NameNode会生成新的edits.new文件,该文件从0开始。

3)Secondary将fsimage载入内存,然后开始合并

4)Secondary将新生成的fsimage,在本地保存,并将其推送到NameNode

5)NameNode替换旧的镜像。

说明:SecondNameNode默认是安装在NameNode节点上,但是这样不安全。

Yarn主要模块:ResourceManager、NodeManager

常用命令:

1、用hadoop fs 操作hdfs网盘,使用Uri的格式访问(URI格式:secheme://authority/path ,默认是hdfs://namenode:namenode port /parent path / child  , 简写为/parent path / child)

2、使用start-dfs.sh启动hdfs

hbase行键设计原理~如何进行复杂表的查询~redis原理~hdfs原理~job提交过程~hbase,hive,mapreducejvm的优化方式~数据如何采集~集群的动态添加去除节点方法!

三、MapReduce运行原理

1、Map过程简述:

1)读取数据文件内容,对每一行内容解析成<k1,v1>键值对,每个键值对调用一次map函数

2)编写映射函数处理逻辑,将输入的<k1,v1>转换成新的<k2,v2>

3)对输出的<k2,v2>按reducer个数和分区规则进行分区

4)不同的分区,按k2进行排序、分组,将相同的k2的value放到同一个集合中

5)(可选)将分组后的数据重新reduce归约

2、reduce处理过程:

1)对多个Map的输出,按不同分区通过网络将copy到不同的reduce节点

2)对多个map的输出进行排序,合并,编写reduce函数处理逻辑,将接收到的数据转化成<k3,v3>

3)将reduce节点输出的数据保存到HDFS上

说明:

1)Mapper Task 是逻辑切分。因为Maper记录的都是block的偏移量,是逻辑切分,但相对于内存中他确实是物理切分,因为每个Mapper都是记录的分片段之后的数据。

2)shuffle是物理切分。MapReduce的过程是俩过程需要用到Shuffle的,1个mapper的Shufflle,1个多个reduce的Shuffle,一般每个计算模型都要多次的reduce,所以要用到多次的Shuffle。.

MapReduce原理图

正常HDFS存储3份文件,Jar包默认写10份,NameNode通过心跳机制领取HDFS任务,运行完毕后JAR包会被删除。

Map端处理流程分析:

   1) 每个输入分片会交给一个Map任务(是TaskTracker节点上运行的一个Java进程),默认情况下,系统会以HDFS的一个块大小作为一个分片(hadoop2默认128M,配置dfs.blocksize)。Map任务通过InputFormat将输入分片处理成可供Map处理的<k1,v1>键值对。

   2) 通过自己的Map处理方法将<k1,v1>处理成<k2,v2>,输出结果会暂时放在一个环形内存缓冲(缓冲区默认大小100M,由mapreduce.task.io.sort.mb属性控制)中,当缓冲区快要溢出时(默认为缓冲区大小的80%,由mapreduce.map.sort.spill.percent属性控制),会在本地操作系统文件系统中创建一个溢出文件(由mapreduce.cluster.local.dir属性控制,默认${hadoop.tmp.dir}/mapred/local),保存缓冲区的数据。溢写默认控制为内存缓冲区的80%,是为了保证在溢写线程把缓冲区那80%的数据写到磁盘中的同时,Map任务还可以继续将结果输出到缓冲区剩余的20%内存中,从而提高任务执行效率。

   3) 每次spill将内存数据溢写到磁盘时,线程会根据Reduce任务的数目以及一定的分区规则将数据进行分区,然后分区内再进行排序、分组,如果设置了Combiner,会执行规约操作。

   4) 当map任务结束后,可能会存在多个溢写文件,这时候需要将他们合并,合并操作在每个分区内进行,先排序再分组,如果设置了Combiner并且spill文件大于mapreduce.map.combine.minspills值(默认值3)时,会触发Combine操作。每次分组会形成新的键值对<k2,{v2...}>。

   5) 合并操作完成后,会形成map端的输出文件,等待reduce来拷贝。如果设置了压缩,则会将输出文件进行压缩,减少网络流量。是否进行压缩,mapreduce.output.fileoutputformat.compress,默认为false。设置压缩库,mapreduce.output.fileoutputformat.compress.codec,默认值org.apache.hadoop.io.compress.DefaultCodec。

   Reduce端处理流程分析:

   1) Reduce端会从AM那里获取已经执行完的map任务,然后以http的方法将map输出的对应数据拷贝至本地(拷贝最大线程数mapreduce.reduce.shuffle.parallelcopies,默认值5)。每次拷贝过来的数据都存于内存缓冲区中,当数据量大于缓冲区大小(由mapreduce.reduce.shuffle.input.buffer.percent控制,默认0.7)的一定比例(由mapreduce.reduce.shuffle.merge.percent控制,默认0.66)时,则将缓冲区的数据溢写到一个本地磁盘中。由于数据来自多个map的同一个分区,溢写时不需要再分区,但要进行排序和分组,如果设置了Combiner,还会执行Combine操作。溢写过程与map端溢写类似,输出写入可同时进行。

   2) 当所有的map端输出该分区数据都已经拷贝完毕时,本地磁盘可能存在多个spill文件,需要将他们再次排序、分组合并,最后形成一个最终文件,作为Reduce任务的输入。此时标志Shuffle阶段结束,然后Reduce任务启动,将最终文件中的数据处理形成新的键值对<k3,v3>。

   3) 将生成的数据<k3,v3>输出到HDFS文件中。

Map与Reduce执行过程图

三 Hadoop序列化--Writable

序列化就是将内存当中的数据序列化到字节流中,

他实现了WritableComparable 接口,并继承了Writable(Write和ReadFile需要被实现)和Compare接口

1 特点:

1 )紧凑:高校使用存储空间

2 )快速:读写数据的额外开销小

3 )可扩展:可透明的读取老格式的数据

4 )互操作:支持多语言的交互

说明:JAVA 的序列化对继承等的结构都保存了,而对hadoop用不着,只需要存储字符就可以,所以有自己的机制。

Hadoop 原理总结的更多相关文章

  1. hadoop原理

    MapReduce工作原理图文详解 前言:   前段时间我们云计算团队一起学习了hadoop相关的知识,大家都积极地做了.学了很多东西,收获颇丰.可是开学后,大家都忙各自的事情,云计算方面的动静都不太 ...

  2. Hadoop介绍-2.分布式计算框架Hadoop原理及架构全解

    Hadoop是Apache软件基金会所开发的并行计算框架与分布式文件系统.最核心的模块包括Hadoop Common.HDFS与MapReduce. HDFS HDFS是Hadoop分布式文件系统(H ...

  3. Eclipse上Hadoop插件中Run On Hadoop原理[转]

    通过Eclipse的hadoop插件中的"run on hadoop"命令的原理:它不是把jar包发送到hadoop集群上去运行,而只是使用了hadoop集群上的hdfs,从hdf ...

  4. Hadoop原理之——HDFS原理

    Hadoop 3个核心组件: 分布式文件系统:Hdfs——实现将文件分布式存储在很多的服务器上(hdfs是一个基于Linux本地文件系统上的文件系统) 分布式运算编程框架:Mapreduce——实现在 ...

  5. Hadoop原理介绍

    Hadoop核心之HDFS 架构设计   老嗨 2015-09-18 16:55:00 浏览225 评论0 摘要: 概述:HDFS即Hadoop Distributed File System分布式文 ...

  6. hadoop 原理: 浅析Hadoop文件格式

    Hadoop 作为MR 的开源实现,一直以动态运行解析文件格式并获得比MPP数据库快上几倍的装载速度为优势.不过,MPP数据库社区也一直批评Hadoop由于文件格式并非 为特定目的而建,因此序列化和反 ...

  7. [Hadoop]Hadoop章1 Hadoop原理解析

    Hadoop是Apache软件基金会所开发的并行计算框架与分布式文件系统.最核心的模块包括Hadoop Common.HDFS与MapReduce. HDFS HDFS是Hadoop分布式文件系统(H ...

  8. 大数据组件原理总结-Hadoop、Hbase、Kafka、Zookeeper、Spark

    Hadoop原理 分为HDFS与Yarn两个部分.HDFS有Namenode和Datanode两个部分.每个节点占用一个电脑.Datanode定时向Namenode发送心跳包,心跳包中包含Datano ...

  9. Hadoop、Pig、Hive、Storm、NOSQL 学习资源收集

    (一)hadoop 相关安装部署 1.hadoop在windows cygwin下的部署: http://lib.open-open.com/view/1333428291655 http://blo ...

随机推荐

  1. nginx配置vhost配置文件详解

    //千锋PHP-PHP培训的实力派server { listen 80; server_name www.sina.com; root /data/www/sina; index index.php; ...

  2. Windows 静态IP脚本

    @echo off echo 快速设置IP地址和DNS为“静态” set 连接名称=以太网 set ip地址=192.168.1.80 set 子网掩码=255.255.255.0 set 网关地址= ...

  3. winform datagridview 如何设置datagridview隔行变色

    如何设置隔行变色. 如图:

  4. *205. Isomorphic Strings (string & map idea)

    Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the chara ...

  5. *521. Longest Uncommon Subsequence I (bit manipulation 2^n)

    Given a group of two strings, you need to find the longest uncommon subsequence of this group of two ...

  6. tomcat7 的The Apache Tomcat Native library which allows optimal performance 的解决

    1.        用Myeclipse启动tomcat7启动时可能会收到下面的信息: 七月 24, 2014 10:13:30 上午 org.apache.catalina.core.AprLife ...

  7. IOS 加载更多数据中

    /**点击添加*/ - (IBAction)loadBtnClick { //1.隐藏加载按钮 self.loadBtn.hidden=YES; //2.显示“正在加载” self.loadingVi ...

  8. POJ-2029 Get Many Persimmon Trees---二维树状数组+枚举

    题目链接: https://vjudge.net/problem/POJ-2029 题目大意: 有N棵树在一个n*m的田里,给出每颗树的坐标 用一个s*t的矩形去围,最多能围几棵树 思路: 用二维树状 ...

  9. Robin-Karp algorithm 字符串的匹配

    有关字符串的匹配问题,有很好的算法,即KMP算法,但是还有一种其实经常使用到的算法是Rabin-Karp算法,它是使用hash的原理来进行字符串匹配的.具体的做法如下. Rabin-Karp算法是由R ...

  10. laravel 去掉index.php伪静态

    1,首先,让apache服务器支持rewrite 可以在apache配置文件中定义rewrite规则,是全局的,无论哪个应用都实用 //httpd.config Listen 80 RewriteEn ...