当前位置: 首页 > 面试题库 >

从应用程序角度进行优化

孙星鹏
2023-03-14
本文向大家介绍从应用程序角度进行优化相关面试题,主要包含被问及从应用程序角度进行优化时的应答技巧和注意事项,需要的朋友参考一下

解答:

(1) 避免不必要的reduce任务

如果mapreduce程序中reduce是不必要的,那么我们可以在map中处理数据, Reducer设置为0。这样避免了多余的reduce任务。

(2) 为job添加一个Combiner

为job添加一个combiner可以大大减少shuffle阶段从map task拷贝给远程reduce task的数据量。一般而言,combiner与reducer相同。

(3) 根据处理数据特征使用最适合和简洁的Writable类型

Text对象使用起来很方便,但它在由数值转换到文本或是由UTF8字符串转换到文本时都是低效的,且会消耗大量的CPU时间。当处理那些非文本的数据时,可以使用二进制的Writable类型,如IntWritable, FloatWritable等。二进制writable好处:避免文件转换的消耗;使map task中间结果占用更少的空间。

(4) 重用Writable类型

很多MapReduce用户常犯的一个错误是,在一个map/reduce方法中为每个输出都创建Writable对象。例如,你的Wordcout mapper方法可能这样写:

public void map(...) {

  …

  for (String word : words) {

output.collect(new Text(word), new IntWritable(1));
 }

}

这样会导致程序分配出成千上万个短周期的对象。Java垃圾收集器就要为此做很多的工作。更有效的写法是:

class MyMapper … {

  Text wordText = new Text();

  IntWritable one = new IntWritable(1);

  public void map(...) {

    for (String word: words) {

      wordText.set(word);

      output.collect(wordText, one);

    }
  }

}

 

(5) 使用StringBuffer而不是String

当需要对字符串进行操作时,使用StringBuffer而不是String,String是read-only的,如果对它进行修改,会产生临时对象,而StringBuffer是可修改的,不会产生临时对象。

 类似资料:
  • 我有一个例子,我有3个docker容器:-frontend在Angular中-backend在Django中-processing API在Python中。 用例是用户将文件发送到后端卷(使用前端GUI),然后API对其进行处理。处理需要一些时间,因此API使用SSE向后端发送更新(这是该操作的触发器),我希望将该进度更新转发到前端。 我已经尝试使用WebSockets来实现这一点(前端<--We

  • 问题内容: 我一直在从事一个更像框架的项目,并且可以安装几个应用程序/模块。像基本的应用商店或google.play商店一样看到它。这是一个Intranet应用程序,所有模块都可以添加到您的用户帐户中。 该框架已经在开发中,但是我现在正在围绕应用程序/模块的想法。(链接到开发中的概念证明,可以在这里找到) 一个应用程序应该是独立的,并且不能突然包含框架中的脚本,这可以通过在单独的模块中进行结构化来

  • 嗨,使用angular 2作为密码字段,我必须设置“密码应该至少有1个大写字母,1个小写字母,1个数字,1个特殊字符,最少8个字符,最多16个字符” 因为我已经完成了“最少8个字符,最多16个字符”。 但我无法为其余的东西设置至少1个大写字母,1个小写字母,1个数字,1个特殊字符。 请帮我一下 预先感谢

  • 我不知道是怎么回事?? 任何人都可以提供一个数据通道的工作示例,将非常感谢。

  • 问题内容: 我尝试使用angular-ui,并尝试注入$ stateProvider: html js(test / appModule.js) 堆栈跟踪 如果我删除带有注释的 $ stateProvider 和 ui.router ,那么一切都会起作用: 那么注入 $ stateProvider 的问题有解决的任何想法吗? PS 我尝试了ui示例,它可以工作,但是我无法弄清楚为什么我的不行。 问