Hadoop基础

Hadoop

Apache™ Hadoop® 是一个开源的, 可靠的(reliable), 可扩展的(scalable)分布式计算框架
允许使用简单的编程模型跨计算机集群分布式处理大型数据集
可扩展: 从单个服务器扩展到数千台计算机,每台计算机都提供本地计算和存储
可靠的: 不依靠硬件来提供高可用性(high-availability),而是在应用层检测和处理故障,从而在计算机集群之上提供高可用服务
Hadoop能做什么?
1.搭建大型数据仓库
2.PB级数据的存储 处理 分析 统计等业务
搜索引擎
日志分析
数据挖掘
商业智能(Business Intelligence,简称:BI)

Hadoop核心组件

Hadoop是所有搜索引擎的共性问题的廉价解决方案

1.如何存储持续增长的海量网页: 单节点 V.S. 分布式存储
2.如何对持续增长的海量网页进行排序: 超算 V.S. 分布式计算
3.HDFS 解决分布式存储问题
4.MapReduce 解决分布式计算问题
Hadoop Common: The common utilities that support the other Hadoop modules.(hadoop的核心组件)

Hadoop Distributed File System (HDFS™): A distributed file system that provides high-throughput access to application data.(分布式文件系统)
源自于Google的GFS论文, 论文发表于2003年10月
HDFS是GFS的开源实现
HDFS的特点:扩展性&容错性&海量数量存储
将文件切分成指定大小的数据块, 并在多台机器上保存多个副本
数据切分、多副本、容错等操作对用户是透明的
下面这张图是数据块多份复制存储的示意
图中对于文件 /users/sameerp/data/part-0,其复制备份数设置为2, 存储的BlockID分别为1、3。
Block1的两个备份存储在DataNode0和DataNode2两个服务器上
Block3的两个备份存储在DataNode4和DataNode6两个服务器上
在这里插入图片描述
Hadoop MapReduce: A YARN-based system for parallel processing of large data sets.

分布式计算框架
源于Google的MapReduce论文,论文发表于2004年12月
MapReduce是GoogleMapReduce的开源实现
MapReduce特点:扩展性&容错性&海量数据离线处理
在这里插入图片描述

Hadoop YARN: A framework for job scheduling and cluster resource management.(资源调度系统)

YARN: Yet Another Resource Negotiator

负责整个集群资源的管理和调度

YARN特点:扩展性&容错性&多框架资源统一调度

在这里插入图片描述

Hadoop优势

1.高可靠
数据存储: 数据块多副本
数据计算: 某个节点崩溃, 会自动重新调度作业计算
2.高扩展性
存储/计算资源不够时,可以横向的线性扩展机器
一个集群中可以包含数以千计的节点
集群可以使用廉价机器,成本低
3.Hadoop生态系统成熟

HDFS设计思路

分布式文件系统的设计思路:

在这里插入图片描述

HDFS的设计目标

适合运行在通用硬件(commodity hardware)上的分布式文件系统
高度容错性的系统,适合部署在廉价的机器上
HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用
容易扩展,为用户提供性能不错的文件存储服务

HDFS架构

1.1个NameNode/NN(Master) 带 DataNode/DN(Slaves) (Master-Slave结构)
2.1个文件会被拆分成多个Block
3.NameNode(NN)
负责客户端请求的响应
负责元数据(文件的名称、副本系数、Block存放的DN)的管理
元数据 MetaData 描述数据的数据
监控DataNode健康状况 10分钟没有收到DataNode报告认为Datanode死掉了
4.DataNode(DN)
存储用户的文件对应的数据块(Block)
要定期向NN发送心跳信息,汇报本身及其所有的block信息,健康状况
5.分布式集群NameNode和DataNode部署在不同机器上
在这里插入图片描述

HDFS优缺点
优点:
数据冗余 硬件容错
适合存储大文件
处理流式数据
可构建在廉价机器上
缺点:
低延迟的数据访问
小文件存储

YARN&MapReduce

资源调度框架 YARN

Yet Another Resource Negotiator, 另一种资源协调者
通用资源管理系统
为上层应用提供统一的资源管理和调度,为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处

YARN产生背景

通用资源管理系统

Hadoop数据分布式存储(数据分块,冗余存储)
当多个MapReduce任务要用到相同的hdfs数据, 需要进行资源调度管理
Hadoop1.x时并没有YARN,MapReduce 既负责进行计算作业又处理服务器集群资源调度管理
服务器集群资源调度管理和MapReduce执行过程耦合在一起带来的问题

1.Hadoop早期, 技术只有Hadoop, 这个问题不明显
2.随着大数据技术的发展,Spark Storm … 计算框架都要用到服务器集群资源
3.如果没有通用资源管理系统,只能为多个集群分别提供数据
资源利用率低 运维成本高
在这里插入图片描述
4.Yarn (Yet Another Resource Negotiator) 另一种资源调度器
Mesos 大数据资源管理产品
不同计算框架可以共享同一个HDFS集群上的数据,享受整体的资源调度
在这里插入图片描述

