【Hadoop 02】企业级解决方案

1 小文件问题

问题描述

由于在HDFS中,每一个小文件在NameNode中都会占用150字节的内存空间,而且每个小文件都是一个Block,会产生一个InputSplit,这样就会产生一个Map任务,同时启动多个Map任务消耗性能,影响MapReduce执行效率。

解决方案

HDFS提供两种类型的容器,分别是SequenceFile和MapFile。

  • SequenceFile:将<key,value>对序列化到文件中。
  • MapFile:是排序后的SequenceFile,主要由两部分组成,分别是index和data;index作为文件的数据索引,主要记录了每个Record的key值,以及该Record在文件中的偏移位置。在MapFile被访问的时候,索引文件会被加载到内存,通过索引映射关系可迅速定位到指定Record所在文件位置,因此,相对SequenceFile而言,MapFile的检索效率是高效的,缺点是会消耗一部分内存来存储index数据。

2 数据倾斜问题

问题描述

需要统计的数据很集中,比如有一个文件,有1000W条数据,这里面的值主要都是数字(1,2,3,4,5,6,7,8,9,10),希望统计出来每个数字出现的次数,其中值为5的数据有910w条左右,剩下的9个数字一共只有90w条。

解决方案

把倾斜的数据打散

  1. 设置Reduce任务个数
java 复制代码
job.setNumReduceTasks(Integer.parseInt(args[2]));
  1. 将数据打散
java 复制代码
String key = words[0];
if ("5".equals(key)) {
 //把倾斜的key打散,分成10份
 key = "5" + "_" + random.nextInt(10);
}

3 YARN

3.1 YARN架构分析

  • YARN主要负责**++集群资源++** 的管理和调度,支持主从架构,主节点最多可以有1个,从节点可以有多个
  • ResourceManager:主节点主要负责集群资源的分配和管理
  • NodeManager:从节点主要负责当前机器资源管理

3.2 YARN资源管理模型

  • YARN主要++管理内存和CPU++这两种资源类型
  • NodeManager启动时,会向ResourceManager注册,注册信息中包含该节点可分配的CPU和内存总量
  • yarn.nodemanager.resource.memory-mb:单节点可分配的物理内存总量,默认是8MB*1024,即8G
  • yarn.nodemanager.resource.cpu-vcores:单节点可分配的虚拟CPU个数,默认是8

3.3 YARN中的调度器

  • FIFO Scheduler:先进先出(first in, first out)调度策略
  • Capacity Scheduler:FIFO Scheduler的多队列版本
  • Fair Scheduler:多队列,多用户共享资源

3.4 案例:YARN多资源队列配置和使用

需求描述

增加2个队列,一个是online队列,一个是offline队列,然后向offline队列中提交一个mapreduce任务,其中online队列里面运行实时任务,offline队列里面运行离线任务

解决方法

  1. 修改etc/hadoop目录下的capacity-scheduler.xml配置文件
XML 复制代码
<property>
 <name>yarn.scheduler.capacity.root.queues</name>
 <value>default,online,offline</value>
 <description>
   The queues at the this level (root is the root queue).
 </description>
</property>
<property>
 <name>yarn.scheduler.capacity.root.default.capacity</name>
 <value>70</value>
 <description>Default queue target capacity.</description>
</property>
<property>
 <name>yarn.scheduler.capacity.root.online.capacity</name>
 <value>10</value>
 <description>Online queue target capacity.</description>
</property>
<property>
 <name>yarn.scheduler.capacity.root.offline.capacity</name>
 <value>20</value>
 <description>Offline queue target capacity.</description>
</property>
<property>
 <name>yarn.scheduler.capacity.root.default.maximum-capacity</name>
 <value>70</value>
 <description>
   The maximum capacity of the default queue.
 </description>
</property>
<property>
 <name>yarn.scheduler.capacity.root.online.maximum-capacity</name>
 <value>10</value>
 <description>
   The maximum capacity of the online queue.
 </description>
</property>
<property>
 <name>yarn.scheduler.capacity.root.offline.maximum-capacity</name>
 <value>20</value>
 <description>
   The maximum capacity of the offline queue.
 </description>
</property>

该配置文件定义了三队列:default、online和offline。每个队列有一个目标容量(capacity)和最大容量(maximum-capacity)。

  • yarn.scheduler.capacity.root.queues:定义了根队列下的子队列,即default、online和offline队列。
  • yarn.scheduler.capacity.root.default.capacity:默认队列目标容量为70%。
  • yarn.scheduler.capacity.root.online.capacity:在线队列的标容量为10%。
  • yarn.scheduler.capacity.root.offline.capacity:离线队列的目标容量为20%。
  • yarn.scheduler.capacity.root.default.maximum-capacity:默认队列的最大容量70%。
  • yarn.scheduler.capacity.root.online.maximum-capacity:在线队列的最大容量为10%。
  • yarn.scheduler.capacity.root.offline.maximum-capacity:离线队的最大容量为20%。

这些配置项可以根据实际需求进行调整。它们决定每个队列可以使用的资源比例,以及队列间的优先级限制。通过合理配置队列的容量和最大容量,可以实现对同类型任务的资源分配和调度制。

  1. 重启Hadoop
XML 复制代码
stop-all.sh
start-all.sh
相关推荐
Aloudata4 分钟前
NoETL自动化指标平台为数据分析提质增效,驱动业务决策
大数据·数据分析·指标平台·指标体系
2401_883041084 小时前
新锐品牌电商代运营公司都有哪些?
大数据·人工智能
青云交4 小时前
大数据新视界 -- 大数据大厂之 Impala 性能优化:融合机器学习的未来之路(上 (2-1))(11/30)
大数据·计算资源·应用案例·数据交互·impala 性能优化·机器学习融合·行业拓展
Json_181790144807 小时前
An In-depth Look into the 1688 Product Details Data API Interface
大数据·json
WX187021128738 小时前
在分布式光伏电站如何进行电能质量的治理?
分布式
Qspace丨轻空间9 小时前
气膜场馆:推动体育文化旅游创新发展的关键力量—轻空间
大数据·人工智能·安全·生活·娱乐
Elastic 中国社区官方博客10 小时前
如何将数据从 AWS S3 导入到 Elastic Cloud - 第 3 部分:Elastic S3 连接器
大数据·elasticsearch·搜索引擎·云计算·全文检索·可用性测试·aws
Aloudata11 小时前
从Apache Atlas到Aloudata BIG,数据血缘解析有何改变?
大数据·apache·数据血缘·主动元数据·数据链路
不能再留遗憾了11 小时前
RabbitMQ 高级特性——消息分发
分布式·rabbitmq·ruby
水豚AI课代表11 小时前
分析报告、调研报告、工作方案等的提示词
大数据·人工智能·学习·chatgpt·aigc