【博学谷学习记录】超强总结,用心分享|大数据之Hadoop

Hadoop学习过程

Hadoop 是什么

  1. Hadoop是一个由Apache基金会所开发的分布式系统基础架构。
  2. 主要是用来解决海量数据的存储和海量数据的分析计算问题。
  3. 一般来说Hadoop通常是指——Hadoop生态圈。

Hadoop优势

  1. 高可靠性:地城维护多个数据副本,即使计算元素或者存储在运行中出现问题,也不会导致数据的丢失。
  2. 高扩展性:在集群间分配任务数据,方便扩展新的任务节点。
  3. 高效性:Hadoop中mapReduce的工作模式是并发进行,以加快任务处理的速度。
  4. 高容错性:能够自动将失败的任务重新分配。

Hadoop 组成

组成

hadoop的运行模式

  1. 单机模式
  2. 伪分布式
  3. 完全分布式

HDFS

hdfs是一个分布式的文件系统。全称是Hadoop Distributed File System,它是一个文件系统,通过目录树来定位文件,其次hdfs是分布式的,由很多服务器联合起来实现其功能,集群中的服务 器有各自的角色。hdfs适合一次写入多次读取的场景。

  1. NameNode(nn):存储文件的元数据,如文件名,文件目录结构,文件属性(生成时间、副本数、文件权限),以及每个文件的块列表和块所在的DataNode等。
  2. DataNode(dn):在本地文件系统存储文件块数据,以及块数据的校验和。
  3. Secondary NameNode(2nn):每隔一段时间对NameNode元数据备份。
    hdfs优点:高容错性,保存多个数据副本,保证数据的完整性。适合处理大数据量计算。可靠性,是指可以多副本机制提高可靠性。
    hdfs缺点:不适合低延迟数据访问。无法高效的对大量小文件进行存储。不支持并发修改,一个文件只支持一个线程写入,不支持多线程并发,并且只支持追加,不支持内容的修改。

DataNode 工作机制

在这里插入图片描述

yarn

资源协调者,是 Hadoop 的资源管理器。

  1. ResourceManager(RM):整个集群资源(内存、CPU等)的老大
  2. NodeManager(NM):单个节点服务器资源老大
  3. ApplicationMaster(AM):单个任务运行的老大
  4. Container:容器,相当一台独立的服务器,里面封装了 任务运行所需要的资源,如内存、CPU、磁盘、网络等。

Yarn 调度器

先进先出调度器(FIFO)

单队列,根据提交作业的先后顺序,先来先服务。

容量调度器(Capacity Scheduler)

1、多队列:每个队列可配置一定的资源量,每个队列采用FIFO调度策略。
2、容量保证:管理员可为每个队列设置资源最低保证和资源使用上限
3、灵活性:如果一个队列中的资源有剩余,可以暂时共享给那些需要资源的队列,而一旦该队列有新的应用程序提交,则其他队列借调的资源会归还给该队列。
4、多租户:
支持多用户共享集群和多应用程序同时运行。 为了防止同一个用户的作业独占队列中的资源,该调度器会对同一用户提交的作业所占资源量进行限定

公平调度器(Fair Scheduler)

1)与容量调度器相同点
(1)多队列:支持多队列多作业
(2)容量保证:管理员可为每个队列设置资源最低保证和资源使用上线
(3)灵活性:如果一个队列中的资源有剩余,可以暂时共享给那些需要资源的队列,而一旦该队列有新的应用程序提 交,则其他队列借调的资源会归还给该队列。
(4)多租户:支持多用户共享集群和多应用程序同时运行;为了防止同一个用户的作业独占队列中的资源,该调度器 会对同一用户提交的作业所占资源量进行限定。
2)与容量调度器不同点
(1)核心调度策略不同
容量调度器:优先选择资源利用率低的队列
公平调度器:优先选择对资源的缺额比例大的。(某一 时刻一个作业应获资源和实际获取资源的差距叫“缺额”)
(2)每个队列可以单独设置资源分配方式 容量调度器:FIFO、 DRF 公平调度器:FIFO、FAIR、DRF

MapReduce

MapReduce 将计算过程分为两个阶段:Map 和 Reduce。

  1. Map 阶段并行处理输入数据
  2. Reduce 阶段对 Map 结果进行汇总

MapReduce 优缺点

优点:

  1. 良好的扩展性
  2. 高容错性
  3. 适合 PB 级以上海量数据的离线处理
    缺点:
  4. 不擅长实时计算
  5. 不擅长流式计算
  6. 不擅长 DAG(有向无环图)计算。多个应用程序存在依赖关系,后一个应用程序的输入为前一个的输出。在这种情况下, MapReduce 并不是不能做,而是使用后,每个 MapReduce 作业的输出结果都会写入到磁盘, 会造成大量的磁盘 IO,导致性能非常的低下。

1)分布式的运算程序往往需要分成至少 2 个阶段。
(2)第一个阶段的 MapTask 并发实例,完全并行运行,互不相干。
(3)第二个阶段的 ReduceTask 并发实例互不相干,但是他们的数据依赖于上一个阶段
的所有 MapTask 并发实例的输出。
(4)MapReduce 编程模型只能包含一个 Map 阶段和一个 Reduce 阶段,如果用户的业
务逻辑非常复杂,那就只能多个 MapReduce 程序,串行运行。

一个完整的 MapReduce 程序在分布式运行时有三类实例进程:
(1)MrAppMaster:负责整个程序的过程调度及状态协调。
(2)MapTask:负责 Map 阶段的整个数据处理流程。
(3)ReduceTask:负责 Reduce 阶段的整个数据处理流程。

切片机制

1)一个Job的Map阶段并行度由客户端在提交Job时的切片数决定
2)每一个Split切片分配一个MapTask并行实例处理
3)默认情况下,切片大小=BlockSize
4)切片时不考虑数据集整体,而是逐个针对每一个文件单独切片
(每次切片时,都要判断切完剩下的部分是否大于块的1.1倍,不大于1.1倍就划分一块切片)

MapReduce 工作流程

在这里插入图片描述
在这里插入图片描述
(1)MapTask 收集我们的 map()方法输出的 kv 对,放到内存缓冲区中
(2)从内存缓冲区不断溢出本地磁盘文件,可能会溢出多个文件
(3)多个溢出文件会被合并成大的溢出文件
(4)在溢出过程及合并的过程中,都要调用 Partitioner 进行分区和针对 key 进行排序 (5)ReduceTask 根据自己的分区号,去各个 MapTask 机器上取相应的结果分区数据 (6)ReduceTask 会抓取到同一个分区的来自不同 MapTask 的结果文件,ReduceTask 会将这些文件再进行合并(归并排序)
(7)合并成大文件后,Shuffle 的过程也就结束了,后面进入 ReduceTask 的逻辑运算过
程(从文件中取出一个一个的键值对 Group,调用用户自定义的 reduce()方法)
注意:
(1)Shuffle 中的缓冲区大小会影响到 MapReduce 程序的执行效率,原则上说,缓冲区 越大,磁盘 io 的次数越少,执行速度就越快。
(2)缓冲区的大小可以通过参数调整,参数:mapreduce.task.io.sort.mb 默认 100M。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值