大数据面试题(五):Hadoop优化核心高频面试题

news2025/7/12 17:05:04

文章目录

Hadoop优化核心高频面试题

一、Mapreduce 跑的慢的原因?

1、计算机性能

2、I/O 操作优化

二、Mapreduce优化方法

1、数据输入

2、map阶段

3、reduce阶段

4、IO传输

5、数据倾斜问题

6、常用的调优参数

三、HDFS小文件优化方法 

1、HDFS小文件弊端

2、解决方案

3、CombineFileInputFormat

4、开启JVM重用

四、MapReduce怎么解决数据均衡问题,如何确定分区号? 

五、Hadoop中job和Tasks之间的区别是什么?


Hadoop优化核心高频面试题

一、Mapreduce 跑的慢的原因?

Mapreduce 程序效率的瓶颈在于两点:

1、计算机性能

CPU、内存、磁盘健康、网络

2、I/O 操作优化

  • 数据倾斜
  • map和reduce数设置不合理
  • reduce等待过久
  • 小文件过多
  • 大量的不可分块的超大文件
  • spill次数过多
  • merge次数过多等

二、Mapreduce优化方法

1、数据输入

1.1、合并小文件:在执行mr任务前将小文件进行合并,大量的小文件会产生大量的map任务,增大map任务装载次数,而任务的装载比较耗时,从而导致 mr 运行较慢。

1.2、采用ConbinFileInputFormat来作为输入,解决输入端大量小文件场景。

2、map阶段

2.1、减少spill次数:通过调整io.sort.mb及sort.spill.percent参数值,增大触发spill的内存上限,减少spill次数, 从而减少磁盘 IO。

2.2、减少merge次数:通过调整io.sort.factor参数,增大merge的文件数目,减少merge的次数,从而缩短mr处理时间。

2.3、在 map 之后先进行combine处理,减少 I/O。

3、reduce阶段

3.1、合理设置map和reduce数:两个都不能设置太少,也不能设置太多。太少,会导致task等待,延长处理时间;太多,会导致 map、reduce任务间竞争资源,造成处理超时等错误。

3.2、设置map、reduce共存:调整slowstart.completedmaps参数,使map运行到一定程度后,reduce也开始运行,减少reduce的等待时间。

3.3、规避使用reduce,因为Reduce在用于连接数据集的时候将会产生大量的网络消耗。

3.4、合理设置reduc端的buffer,默认情况下,数据达到一个阈值的时候,buffer中的数据就会写入磁盘,然后reduce会从磁盘中获得所有的数据。也就是说,buffer和reduce是没有直接关联的,中间多个一个写磁盘->读磁盘的过程,既然有这个弊端,那么就可以通过参数来配置,使得buffer中的一部分数据可以直接输送到reduce,从而减少IO开销:mapred.job.reduce.input.buffer.percent,默认为0.0。当值大于0的时候,会保留指定比例的内存 读buffer中的数据直接拿给reduce使用。这样一来,设置buffer需要内存,读取数据需要内存,reduce计算也要内存,所以要根据作业的运行情况进行调整。

4、IO传输

4.1、采用数据压缩的方式,减少网络IO的的时间。安装Snappy和LZOP压缩编码器。

4.2、使用SequenceFile二进制文件

5、数据倾斜问题

5.1、数据倾斜现象

  • 数据频率倾斜——某一个区域的数据量要远远大于其他区域。
  • 数据大小倾斜——部分记录的大小远远大于平均值。

5.2、如何收集倾斜数据

在reduce方法中加入记录map输出键的详细情况的功能。

public static final String MAX_VALUES = "skew.maxvalues";
private int maxValueThreshold;
@Override
public void configure(JobConf job) {
    maxValueThreshold = job.getInt(MAX_VALUES, 100);
}
@Override
public void reduce(Text key, Iterator<Text> values, OutputCollector<Text, Text> output, Reporter reporter) throws IOException {
    int i = 0; 
    while (values.hasNext()) { 
        values.next();
        i++;
    }
    if (++i > maxValueThreshold) {
    log.info("Received " + i + " values for key " + key);
    }
}

5.3、减少数据倾斜的方法

方法1:抽样和范围分区

可以通过对原始数据进行抽样得到的结果集来预设分区边界值。

方法2:自定义分区

另一个抽样和范围分区的替代方案是基于输出键的背景知识进行自定义分区。例如,如果map输出键的单词来源于一本书。其中大部分必然是省略词(stopword)。那么就可以将自定义分区将这部分省略词发送给固定的一部分reduce实例。而将其他的都发送给剩余的reduce实例。

