小白系列之通俗易懂的Hadoop
Hadoop集群
由HDFS、MapReduce、Yarn三部分分开诉说。只用简单的话来介绍基本原理,涉及不深,如有错误请多多指点。
Hadoop是基于Google的集群系统理论来进行的开源实现:
Google的集群系统:GFS、MapReduce、BigTable
Hadoop的集群系统:HDFS、MapReduce、HBase
Hadoop设计的初衷是为了解决Nutch的海量数据存储和处理的需求,可以解决大数据场景下的数据存储和处理的问题。一开始HDFS和MapReduce是作为Nutch的两个组件来使用,后来发现这两个组件不只是可以用在Nutch搜索,所以就单独取出来组成了Hadoop。
需要注意的是Hadoop处理的离线数据,即在数据已知以及不要求实时性的场景下使用。
传统数据的特点
- GB、TB级别的数据
- 数据增长不快
- 主要为结构化的数据
- 统计和报表
大数据的特点
TB、PB级别的数据
持续的高速增长
半结构化、非结构化的数据
数据挖掘和预测性分析
海量数据的获取、存储、聚合、管理这些数据以及对数据进行深度分析的新技术和新能力。
Hadoop名字的起源: Doug Cutting如此解释Hadoop的得名:“这个名字是我孩子给一头吃饱了的棕黄色大象命名的。我的命名标准就是简短,容易发音和拼写,没有太多的意义,并且不会被用于别处。小孩子是这方面的高手。Google就是由小孩命名的。”
组成
HDFS:用于分布式文件的存储
MapReduce:用于数据的计算
Yarn:进行任务调度。是Hadoop2.0出现的
HDFS
什么是HDFS?
HDFS全称是Hadoop分布式文件存储系统,通过将大规模数据文件切分为block数据块,并多复本的存储在集群的多个DataNode节点中,来保证大数据存储的高可靠高性能。
有哪些优缺点?
优点是:1.支持超大文件;2.可以快速检测和应对机器故障(通过故障检测和心跳机制);3.有很高数据吞吐量(通过流式数据访问和简化一致性模型);4.高容错性(通过多个副本);5.可以构建在廉价的机器上。
缺点是:1.不适合低延迟的访问需求(HDFS注重于高数据吞吐量);2.大量小文件会影响NameNode的性能(NameNode内存的大小决定了HDFS可保存的文件数量);3.不适合多用户写入和修改文件(HDFS只支持一次写入多次读取,只能追加不能修改);
读数据流程
1.客户端向NameNode提交读数据申请;2.NameNode通过查找元数据返回文件的block列表和DataNode地址;3.客户端会挑选最近的DataNode读取block,读取完成后关当前闭DataNode连接并寻找下一个block所在的DataNode;4.每读完一个block都会进行checknum验证,如果出现错误会从下一个拥有该block副本的DataNode读取;5.全部读取完成后DataNode通知NameNode关闭连接。
写数据流程
1.客户端向NameNode提交写数据申请;2.NameNode会检查该文件是否存在,返回是否可以上传;3.当客户端写入文件时,会向NameNode申请blocks,获取合适的DataNode列表;4.以管道的形式将开发者切分好的文件写入DataNode中,该DataNode同时向副本DataNode写入数据;5.文件存储成功后会返回一个应答信息给客户端完成数据写入。
大量小文件处理
危害:对于HDFS来说,大量小文件需要大量的元数据,会大量消耗NameNode的存储控制;对于MapReduce来说,大量小文件会在启动时创建大量的mapper,内存消耗巨大。
处理:可以将大量小文件合成一个大文件来处理。1.可以使用Hadoop Archive来将小文件合并成一个HAR文件,HAR文件只占用一条元数据,但是其中会记录小文件的索引信息。 2.可以开发InputFormat,从多个小文件中读取数据作为一个Mapper的输入。
MapReduce
什么是MapReduce?
MapReduce是一种分布式计算模型,用于解决海量数据的计算问题。它主要由Map和Reduce两个阶段组成,用户只需要实现map()和reduce()两个函数即可实现分布式计算。
Map阶段:1.读取文件内容,解析为key-value对,每一个键值对会调用一次map函数;2.通过编写逻辑对输入的键值对进行处理转换成新的键值对输出;3.输出的键值对会进行分区,相同分区的数据会根据key的顺序放在同一个集合中。
Reduce阶段:1.reduce会主动获取map任务的输出,按照不同的分区复制到不同的reduce。2.通过编写逻辑对多个map任务的输出进行处理,转换为新的键值对输出;3.最后将结果保存在文件中。
shuffle机制
shuffle机制的MapReduce框架最为核心的部分,主要是指将Map输出结果交给Reduce的过程。可以分为Map端和Redeuce端。
在Map端,Map的输出结果会先写入环形缓冲区,缓存中的数据会进行分区、排序和合并,当缓存达到溢写比后会写出为磁盘文件,在Map任务结束之前会将多个溢写文件合并为一个大文件,通知对应的Reduce任务进行处理。
在Reduce端,从不同的Map处获取任务数据后放入缓冲区进行归并和合并操作,最后交给reduce函数处理
处理数据倾斜问题
数据倾斜的产生是由于数据的key分化严重不均,形成一部分数据很多,一部分数据很少的局面,导致存在reduce节点运行过慢从而增加整体运行时间的情况。
1.可以将一次的MapReduce操作分为两次,第一次map处理时将key随机分到不同的reduce中先进行一次处理,再将相同key分配到reduce中进行第二次处理。
2.将可能出现大量数据的key分为多组进行reduce操作,再进行第二次MR操作。
3.增加reduce的内存,增加reduce的个数
实现二次排序
优先按照第一列排序,第一列相同则按照第二列排序,都相同则保留
1.编写bean类将两列的数据封装,在bean中的comparato方法中实现需求逻辑;2.Mapper中读取两列封装为一个bean作为key,value为空。
MR调优策略
1.减少数据的传输量
2.尽量使用内存
3.减少磁盘I/O的次数
4.增大任务并行数
5.除此之外还有根据自己集群及网络的实际情况来调优
Yarn
Yarn在集群中有什么作用?
YARN是Hadoop的集群资源管理系统。主要由资源管理器Resource Manager和节点管理器Node Manager组成。
Yarn的组成
Resource Manager是一个全局资源管理器,负责整个系统的资源管理和分配。主要由调度器(Scheduler)和应用程序管理器(ApplicationsManager)组成。
Scheduler调度器:根据容量、队列等限定条件将系统中的资源分配给各个正在运行的应用程序。分配资源的单位是资源容器Resource Container。
Container资源容器:是一个动态资源分配单位,它将内存。CPU等资源封装在一起,从而限定每个任务使用的资源量。
ApplicationsManager应用程序管理器:负责管理整个系统中所有应用程序,包括应用程序提交、ApplicationMaster的启动、监控AM的运行状态并在失败时重新启动它等。
Node Manager是每个节点上的资源和任务管理器,它会定时的向ResourceManager汇报本节点上的资源使用情况和Container容器的运行状态。同事会接受和处理来自ApplicationMaster的Container启动停止等各种请求。
ApplicationMaster(AM):用户提交的每一个应用程序都包含一个AM,主要用于与RM调度器协商获取Container容器资源、将得到的任务进一步分配个内部的任务、与NM通信来启动和停止任务、监控所有任务的运行状态并在任务失败时重新申请任务资源来重启任务。
执行过程
客户端发起请求,在ResourceManager中由Scheduler分配Container资源,由ApplicationsManager启动应用程序和ApplicationMaster来生成一个资源队列,在NodeManager上执行。
小白系列之通俗易懂的Hadoop相关推荐
- 大数据小白系列——HDFS(1)
[注1:结尾有大福利!] [注2:想写一个大数据小白系列,介绍大数据生态系统中的主要成员,理解其原理,明白其用途,万一有用呢,对不对.] 大数据是什么?抛开那些高大上但笼统的说法,其实大数据说的是两件 ...
- 大数据小白系列——HDFS(3)
这里是大数据小白系列,这是本系列的第三篇,介绍HDFS中NameNode选举,JournalNode等概念. 上一期我们说到了为解决NameNode(下称NN)单点失败问题,HDFS中使用了双NN的机 ...
- 蓝桥杯小白系列之汇编点亮led灯
蓝桥杯小白系列之汇编点亮led灯 1.源代码 2.逐条分析 (1)ORG 0000H (2)START: 伪指令,编译器可识别,单片机不可识别,可以随便起. (3)蜂鸣器设置 蓝桥板插电以后蜂鸣器常会 ...
- 小白系列:LNMP搭建
先来讲讲为啥子,要写这篇文章 因为服务器操作系统,软件版本,以及需求,都千奇百怪.网上有很多教程每一种都不一样!而且按照上面傻瓜式复制粘贴操作完成安装的也在少数(本人用了很多但是没有一个傻瓜操作成功的 ...
- 小白系列(1) | 计算机视觉之图像分类
原文地址:小白系列(1) | 计算机视觉之图像分类 本文将分享以下内容: 图像分类为什么那么重要? 什么是图像分类? 图像分类是怎么做的? 基于机器学习的图像分类 CNN图像分类(深度学习方法) 图像 ...
- Ubuntu20.04 -- 小白系列1 之 你可能会遇到
目录 1.时间差异(windows与ubuntu切换时) 2.微信安装 3.搜狗输入法安装 4.优麒麟官网 5.本机的应用安装打不开 6.换源(大概半小时) 7.下载fctix 8.安装与写在软件命令 ...
- Stata小白系列之一:调入数据
Stata小白系列之一:调入数据 转自公众号:连享会 目录 概念区分 调入本地标准文件 调入全部数据 调入部分变量 调入部分样本 调入具有某些特征的样本 调入网络文件 调用 stata 自带数据库 ...
- 【小白系列】 简单的二分查找思想
目录 1.前言 2.举例讲解 2.1 简单举例 2.2 代码示例 3. 易错点 4.结语 1.前言 为了提高查找的效率,在查找方法上引入了二分查找的思想.比起一个一个地核对,二分查找具有高效,快捷的特 ...
- RTK+GPS提高定位精度原理解析(一个小白写给另一个小白系列)
RTK+GPS提高定位精度原理解析(一个小白写给另一个小白系列) GPS定位原理回顾 RTK基本概念 RTK组成 RTK传输差分示意 RTK数据链接 坐标转换 RTK应用 后记 我们在上一篇文章导航定 ...
最新文章
- Servlet Listener
- 服务器监控软件ZABBIX
- Ardino基础教程 15_火焰报警器
- 关于java中的集合如何删除一个元素。
- (转)#ifndef的用法
- LoadRunner截取字符串操作
- Wingdings特殊字符及符号对照表
- STM32HAL库使用RX8025
- 问答网站Stack Overflow的成功之道
- android模拟走路,走路模拟器官网版
- 2022年京东618店庆活动优惠力度怎么样?
- 关于n阶线性齐次常微分的特征方程特征根相同时解的推导
- 基于Xposed框架截取安卓手机应用数据信息
- 唯品会、滴滴、沪江架构师,关于微服务粒度、高可用、持续交互的实践分享交流(下)...
- 没有网店经验的小商家在轻栈也可以将小程序商城搞得风生水起
- 华为鸿蒙系统智能手机_Android再见!华为42款智能手机将兼容鸿蒙操作系统
- (遇到问题)(已解决) raise NotImplementedErrorNotImplementedError
- 解决网站出现“Error establishing a database connection“的方法
- elasitcsearch从安装到集成springboot
- html获得剪切板数据,JS 获取chrome剪切板数据