hadoop知识点总结(一)hadoop架构以及mapreduce工作机制
1,为什么需要hadoop
数据分析者面临的问题
数据日趋庞大,读写都出现性能瓶颈;
用户的应用和分析结果,对实时性和响应时间要求越来越高;
使用的模型越来越复杂,计算量指数级上升。
期待的解决方案
解决性能瓶颈,在可见的未来不会出现新瓶颈之前的技术可以平稳过渡,如SQL;
转移成本,如软硬件成本,开发成本,技能培养成本,维护成本
2,关系型数据库和MapReduce的比较:
传统关系型数据库 |
MapReduce |
|
数据大小 |
GB |
PB |
访问 |
交互式和批处理 |
批处理 |
更新 |
多次读写 |
一次写入多次读写 |
结构 |
静态模式 |
动态模式 |
完整性 |
低 |
高 |
横向扩展 |
非线性 |
线性 |
3,Hadoop 的优势与特点:
(1)Hadoop基于Java开发,为应用程序提供一组稳定可靠的API接口,实现具有高可靠性和良好扩展性的分布式系统,运行于大量廉价硬件设备组成的集群系统上。
(2)分布式文件系统(HDFS):针对大规模数据的高容错性和高吞吐的分布式文件系统;它可以构建从几台到几千台由常规服务器组成的集群中,并提供高聚合输入输出的文件读写访问。
(3)并行计算框架(MapReduce):适用于大数据量处理的分布式框架,是为离线数据分析而设计,利用数据的并行性进行分布运算,而后汇总结果的计算框架。
(4)NameNode是一个中心服务器,负责管理文件系统的namespace和客户端对文件的访问;Datanode在集群中会有多个,一般是一个节点存在一个,负责管理其自身节点上它们附带的存储。在内部,一个大文件分成一个或多个block,这些block存储在Datanode集合里。Namenode执行文件系统的namespace相关操作,例如打开、关闭、重命名文件和目录,同时决定了Block到具体Datanode节点的映射。Datanode在Namenode的指挥下进行block的创建、删除和复制工作。
单一节点的Namenode大大简化了系统的架构。Namenode负责保管和管理所有的HDFS元数据,因而在请求Namenode得到文件的位置后就不需要通过Namenode参与而直接从Datanode进行。
(5)分布式数据库(HBase):是一个分布式的、按列存储的、多维表结构的实时分布式数据库,它可以提供大数据量架构化和非结构化数据高速读写操作,为高速在线数据服务而设计。
支持每秒数万条级别的高速并发写入和高速查询;可扩展,数据自动切分和分布,可动态扩容,无需停机;数据存放在HDFS文件系统上,不会丢失;灵活的表结构,可动态增加或改变;面向列,可压缩,有效降低磁盘I/O,提高磁盘利用率。多维表,四个维度,其中三个维度可变,适合描述复杂嵌套关系。
(6)并行计算框架(MapReduce):适用于大数据量处理的分布式框架,是为离线数据分析而设计,利用数据的并行性进行分布运算,而后汇总结果的计算框架。
将任务拆分、分布、汇总,开发人员只需要实现业务逻辑;分布任务自动失败重试,单个任务失败不会造成整个任务退出;和HDFS整合,使计算移到数据所在的节点运行。...
4,hadoop体系下的分析手段
主流:Java 程序
轻量级的脚本语言:Pig
SQL技巧平稳:Hive
NoSQL:Hbase
5,hadoop的定义
Hadoop是Apache软件基金会旗下的一个开源分布式计算平台(框架)——Nutch
包含HDFS和MapReduce两大核心模块
为用户提供系统底层细节透明的分布式基础架构。
6,hadoop项目结构
7,hadoop各个节点角色的划分:
1)hadoop1.x
Hadoop角度:Master(主结点)和Slave(从结点)
HDFS角度:NameNode和DataNode
MapReduce角度:JobTracker和TaskTracker
2)hadoop 2.x
HDFS角度:NameNode和DataNode
YARN角度:nodemanager和ResourceManager
8,nameNode和dataNode的特点及作用,(详细可以参考我的另外一篇文章)NameNode和DataNode详细解说
1)NameNode
作用——HDFS的守护程序;记录文件如何分割成数据块的,以及这些数据块被存储到哪些节
点上;对内存和I/O进行集中管理,负责文件元数据的操作.Namenode是主节点,存储
文件的元数据如文件名,文件目录结构,文件属性(生成时间,副本数,文件权限)
以及每个文件的块列表,以及块所在的DataNode等等。
特点——单点(一个集群只有唯一一个NameNode),因此发生故障将使集群崩溃.
2)DataNode
介绍:-----Datanode是文件系统的工作节点,他们根据客户端或者是namenode的调度存储和检
索数据,并且定期向namenode发送他们所存储的块(block)的列表。
作用----- 负责把HDFS数据库读写到本地文件系统,提供真实文件数据的存储服务。
特点:——多点(一个集群可以有多个datanode),因此发生故障将使集群崩溃.
9。SecondaryNamenode介绍
监控HDFS状态的辅助后台程序
每个集群可以有一个或多个
与NameNode进行通讯,定期保存HDFS元数据快照
当NameNode故障可以作为备用NameNode 使用
JobTracker介绍
用于处理作业(用户提交代码)的后台程序
决定有哪些文件参与处理,然后切割task并分配节点
监控task,重启失败的task
每个集群只有唯一一个JobTracker,位于Master节点
TaskTracker介绍
位于slave节点上,与DataNode结合(代码与数据一起)
管理各自节点由JobTracker分配的Task
每个节点只有一个TaskTracker,一个TaskTracker可以启动多个JVM,来并行执行 map或reduce任务
与JobTracker交互
问题:1,什么是Hadoop,你理解中的Hadoop是什么,请举例说明?
2,请阐述Hadoop架构中各个进程的作用?
MapReduce编程模型:
在Hadoop中,每一个MapReduce任务都被初始化为一个Job。
每一个Job又可以分为两个阶段:
Map:Map函数,接收一个<key,value>形式的输入,然后产生同样为<key,value>形式的 中间输出;
Reduce:Reduce函数接收一个<key,value(Listof value)>形式的输入,然后对这个value 集合进行处理并输出结果。
10,数据预处理与输入分片的大小
MapReduce任务擅长处理少量的大数据
若是大量的小数据,则选择先对数据进行一次预处理,将数据合并以提高MapReduce任务 的执行效率。
或当一个Map任务运行只需几秒时,考虑多分配些数据,让其处理
通常,一个Map任务运行60秒左右是比较合适的
11, Map和Reduce任务的数量
Map/Reduce任务槽:这个集群能够同时运行的Map/Reduce任务的最大数量。
任务槽帮助对任务调度进行设置。
设置Map数量主要参考Map运行的时间,设置Reduce任务的数据量参考任务槽的设置,即Reduce任务数是任务槽的0.95或1.75倍。
12,Combine函数 用于本地合并数据的函数。
作用:某些数据在本地会产生很多相同重复的数据,若此时一个一个传递给Reduce任务是非常耗时的;因此,MapReduce框架运行Combine函数用于本地合并,这会大大减少IO操作的消耗。合理设计该函数能有效减少网络传输的数据量,提高MapReduce的效率。
13, 压缩:对Map的中间结果输出和最终结果输出,进行压缩
作用:减少网络传输。有副作用,请根据实际情况来选择。
14, 自定义Comparator 自定义Hadoop数据类型,以实现更加复杂的目的
作用:节省数据序列化和反序列化的时间。
MapReduce工作机制
1.JobConf常用可定制参数
参数 |
作用 |
缺省值 |
其他实现 |
InputFormat |
将输入的数据集切割成小数据集InputSplits,每一个InputSplits将由一个Mapper负责处理。此外,InputFormat提供一个RecordReader的实现,将一个InputSplits解析成<key,value>对提供给map函数 |
TextInputFormat(针对文本文件,按行将文本文件切割成InputSplits,并用LineRecordReader将InputSplits解析成<key,value>对,key是行在文件中的位置,value是文件中的一行) |
SequenceFileInputForm |
SequenceFileInputForm |
提供一个RecordWriter的实现,负责输出最终结果 |
TextOutputFormat(用LineRecordWriter将最终结果写成纯文本文件,每个<key,value>对一行,key和value之间用tab分隔) |
SequenceFileOutputForm |
OutputKeyClass |
输出的最终结果中key的类型 |
LongWritable |
|
OutputValueClass |
输出的最终结果中value的类型 |
Text |
|
MapperClass |
Mapper类,实现map函数,完成输入的<key,value>到中间结果的映射 |
IdentityMapper(将输入的<key,value>原封不动的输出为中间结果) |
LongSumReducer, LogRegexMapper, InverseMapper |
CombinerClass |
实现combine函数,将中间结果中的重复key做合并 |
Null(不对中间结果中的重复key做合并) |
|
ReducerClass |
实现reduce函数,对中间结果做合并,形成最终结果 |
IdentityReducer(将中间结果直接输出为最终结果) |
AccumulatingReducer,LongSumReducer |
InputPath |
设定Job的输入目录,Job运行时会处理输入目录下的所有文件 |
Null |
|
OutputPath |
设定Job的输出目录,Job的最终结果会写入输出目录之下 |
Null |
|
MapOutputKeyClass |
设定map函数输出的中间结果中key的类型 |
如果用户没有设定,使用OutputKeyClass |
|
MapOutputValueClass |
设定Map函数输出的中间结果中value的类型 |
如果用户没有设定,使用OutputValueClass |
|
OutputKeyComparator |
对结果中的key进行排序时,使用的比较器 |
WritableComparable |
|
PartitionerClass |
对中间结果key排序后,用Partition函数将其划分为R份,每一份由一个Reducer负责处理。 |
HashPartitioner(使用Hash函数做partition) |
KeyFieldBasedPartitioner PipesPartitioner |
2, Hadoop运行MapReduce作业的工作原理
(1)作业的提交
作业提交后,用户不能对作业进行修改,只能监控或强制终止;
在作业提交之前,用户需做好所有参数的配置工作。(配置工作包括:
程序代码map和reduce,Map和Reduce接口的配置,配置四个参数;
Map接口的输出类型和Reduce接口的输入类型一致;输入输出路径
必须保证输出路径下不存在该文件夹;其他类型设置)
(2)作业的初始化
当JobTracker接收到对其submitJob()方法的调用后,会把此调用放入一个内部的队列中,交由作业调度器进行调度,并对其进行初始化;初始化包括创建一个表示正在运行作业的对象,封装任务和记录信息,以便跟踪任务的状态和进程。
初始化步骤:作业调度器从HDFS中读取已经计算好的输入分片 信息;
为每个分片创建一个map任务;
创建Reduce任务的数量根据输入数据划分信息来设定个数;
调度器创建相应数量的要运行的Reduce任务;
任务在此时被指定ID。
(3)任务分配
TaskTracker和JobTracker之间的通信和任务的分配是通过“心跳”机制来完成的。
(4)任务执行
通过从HDFS中把作业的JAR文件复制到taskTracker所在的文件系统,从而实现作业的JAR文件本地化;
taskTracker将应用程序所需要的全部文件从分布式缓存复制到本地磁盘;
taskTracker为任务新建一个本地工作目录,并把JAR文件中的内容解压到这个文件夹下;
taskTracker新建一个TaskRunner实例来运行该任务。
(5)进度和状态的更新
当提交作业后,Hadoop会进入完全自动化的执行过程;但用户往往需要能够知晓作业的运行状态;
因此,任务在运行时,对其进度(任务完成百分比)保持追踪,对于用户来说是非常重要的。
(6)作业的完成
当JobTracker收到作业最后一个任务已完成的通知后,便把作业的状态设置为“成功”;
在JobClient查询状态时,便知道任务已成功完成,于是JobClient打印一条消息告知用户,然后从runJob()方法返回;
最后,JobTracker将清空作业的工作状态,指示taskTracker也清空作业的工作状态。
(7)失败:在实际情况下,用户代码存在软件错误,进程会崩溃,机器会产生故障。
3,shuff和排序
MapReduce确保每个Reduce的输入都按键排序;
系统执行排序的过程——将map输出作为输入传给Reduce——称为shuffle;
Shuffle属于不断被优化和改进的代码库的一部分,提出它的目的只有一个——出于效率的考虑进行预排序;Shuffle是MapReduce的“心脏”,是奇迹发生的地方
(1)Shuffle过程在Map端,对Map的结果进行划分,排序,分割,将属于同一个划分的输出,合并在一起,并写入磁盘,按照不同的划分将结果发送给对应的Reduce。Map输出的划分与Reduce的对应关系由JobTracker确定。
(2)在写磁盘过程中,map函数的输出继续被写到缓冲区,但如果此期间缓冲区被填满;Map任务必须等待,直到写磁盘过程完成;写磁盘将按轮询方式写到指定作业的特定子目录中的目录中。
(3) Shuffle过程在Reduce端分成三个阶段:复制Map输出、排序合并以及Reduce处理.
1) 复制Map输出:Map输出文件位于运行Map任务的tasktracker的本地磁盘;
现在,tasktracker需要为分区文件运行Reduce任务;Reduce任务需要集群上若干个Map任务的Map输出,作为其分区文件;每个Map任务的完成时间可能不同,因此只要有一个任务完成,Reduce任务就开始复制其输出;这就是Reduce任务的复制阶段。
2) 排序合并:在Reduce复制Map的输出结果的同时,Reduce任务进入排序合并阶段;
此阶段重点是合并,因为排序在map端进行;该阶段的任务是将从各个MapTaskTracker上复制的Map输出文件进行整合,并维持数据原来的顺序.
3) Reduce处理: Reduce端的最后阶段就是对合并的文件进行Reduce处理。
4,配置的调优
在shuffle这一过程中,完成单位任务使用时间最多的一般都是IO操作;总的原则是给shuffle过程尽量多的提供内存空间;但一定要保证Map函数和Reduce函数能有足够的内存来运行;运行Map任务和Reduce任务的JVM,内存大小由mapred.child.java.opts属性来设置。
在map端,可以通过避免多次溢出写磁盘来获得最佳性能;通过合理的设置io.sort.*属性来减少这种情况下的溢出写次数;具体来说,如果可以,应增加io.sort.mb的值。
在reduce端,中间数据全部驻留在内存中,就能获得最佳性能;一般,此情况是不可能发生的;若reduce函数的内存需求不大,可把mapred.inmem.merge.threshold设置为0,把mapred.job.reduce.input.buffer.percent设置为1.0,或更小值,则会带来性能的提升。
hadoop知识点总结(一)hadoop架构以及mapreduce工作机制的更多相关文章
- hadoop MapReduce 工作机制
摸索了将近一个月的hadoop , 在centos上配了一个伪分布式的环境,又折腾了一把hadoop eclipse plugin,最后终于实现了在windows上编写MapReduce程序,在cen ...
- MapReduce工作机制——Word Count实例(一)
MapReduce工作机制--Word Count实例(一) MapReduce的思想是分布式计算,也就是分而治之,并行计算提高速度. 编程思想 首先,要将数据抽象为键值对的形式,map函数输入键值对 ...
- MapReduce06 MapReduce工作机制
目录 5 MapReduce工作机制(重点) 5.1 MapTask工作机制 5.2 ReduceTask工作机制 5.3 ReduceTask并行度决定机制 手动设置ReduceTask数量 测试R ...
- Hadoop(五)—— HDFS NameNode、DataNode工作机制
一.NN与2NN工作机制 NameNode(NN) 1.当HDFS启动时,会加载日志(edits)和镜像文件(fsImage)到内存中. 2-4.当元数据的增删改查请求进来时,NameNode会先将操 ...
- yarn/mapreduce工作机制及mapreduce客户端代码编写
首先需要知道的就是在老版本的hadoop中是没有yarn的,mapreduce既负责资源分配又负责业务逻辑处理.为了解耦,把资源分配这块抽了出来,形成了yarn,这样不仅mapreudce可以用yar ...
- 浅谈MapReduce工作机制
1.MapTask工作机制 整个map阶段流程大体如上图所示.简单概述:input File通过getSplits被逻辑切分为多个split文件,通通过RecordReader(默认使用lineRec ...
- [hadoop读书笔记] 第五章 MapReduce工作机制
P205 MapReduce的两种运行机制 第一种:经典的MR运行机制 - MR 1 可以通过一个简单的方法调用来运行MR作业:Job对象上的submit().也可以调用waitForCompleti ...
- hadoop学习笔记(十):MapReduce工作原理(重点)
一.MapReduce完整运行流程 解析: 1 在客户端启动一个作业. 2 向JobTracker请求一个Job ID. 3 将运行作业所需要的资源文件复制到HDFS上,包括MapReduce程序打包 ...
- MapReduce工作机制
MapReduce是什么? MapReduce是一种分布式计算模型,由Google提出,主要用于搜索领域,MapReduce程序本质上是并行运行的,因此可以解决海量数据的计算问题. MapReduce ...
随机推荐
- 第六章节 BJROBOT 动态导航壁障
导航前说明:一定要确保你小车在构建好地图的基础上进行! 1.把小车平放在你想要构建地图区域的地板上,打开资料里的虚拟机,打开一个终端, ssh 过去主控端启动 roslaunch znjrobot b ...
- ES6参数默认值,剩余参数及展开数组
一.函数的参数默认值 在ES6之前,想要给参数设置默认值得话,只能在函数体内部加判断设置,比如如果传递参数为undefined时为true, 否则为false,如下图example1,ES6出现语法可 ...
- web元素定位和appium-app元素定位
一.web页面元素定位工具介绍 1.打开google浏览器,按F12进入开发者模式,如下图: 2.用鼠标点击下图红色框中的箭头--然后鼠标移动到web页面的元素上(此处为百度框),会自动定位到对应的h ...
- 2020DevOps状态报告——变更管理
如果你的公司还没有走向平台化,现在仍然可以是很大的飞跃.您仍然可以通过解决公司的变更管理流程来加快软件交付.在本章中,我们将研究我们在公司内部所学的变更管理模式.我们将向您展示什么是有效的,什么是无效 ...
- STP、PVST、MST协议
• STP:生成树协议 ○ 阻止环形链路的广播风暴 • PVST:VLAN生成树 ○ 是STP的进阶版不仅能阻止广播风暴,还可以做到基于VLAN进行流量均衡. ...
- 对于k8s微服务的性能测试监控平台搭建
之前有写过对于传统项目的性能测试监控,但是对于目前市场占比已经很低,大部分项目使用k8s,今天讲一下对于k8s如何去监控. 对于k8s的监控我们所有的操作都要在master下进行. 一.部署grafa ...
- SonarQube学习(五)- SonarQube之自定义规则使用
一.前言 古人云:"欲速则不达",最近真的是深有体会.学习也是如此,不是一件着急的事,越是着急越不会. 就拿SonarQube来说吧,去年年末就想学来着,但是想着想着就搁置了,有时 ...
- 【剑指 Offer】12.矩阵中的路径
题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左.右.上.下移动一格. 如果一条路径经过了矩阵的某一格,那么 ...
- Educational Codeforces Round 102 (Rated for Div. 2)
比赛地址 A(水题) 题目链接 题目: 给出一个数组\(a\)并能进行一个操作使得数组元素更改为数组任意其他两元素之和,问是否可以让数组元素全部小于等于\(d\) 解析: 排序后判断最大值是否小于等于 ...
- leetcode-222完全二叉树的节点个数
题目 给出一个完全二叉树,求出该树的节点个数. 说明: 完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置. ...