方法3:Combine

使用Combine可以大量地减小数据频率倾斜和数据大小倾斜。在可能的情况下,combine的目的就是聚合并精简数据。

6、常用的调优参数

6.1、资源相关参数

(a)以下参数是在用户自己的mr应用程序中配置就可以生效(mapred-default.xml)

配置参数参数说明

mapreduce.map.memory.mb

一个Map Task可使用的资源上限(单位:MB),默认为1024。如果Map Task实际使用的资源量超过该值,则会被强制杀死 。

mapreduce.reduce.memory.mb

一个Reduce Task可使用的资源上限(单位:MB),默认为1024。如果Reduce Task实际使用的资源量超过该值,则会被强制杀死。
mapreduce.map.cpu.vcores每个Map task可使用的最多cpu core数目,默认值:1
mapreduce.reduce.cpu.vcores每个Reduce task可使用的最多cpu core数目,默认值:1
mapreduce.reduce.shuffle.parallelcopies每个reduce去map中拿数据的并行数。默认值是5
mapreduce.reduce.shuffle.merge.percentbuffer中的数据达到多少比例开始写入磁盘。默认值0.66
mapreduce.reduce.shuffle.input.buffer.percentbuffer大小占reduce可用内存的比例。默认值0.7
mapreduce.reduce.input buffer.percent指定多少比例的内存用来存放buffer中的数据,默认值是0.0

(b)应该在yarn启动之前就配置在服务器的配置文件中才能生效(yarn-default.xml)

配置参数参数说明
yarn.scheduler.minimum-allocation-mb    1024给应用程序container分配的最小内存
yarn.scheduler.maximum-allocation-mb    8192给应用程序container分配的最大内存
yarn.scheduler.minimum-allocation-vcores每个container申请的最小CPU核数
yarn.scheduler.maximum-allocation-vcores   32每个container申请的最大CPU核数
yarn.nodemanager.resource.memory-mb      8192给containers分配的最大物理内存

(c)shuffle性能优化的关键参数,应在yarn启动之前就配置好(mapred-default.xml)

配置参数参数说明
mapreduce.taskio.sort.mb 100shuffle的环形缓冲区大小,默认100m
mapreduce.map.sort.spill.percent 0.8环形缓冲区溢出的阈值,默认80%

6.2、容错相关参数(mapreduce性能优化)

配置参数参数说明
mapreduce.map.maxattempts每个Map Task最大重试次数, 一旦重试参数超过该值,则认为MapTask运行失败,默认值:4。
mapreduce.reduce.maxattempts每个Reduce Task最大重试次数, 一旦重试参数超过该值,则认为Map Task运行失败,默认值:4。

mapreduce.task.timeout

Task超时时间,经常需要设置的一个参数,该参数表达的意思为:如果一个task在一定时间内没有任何进入,即不会读取新的数据,也没有输出数据,则认为该task处于block状态,可能是卡住了,也许永远会卡主,为了防止因为用户程序永远block住不退出,则强制设置了一个该超时时间(单位毫秒),默认是600000。如果你的程序对每条输入数据的处理时间过长(比如会访问数据库,通过网络拉取数据等),建议将该参数调大,该参数过小常出现的错误提示是“AttemptID:attempt_14267829456721_123456_m_000224_0
Timed out after 300 secsContainer killed by the
ApplicationMaster.”。

三、HDFS小文件优化方法 

1、HDFS小文件弊端

HDFS上每个文件都要在namenode上建立一个索引,这个索引的大小约为150byte,这样当小文件比较多的时候,就会产生很多的索引文件,一方面会大量占用namenode的内存空间,另一方面就是索引文件过大是的索引速度变慢。

2、解决方案

2.1、Hadoop Archive:

是一个高效地将小文件放入HDFS块中的文件存档工具,它能够将多个小文件打包成一个HAR文件,这样在减少namenode内存使用的同时。

2.2、Sequence file:

sequence file由一系列的二进制key/value组成,如果key为文件名,value为文件内容,则可以将大批小文件合并成一个大文件。

3、CombineFileInputFormat

CombineFileInputFormat是一种新的inputformat,用于将多个文件合并成一个单独的split,另外,它会考虑数据的存储位置。

4、开启JVM重用

对于大量小文件Job,可以开启JVM重用会减少45%运行时间。

JVM重用理解:一个map运行一个jvm,重用的话,在一个map在jvm上运行完毕后,jvm继续运行其他jvm

