一、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原理 之 数据完整性

    Hadoop的数据完整性,包括两个方面:一是,数据传输的完整性,也就是读写数据的完整性:二是,数据存储的完整性.     受网络不稳定.硬件损坏等因素,在数据传输和数据存储上,难免会出现数据丢失或脏数 ...

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

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

  3. hadoop原理学习笔记 不含命令

    hadoop海量数据实现原理 如何将机器学习与hadoop对接 不考虑安装二次开发运行 数据是机器学习的核心 hadoop框架 谷歌100亿网页 2011年谷歌100万台服务器 双十一购物信息统计机 ...

  4. Hadoop 原理和架构

    04 | 移动计算比移动数据更划算 那么如何解决 PB 级数据进行计算的问题呢? 这个问题的解决思路其实跟大型网站的分布式架构思路是一样的,采用分布式集群的解决方案,用数千台甚至上万台计算机构建一个大 ...

  5. Hadoop原理及部署初探

    Hadoop Hadoop为何物 Hadoop是一个分布式系统基础架构,由Apache基金会所开发. 用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力高速运算和存储. Had ...

  6. 大数据Hadoop原理学习(HDFS,MAPREDUCE,YARN)

    hadoop hadoop中有3个核心组件: 分布式文件系统:HDFS -- 实现将文件分布式存储在很多的服务器上 分布式运算编程框架:MAPREDUCE -- 实现在很多机器上分布式并行运算 分布式 ...

  7. Hadoop原理与技术——hdfs命令行基本操作

    点击链接查看文档 一.实验目的 熟悉hdfs命令行基本操作 二.实验环境 Windows 10 VMware Workstation Pro虚拟机 Hadoop环境 Jdk1.8 三.实验内容 1:h ...

  8. 【深入理解Hadoop原理】Hadoop 参数配置 详解

    Hadoop 参数配置 详解 一.常用端口 组件 节点 默认端口 配置 用途说明 HDFS DataNode 50010 dfs.datanode.address datanode服务端口,用于数据传 ...

  9. Eclipse上Hadoop插件中Run On Hadoop原理

    对run on hadoop终于有个了解了:它不是把jar包发送到hadoop上去运行,而只是使用了hadoop上的hdfs,从hdfs中获取文件,至于执行,是执行你本地的hadoop包来运行你编写的 ...

  10. 01 Hadoop原理

    Bigdata: 结构化数据:约束如mysql 半结构化数据:如json格式 非结构化数据:没有任何额外的去描述这段数据的元数据:如日志收集数据方式:蜘蛛程序(爬虫),收集的都是非结构化或半结构化数据 ...

最新文章

  1. Selenium之定位元素常用的8种方法整理(第一篇)
  2. Nginx源码分析-启动初始化过程(一)
  3. 从 JavaScript 到 TypeScript
  4. 为什么从网页上打印怎们好像被缩放_便捷高效低成本,映美热敏云打印机CTP-180UWE体验...
  5. [置顶] SPL讲解(6)--Condition篇
  6. JavaScript function函数种类
  7. 用Dell光盘安装系统
  8. 去阿里面试,被一道 Spring 面试题难倒了
  9. 【学习笔记】matlab进行数字信号处理(三)数字滤波技术
  10. IDEA整合SSM框架 applicationcontext in module file is included in 5 contexts
  11. pr如何跳到关键帧_(小白学PR不迷路)只要你用过PR,这些问题你一定遇到过
  12. 浅述狭义相对论的钟慢效应和尺缩效应
  13. Codeforces Problem-705A Hulk
  14. 《三国演义》人物出场实例详解
  15. 业绩暴涨7倍股价却“不动弹”,TCL科技被资本看透了?
  16. Citrix 服务器虚拟化之一 网络部署Xenserver 6.2
  17. MySql前瞻,什么是数据库
  18. android 指定区域内绘制,Android实现扫一扫功能之绘制指定区域透明区域
  19. 计算机配件价格报告,2021年电脑配件行业趋势_2021年电脑配件行业趋势报告_中国报告大厅...
  20. Google Play下载超千万!这款AI人脸风格、换脸APP

热门文章

  1. 马尔科夫matlab程序,马尔科夫链matlab代码
  2. 微信表情包储服务器,微信表情包不用收藏,只需打开这个设置,再也不担心斗图了...
  3. React开发chrome插件系列教程之插件开发环境搭建
  4. Java 代码访问 SMB 协议
  5. 思维导图软件哪个好?盘点10款好用的思维导图软件
  6. 【室内/外设计】天正T20V3.0软件安装教程
  7. EndNote X9破解之后遇到的问题
  8. Socket 服务器和客户端交互
  9. 【Mybatis学习】Mybatis 缓存
  10. 数学对数 log lg ln 简介