YARN的架构和执行流程

ResourceManager: RM 资源管理器​ 整个集群同一时间提供服务的RM只有一个,负责集群资源的统一管理和调度​ 处理客户端的请求: submit, kill​ 监控我们的NM,一旦某个NM挂了,那么该NM上运行的任务需要告诉我们的AM来如何进行处理
NodeManager: NM 节点管理器​ 整个集群中有多个,负责自己本身节点资源管理和使用​ 定时向RM汇报本节点的资源使用情况​ 接收并处理来自RM的各种命令:启动Container​ 处理来自AM的命令
ApplicationMaster: AM​ 每个应用程序对应一个:MR、Spark,负责应用程序的管理​ 为应用程序向RM申请资源(core、memory),分配给内部task​ 需要与NM通信:启动/停止task,task是运行在container里面,AM也是运行在container里面
Container 容器: 封装了CPU、Memory等资源的一个容器,是一个任务运行环境的抽象
Client: 提交作业 查询作业的运行进度,杀死作业
在这里插入图片描述

1,Client提交作业请求
2,ResourceManager 进程和 NodeManager 进程通信,根据集群资源,为用户程序分配第一个Container(容器),并将 ApplicationMaster 分发到这个容器上面
3,在启动的Container中创建ApplicationMaster
4,ApplicationMaster启动后向ResourceManager注册进程,申请资源
5,ApplicationMaster申请到资源后,向对应的NodeManager申请启动Container,将要执行的程序分发到NodeManager上
6,Container启动后,执行对应的任务
7,Tast执行完毕之后,向ApplicationMaster返回结果
8,ApplicationMaster向ResourceManager 请求kill

分布式处理框架 MapReduce

源于Google的MapReduce论文(2004年12月)
Hadoop的MapReduce是Google论文的开源实现
MapReduce优点: 海量数据离线处理&易开发
MapReduce缺点: 实时流式计算

MapReduce编程模型

MapReduce分而治之的思想
数钱实例:一堆钞票,各种面值分别是多少
单点策略
一个人数所有的钞票,数出各种面值有多少张
分治策略
每个人分得一堆钞票,数出各种面值有多少张
汇总,每个人负责统计一种面值
解决数据可以切割进行计算的应用
MapReduce编程分Map和Reduce阶段
将作业拆分成Map阶段和Reduce阶段
Map阶段 Map Tasks 分:把复杂的问题分解为若干"简单的任务"
Reduce阶段: Reduce Tasks 合:reduce
MapReduce编程执行步骤

准备MapReduce的输入数据
准备Mapper数据
Shuffle
Reduce处理
结果输出
编程模型
借鉴函数式编程方式
用户只需要实现两个函数接口:
Map(in_key,in_value)
—>(out_key,intermediate_value) list
Reduce(out_key,intermediate_value) list
—>out_value list
Word Count 词频统计案例

在这里插入图片描述

MapReduce原理详解

单机程序计算流程
输入数据—>读取数据—>处理数据—>写入数据—>输出数据
Hadoop计算流程
input data:输入数据
InputFormat:对数据进行切分,格式化处理
map:将前面切分的数据做map处理(将数据进行分类,输出(k,v)键值对数据)
shuffle&sort:将相同的数据放在一起,并对数据进行排序处理
reduce:将map输出的数据进行hash计算,对每个map数据进行统计计算
OutputFormat:格式化输出数据
在这里插入图片描述
在这里插入图片描述
MapReduce架构
MapReduce架构 1.X
JobTracker:负责接收客户作业提交,负责任务到作业节点上运行,检查作业的状态
TaskTracker:由JobTracker指派任务,定期向JobTracker汇报状态,在每一个工作节点上永远只会有一个TaskTracker
在这里插入图片描述
MapReduce2.X架构

ResourceManager:负责资源的管理,负责提交任务到NodeManager所在的节点运行,检查节点的状态
NodeManager:由ResourceManager指派任务,定期向ResourceManager汇报状态
在这里插入图片描述

Hadoop生态系统

广义的Hadoop:指的是Hadoop生态系统,Hadoop生态系统是一个很庞大的概念,hadoop是其中最重要最基础的一个部分,生态系统中每一子系统只解决某一个特定的问题域(甚至可能更窄),不搞统一型的全能系统,而是小而精的多个小系统
在这里插入图片描述
Hive:数据仓库
R:数据分析
Mahout:机器学习库
pig:脚本语言,跟Hive类似
Oozie:工作流引擎,管理作业执行顺序
Zookeeper:用户无感知,主节点挂掉选择从节点作为主的
Flume:日志收集框架
Sqoop:数据交换框架,例如:关系型数据库与HDFS之间的数据交换
Hbase : 海量数据中的查询,相当于分布式文件系统中的数据库
Spark: 分布式的计算框架基于内存 pyspark java scala java虚拟机语言
spark core
spark sql
spark streaming 准实时 不算是一个标准的流式计算
spark ML spark MLlib
Kafka: 消息队列
Storm: 分布式的流式计算框架 不适合python操作storm
Flink: 分布式的流式计算框架
Hadoop生态系统的特点
开源、社区活跃
囊括了大数据处理的方方面面
成熟的生态圈