具体设置:mapreduce.job.jvm.numtasks值在10-20之间。

四、MapReduce怎么解决数据均衡问题,如何确定分区号? 

数据均衡问题指的就是某个节点或者某几个节点的任务运行的比较慢,拖慢了整个Job的进度。实际上数据均衡问题就是数据倾斜问题,解决方案同解决数据倾斜的方案。

MapReduce中分区默认是按hashcode来分的,用户可以自定义分区类,需要继承系统的Partitioner类,重写getPartition()方法即可。

五、Hadoop中job和Tasks之间的区别是什么?

编写好的一个程序,我们称为Mapreduce程序,一个Mapreduce程序就是一个Job,而一个Job里面可以有一 个或多个Task,Task又可以区分为Map Task和Reduce Task。


  • 📢博客主页:https://lansonli.blog.csdn.net
  • 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
  • 📢本文由 Lansonli 原创,首发于 CSDN博客🙉
  • 📢停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/36679.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【MATLAB】常见语法结构和实用操作

目录 语法结构 循环&#xff08;遍历&#xff09;结构 函数结构 画图操作 绘制函数图像 ezplot figure多图绘制 创建多项式 按照系数创建多项式 利用多项式零点创建多项式 解方程组 语法结构 循环&#xff08;遍历&#xff09;结构 与其它编程语言类似&#xff0c;…

常用辅助类

CountDownLatch 应用场景&#xff1a;1.多线程任务汇总。2.多线程任务阻塞住&#xff0c;等待发令枪响&#xff0c;一起执行。 减法计数器 每次有线程调用&#xff0c;数量-1&#xff0c;当计数器归零&#xff0c;countDownLatch.await()就会被唤醒向下执行。 import java.uti…

【代码随想录】二刷-二叉树

