首页 > 其他分享 >MapReduce面试题

MapReduce面试题

时间:2023-07-25 11:36:59浏览次数:25  
标签:文件 面试题 map buffer reduce MapReduce 内存 磁盘

MapReduce优化方法

或如何减少map任务的启动
或如何减少磁盘io

  • 数据输入
  1. 小文件合并。使用抽象类CombineFileInputFormat作为输入处理。
  • map阶段
  1. 减少spill和merge次数。通过调整io.sort.mb及sort.spill.percent参数值,增大触发spill的内存上限,减少spill次数,从而减少磁盘 IO;通过调整io.sort.factor参数,增大merge的文件数目,减少merge的次数,从而缩短mr处理时间。

    map后进行combine操作。

  • reduce阶段

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

    1. 合理采用数据压缩技术降低io传输量。
    2. 使用二进制文件。
  • 数据倾斜时
    分为:数据频率倾斜和数据大小倾斜。

  1. 使用Combine。
  2. 抽样原始数据进行合理分区。

MapReduce跑得慢的原因?

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

1)计算机性能
  CPU、内存、磁盘健康、网络
 2)I/O 操作优化

1)数据倾斜
  2)map和reduce数设置不合理
  3)reduce等待过久
  4)小文件过多
5)大量的不可分块的超大文件
 6)spill次数过多
  7)merge次数过多等

HDFS小文件优化方法:

  • 存在的弊端:
  HDFS上每个文件都要在namenode上建立一个索引,这个索引的大小约为150byte,这样当小文件比较多的时候,就会产生很多的索引文件,一方面会大量占用namenode的内存空间,另一方面就是索引文件过大是的索引速度变慢。
  • 解决的思路:
    • Hadoop本身提供了一些文件压缩的方案。
    • 从系统层面改变现有HDFS存在的问题,其实主要还是小文件的合并,然后建立比较快速的索引。
  • 解决方案
  1. Hadoop Archive:是一个高效地将小文件放入HDFS块中的文件存档工具,它能够将多个小文件打包成一个HAR文件,这样在减少namenode内存使用的同时。
  2. Sequence file:sequence file由一系列的二进制key/value组成,如果为key小文件名,value为文件内容,则可以将大批小文件合并成一个大文件。
  3. CombineFileInputFormat: CombineFileInputFormat是一种新的inputformat,用于将多个文件合并成一个单独的split,另外,它会考虑数据的存储位置。

标签:文件,面试题,map,buffer,reduce,MapReduce,内存,磁盘
From: https://www.cnblogs.com/container-simple/p/17579306.html

相关文章

  • Java面试题 P2:Jvm新能调优
    1、JDK体系结构JDK由:java命令及常用工具+JRE组成(java运行时环境)JRE由:支撑java运行的各种类库+JVM(java运行时环境) 2、为什么java可以跨平台部署跨平台是由java虚拟机,jvm去实现的。 3、Java虚拟机内部组成结构图 java代码运行工作顺序:(1)先通过javac将Math.java编译为......
  • Redis相关面试题
    Redis相关面试题面试官:什么是缓存穿透?怎么解决?候选人:嗯~~,我想一下缓存穿透是指查询一个一定不存在的数据,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到DB去查询,可能导致DB挂掉。这种情况大概率是遭到了攻击。解决方案的话,我们通常都......
  • 学习笔记:redis面试题
    redis面试题(ChatGPT生成)题目什么是Redis?它的主要特点和用途是什么?Redis支持的数据结构有哪些?请给出每种数据结构的简要说明。Redis的持久化机制是什么?它有哪些优缺点?什么是Redis的主从复制?如何设置和配置主从复制?Redis的发布与订阅功能是什么?如何使用它来实现消息传递?Redi......
  • MapReduce工作原理
    MapReduce理解什么是map,什么是reduce,为什么叫mapreduceMapMap:是一种映射过程,具体来说把一组数据按照某种Map函数映射成新的数据。也就是说,map主要是:映射、变换、过滤的过程。一条数据进入map会被处理成多条数据,也就是1进N出。ReduceReduce:是一种归纳过程,具体来说把若干组映射......
  • Java基础--2021Java面试题系列教程--大白话解读
    前言序言再高大上的框架,也需要扎实的基础才能玩转,高频面试问题更是基础中的高频实战要点。适合阅读人群Java学习者和爱好者,有一定工作经验的技术人,准面试官等。阅读建议本教程是系列教程,包含Java基础,JVM,容器,多线程,反射,异常,网络,对象拷贝,JavaWeb,设计模式,Spring-SpringMVC,SpringB......
  • android rxjava面试题
    RxJava面试题解析简介在Android开发中,使用RxJava能够简化异步操作、线程管理以及事件处理等方面的任务。在面试中,面试官常常会提问与RxJava相关的问题。本文将介绍如何使用RxJava来解决一个常见的面试题。面试题描述面试题要求使用RxJava实现一个简单的网络请求链式调用,实现如......
  • Java面试题全集(二)
    1.⾸先CopyOnWriteArrayList内部也是⽤过数组来实现的,在向CopyOnWriteArrayList添加元素时,会复制⼀个新的数组,写操作在新数组上进⾏,读操作在原数组上进⾏2.并且,写操作会加锁,防⽌出现并发写⼊丢失数据的问题3.写操作结束之后会把原数组指向新数组4.CopyOnWriteArrayList允许......
  • 10道SpringBoot面试题
    SpringBoot我是JavaPub,专注于面试、副业,技术人的成长记录。以下是SpringBoot面试题,相信大家都会有种及眼熟又陌生的感觉、看过可能在短暂的面试后又马上忘记了。JavaPub在这里整理这些容易忘记的重点知识及解答,建议收藏,经常温习查阅。评论区见本系列《最少必要面试题》Sprin......
  • 2023年最新50道Vue全套vue2+vue3面试题带答案汇总
    此文章不断更新,欢迎大家在评论区补充1.什么是MVVM?M-Model数据:它是与应用程序的业务逻辑相关的数据的封装载体V-View视图:它专注于界面的显示和渲染VM-ViewModel视图-数据:它是View和Model的粘合体,负责View和Model的交互和协作vue双向数据绑定是通过数据劫持结合......
  • 2023上半年Android高频面试题汇总(大厂真题+答案解析)
    小伙伴们大家好哇,不知道你们在找工作的时候是不是在力扣、在牛客网狂刷真题!可是有时候刷题的数量连起来可以绕地球三圈,但是面试却过不了第三轮!有没有一种可能就是你没有把握住重点!想想我们之前考试是不是老师划了重点,给了往期真题你考得分数高?题海战术是保底策略,能保证你大概率不会......