HDFS 读写流程& 高可用

1.客户端向NameNode发出写文件请求。
2.检查是否已存在文件、检查权限。若通过检查,直接先将操作写入EditLog,并返回输出流对象。 (注:WAL,write ahead log,先写Log,再写内存,因为EditLog记录的是最新的HDFS客户端执行所有的写操作。如果后续真实写操作失败了,由于在真实写操作之前,操作就被写入EditLog中了,故EditLog中仍会有记录,我们不用担心后续client读不到相应的数据块,因为在第5步中DataNode收到块后会有一返回确认信息,若没写成功,发送端没收到确认信息,会一直重试,直到成功)
3.client端按128MB的块切分文件。
4.client将NameNode返回的分配的可写的DataNode列表和Data数据一同发送给最近的第一个DataNode节点,此后client端和NameNode分配的多个DataNode构成pipeline管道,client端向输出流对象中写数据。client每向第一个DataNode写入一个packet,这个packet便会直接在pipeline里传给第二个、第三个…DataNode。 (注:并不是写好一个块或一整个文件后才向后分发)
5.每个DataNode写完一个块后,会返回确认信息。 (注:并不是每写完一个packet后就返回确认信息,个人觉得因为packet中的每个chunk都携带校验信息,没必要每写一个就汇报一下,这样效率太慢。正确的做法是写完一个block块后,对校验信息进行汇总分析,就能得出是否有块写错的情况发生)
6.写完数据,关闭输输出流。
7.发送完成信号给NameNode。
(注:发送完成信号的时机取决于集群是强一致性还是最终一致性,强一致性则需要所有DataNode写完后才向NameNode汇报。最终一致性则其中任意一个DataNode写完后就能单独向NameNode汇报,HDFS一般情况下都是强调强一致性)

HDFS如何实现高可用(HA)

数据存储故障容错
磁盘介质在存储过程中受环境或者老化影响,数据可能错乱
对于存储在 DataNode 上的数据块,计算并存储校验和(CheckSum)
读取数据的时候, 重新计算读取出来的数据校验和, 校验不正确抛出异常, 从其它DataNode上读取备份数据
磁盘故障容错
DataNode 监测到本机的某块磁盘损坏
将该块磁盘上存储的所有 BlockID 报告给 NameNode
NameNode 检查这些数据块在哪些DataNode上有备份,
通知相应DataNode, 将数据复制到其他服务器上
DataNode故障容错
通过心跳和NameNode保持通讯
超时未发送心跳, NameNode会认为这个DataNode已经宕机
NameNode查找这个DataNode上有哪些数据块, 以及这些数据在其它DataNode服务器上的存储情况
从其它DataNode服务器上复制数据
NameNode故障容错
主从热备 必须通过zookeeper(secondary namenode namenode数据的备份)
zookeeper配合 master节点选举

大数据产品与互联网产品结合

分布式系统执行任务瓶颈: 延迟高 MapReduce 几分钟 Spark几秒钟
互联网产品要求
毫秒级响应(1秒以内完成)
需要通过大数据实现 统计分析 数据挖掘 关联推荐 用户画像
大数据平台
整合网站应用和大数据系统之间的差异, 将应用产生的数据导入到大数据系统, 经过处理计算后再导出给应用程序使用
互联网大数据平台架构:
在这里插入图片描述

数据采集
App/Web 产生的数据&日志同步到大数据系统
数据库同步:Sqoop 日志同步:Flume 打点: Kafka
不同数据源产生的数据质量可能差别很大
数据库 也许可以直接用
日志 爬虫 大量的清洗,转化处理
数据处理
大数据存储与计算的核心
数据同步后导入HDFS
MapReduce Hive Spark 读取数据进行计算 结果再保存到HDFS
MapReduce Hive Spark 离线计算, HDFS 离线存储
离线计算通常针对(某一类别)全体数据, 比如 历史上所有订单
离线计算特点: 数据规模大, 运行时间长
流式计算
淘宝双11 每秒产生订单数 监控宣传
Storm(毫秒) SparkStreaming(秒)
数据输出与展示
HDFS需要把数据导出交给应用程序, 让用户实时展示 ECharts
淘宝卖家量子魔方
给运营和决策层提供各种统计报告, 数据需要写入数据库
很多运营管理人员, 上班后就会登陆后台数据系统
任务调度系统
将上面三个部分整合起来

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值