二叉树 《代码随想录》 二叉树的遍历方式 深度优先遍历: 前序遍历(递归法、迭代法): 中左右中序遍历(递归法、迭代法): 左中右后序遍历(递归法、迭代法): 左右中 广度优先遍历: 层序遍历(迭代法) 二叉树的定义 struct TreeNode{int val;TreeNode* left;TreeNode* right;TreeN…

无线传感器网络:网络层

文章目录Challenges for RoutingEnergy EfficiencyScalabilityAddressingRobustnessTopologyApplicationRouting MetricsQuality-of-Service (QoS)Minimum HopEnergyMinimum energy consumed per packetMaximum time to network partitionMaximum average energy capacityMaxim…

Java并发-操作系统,进程,线程,并行并发?

我们首先来看看&#xff0c;三者之间的关系&#xff0c;从图中可以看到 操作系统是包含多个进程的容器&#xff1b;而每个进程又是容纳多个线程的容器。什么是进程&#xff1f;官方定义&#xff1a; 进程&#xff08;baiProcess&#xff09;是计算机中的程序关于某数据集合上的…

详解:网络虚拟化卸载加速技术的演进

在传统的应用场景中&#xff0c;服务器资源过剩情况普遍&#xff0c;为了充分利用服务器资源&#xff0c;产生了虚拟化技术。虚拟化技术以牺牲部分效率为代价提升了资源的使用率&#xff0c;将原来需要硬件完成的工作&#xff0c;通过软件模拟的方式&#xff0c;满足多个云租户…

初识Qt Quick

讲讲最近几年Qt的热门技术Quick这一块了。 啥是Qt&#xff1f; 哦&#xff0c;这是一个宣称可以跨任意平台&#xff0c;开发各种场景应用软件的开发框架。从三个维度来讲&#xff0c;就是开发库framework&#xff0c;集成开发平台IDE&#xff0c;以及成熟的开发思维模式。 Q…

CAS:82055-94-5,Azide-PEG-Azide,N3-PEG-N3,叠氮聚乙二醇叠氮试剂供应

1、名称 英文&#xff1a;Azide-PEG-Azide&#xff0c;N3-PEG-N3 中文&#xff1a;叠氮-聚乙二醇-叠氮 2、CAS编号&#xff1a;82055-94-5 3、所属分类&#xff1a;Azide PEG 4、分子量&#xff1a;可定制&#xff0c;叠氮-PEG-叠氮 2000、叠氮peg叠氮 1000、叠氮-聚乙二醇…

org.activiti.bpmn

org.activiti.bpmn目录概述需求&#xff1a;设计思路实现思路分析1.BpmnAutoLayout2.BPMNLayout参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result,wait for ch…

Mybatis概述

1 概述 原来是Apache的一个开源项目&#xff0c;叫iBatis, 2010年6月这个项目由 Apache Software Foundation 迁移到了 Google Code&#xff0c;随着开发团队转投Google Code 旗下&#xff0c;从 iBatis3.0正式更名为MyBatis。 MyBatis 是一款优秀的持久层框架&#xff0c;对j…

容器卷挂载的秘密

什么是容器卷 数据卷 &#xff08;Data Volumes &#xff09;是一个可供容器使用的特殊目录&#xff0c;它将主机操作系统目录直接映射进容器&#xff0c;类似于 Linux 中的 mount 行为。 容器挂载原理 containerd创建的容器里的数据存储在下面的目录中 [rootmaster01 httpb…

【C/C++】万字图文详解C语言文件操作 完美装饰课设大作业

目标导航 写在前面 为什么使用文件&#xff1f; 什么是文件&#xff1f; 程序文件 数据文件 认识文件名 文件的打开和关闭 文件指针 文件的打开和关闭 1.以"r"&#xff08;只读&#xff09;的方式打开文件 2.以"w"&#xff08;只写&#xff09;…

Java#24(常见API--2)

目录 一.Rantime Runtime表示当前虚拟机的运行环境 Runtime常用方法 扩展:对象克隆 二.Objects Objects是一个对象工具类,提供了一些操作对象的方法 一.Rantime Runtime表示当前虚拟机的运行环境 Runtime常用方法 方法名 作用 publi…

葡萄糖-聚乙二醇-链霉亲和素|Streptavidins-PEG-Glucose|链霉亲和素-PEG-葡萄糖

链霉亲和素(streptavidin下称SA)是与亲和素(avidin下称AV)是一种蛋白质&#xff0c;链霉亲和素是四聚体蛋白&#xff0c;大小为66KDa。一分子链霉亲和素可以高度特异性地与四分子生物素结合&#xff0c;两者之间的亲和力较为强烈。链霉亲和素分子由4条相同的肽链组成&#xff0…

delete-by-query和复合查询

根据term&#xff0c;match等查询方式去删除大量的文档 Ps&#xff1a;如果你需要删除的内容&#xff0c;是index下的大部分数据&#xff0c;推荐创建一个全新的index&#xff0c;将保留的文档内容&#xff0c;添加到全新的索引 # delete-by-query POST /sms-logs-index/sms-lo…

毕业设计-基于机器视觉的颜色目标识别

目录 前言 课题背景和意义 实现技术思路 什么是彩色空间 怎么利用彩色空间 颜色识别的过程 读取图片进行hsv色域转换 对图片特定颜色识别 本地摄像头对视频流进行颜色识别 实现效果图样例 前言 &#x1f4c5;大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后…

Python基础-面向对象编程之特性(property)

Python面向对象编程之特性(property) 一、统一访问原则 通常&#xff0c;我们访问实例或类的属性时&#xff0c;将返回所存储的相关值。而特性&#xff08;property&#xff09;是一种特殊的属性&#xff0c;访问它时会计算它的值。 请看下面的例子&#xff1a; import mat…

基于android的个性闹铃的设计与开发(闹铃,日历,计时器,备忘录)

目 录 摘 要 2 Abstract 2 1 选题的背景和意义 5 1.1 选题的背景 5 1.2 国内外研究现状 5 1.2.1 国内外手机系统现状 5 1.2.2 国内外手机应用现状 7 1.2.3 发展趋势 7 2 需求分析 9 2.1 系统需求 9 2.2 需求分析 9 2.3 约束与限制 10 3 总体设计 11 3.1 系统结构图 11 3.2 总体…

【数论】约数

文章目录一、试除法求n的所有约数二、约数个数三、约数之和四、最大公约数&#xff08;欧几里得算法/辗转相除法&#xff09;一、试除法求n的所有约数 vector<int> getDivisors(int n) {vector<int> ans;for (int i 2; i < n / i; i) {if (n % i 0) {ans.pus…

深度学习Week8-咖啡豆识别(Pytorch)

目录 一、前期准备 1.设置GPU 2. 导入数据 3. 划分数据集 二、手动搭建VGG-16模型 1. 搭建模型​编辑 2. 查看模型详情 三、 训练模型 1. 编写训练函数 2. 编写测试函数 4. 正式训练 四、 结果可视化 1. Loss与Accuracy图 2. 指定图片进行预测 3. 模型评估 *五、优…