关于hadoop程序优化的几点建议

我最近在写代码的过程中发现了hadoop的mapreduce程序的一些操作有的是耗时的有的可以使得程序运行更快
1.不知道大家有没有用过那个partioner的,这个类可以帮助我们将我们的数据通过自定义的方式输出到指定的文件当中去
比如说:
		private static Map<String ,Integer > provider_map= new HashMap<String ,Integer>();
		static
		{
			provider_map.put("135", 3);
			provider_map.put("136", 3);
			provider_map.put("137", 1);
			provider_map.put("182", 1);
			provider_map.put("183", 1);
			provider_map.put("132", 2);
			provider_map.put("159", 2);
			provider_map.put("150", 2);
		}
		public int getPartition(Text key, DataBean value, int numPartitions) {
			// TODO Auto-generated method stub
			String account = key.toString();
			String str_num = account.substring(0, 3);

			Integer in = provider_map.get(str_num);
			if(in == null)
			{
				in = 0;
			}

			return in;
		}
这段代码是一个例子中摘出来的一段,在前面定义了几个电话号码:一部分对应着1,一部分对应着的是2等等。
这样在Reduce端输出的时候会自动的根据这里面的返回的数据值进行放入相应的文档中,比如说part-000000/part-000001
那么是通过什么方式就能达到这样的效果的呢,partitioner结束之后,会根据这个返回值进行排序将相同值的数据放在一块,
一个缓冲区里面就会放了几个不同这样值的数据部分,分配任务的Reduce会向这个缓冲区寻找自己对应编号的数据获取到Reduce的
缓存中进行排序和处理。
这里我想说一下,可能你的程序不需要这一步分开文件的操作,那么尽量就不要用这个partitioner,因为这个我用的过程中的确是耗时的,不过如果说你的程序需要这个来完成你的逻辑那么还是很有必要的,但是也要做好耗时长些的准备。

2.Combiner :
在map端执行,进行对数据的小计,然后将数据交付给Reduce,这样减轻了Reduce的压力,从而实现效率的提升。
Combiner :如果他的功能与Reduce的功能是一致的那么应该说是可行的,因为combiner要实现可插拔,也就是说我这里有这个combiner和没有这个combiner应该是一样的结果。
不过也有的是这样的,通过combiner实现自己的业务逻辑等等,这样的话不是可插拔了,比如对于数据的过滤。
比如说单词统计的程序学过hadoop的朋友应该都学过,在map端结束的时候,会生成键值对比如说<hello, 1>,<word,1>,<hello, 1>等等,这样显然如果这一个文件里面的数据
<hello,1>到达Reduce端再进行加法运算那样会使得Reduce端压力比较大,但是当你引入combiner的时候,他会在map端一个文件映射完成之后,我进行一次小计的求和运算,
把多个文件小计之后的结果我再交给Reduce处理那么就减轻了他的压力。

时间: 2024-10-08 09:11:19

关于hadoop程序优化的几点建议的相关文章

给php程序员的40条建议 优化你的php代码(一)【转载】

给php程序员的40条建议 优化你的php代码,这些经验是资深php程序员多年的积累结果,经验之谈,对php开发者有很好的指导意义!搜集如下,可以时常翻出来看看. 1.echo 比 print 快. 2.尽量避免使用__get,__set,__autoload. 3.$row[‘id’]的效率是$row[id]的7倍. 4.尽量采用大量的PHP内置函数. 5.str_replace函数比preg_replace函数快,但strtr函数的效率是str_replace函数的四倍. 6.如果一个方法可

Hadoop性能优化点小结

最近一段时间看了许多Hadoop性能优化相关的资料,于是花了点时间整理了一下,希望给正在苦于Hadoop集群性能问题的博友们一点建议吧. 1.Hadoop在存储有输入数据的节点上运行map任务,可以获得最佳性能,称为"数据本地化优化",所以一般会设置最大分片的大小应该与块大小相同,如果分片跨越2个块的大小,必然要经过网络传输到不同的节点上读取数据. 2.适当的时候使用Combine函数.Combine的阶段是在map阶段到reduce阶段之间进行的,在某些Job中,设置Combine可

代码质量优先——《编写高质量代码:改善c程序代码的125个建议》

高质量的代码不但可以促进团队合作.减少bug处理.降低维护成本,对程序员自身的成长也是至关重要的.很难想象一个参考<如何编写无法维护的代码>写代码的程序员技术成长的上限有多么低.为了写出高质量的代码,我们需要听取过来人的改善代码质量的经验,<编写高质量代码:改善c程序代码的125个建议>就是一本能让人写出高质量代码的好书. 本书的第三章<程序控制语句应该保持简洁高效>首先用简练的语言介绍了流程控制结构的概念,然后提供了对if.else.for.do-while.swit

QtQml 应用程序的性能考虑与建议(来自小V的翻译)

QtQml 应用程序的性能考虑与建议 原文:csdn aidear_evo QtQml应用程序的性能考虑与建议 本文翻译自Qt官网文档:http://doc.qt.io/qt-5/qtquick-performance.html 时间考虑 作为一名程序开发者,应该努力使渲染引擎的刷新率维持在60fps,也就是说在每帧之间大约有16ms,这段时间包括了基本图元在图形硬件上的描画.具体内容如下: 尽可能的使用异步事件驱动来编程. 使用工作者线程来处理重要的事情,比如说QML的WorkerScript

MySQL 调优/优化的 100 个建议

MySQL 调优/优化的 100 个建议 提交 我的评论 加载中 已评论 MySQL 调优/优化的 100 个建议 2015-07-08 数据库开发 数据库开发 数据库开发 微信号 DBDevs 功能介绍 分享数据库相关技术文章.教程和工具,另外还包括数据库相关的工作.偶尔也谈谈程序员人生 :) (点击上方蓝字,快速关注我们) (编注:本文写于 2011 年) MySQL是一个强大的开源数据库.随着MySQL上的应用越来越多,MySQL逐渐遇到了瓶颈.这里提供 101 条优化 MySQL 的建议

Qml应用程序的性能考虑与建议

本文翻译自Qt官网文档: http://doc.qt.io/qt-5/qtquick-performance.html QtQml应用程序的性能考虑与建议 1.时间考虑 作为一名程序开发者,应该努力使渲染引擎的刷新率维持在60fps,也就是说在每帧之间大约有16ms,这段时间包括了基本图元在图形硬件上的描画.具体内容如下: >尽可能的使用异步事件驱动来编程. >使用工作者线程来处理重要的事情,比如说QML的WorkerScript类型就是起用了一个新的线程. >不要手动重复事件循环. &

ASP.NET 程序优化

一.SqlDataRead和Dataset的选择 Sqldataread优点:读取数据非常快.如果对返回的数据不需做大量处理的情况下,建议使用SqlDataReader,其性能要比datset好很多.缺点:直到数据读完才可close掉于数据库的连接 (SqlDataReader 读数据是快速向前的.SqlDataReader 类提供了一种读取从 SQL Server 数据库检索的只进数据流的方法.它使用 SQL Server 的本机网络数据传输格式从数据库连接直接读取数据.DataReader需

Java 性能优化系列之1[设计与程序优化]

性能 一般来说,性能通过以下几个方面来表现: 执行速度 内存分配 启动时间 负载承受能力 定量评测的性能指标: 执行时间 CPU时间 内存分配 磁盘吞吐量 网络吞吐量 响应时间 调优的层面 设计调优 代码调优 JVM调优 数据库调优 操作系统调优 性能调优必须有明确的目标,不要为了调优而调优,如果当前程序并没有明显的性能问题,盲目地进行调整,其风险可能远远大于收益. 设计优化 1. 单例模式 对于系统的关键组件和被频繁使用的对象,使用单例模式可以有效地改善系统的性能 2. 代理模式 代理模式可以

转 Web程序优化的最佳实践:Cookie、图片及移动应用篇

[编者按]来自Yahoo!的Exceptional Performance团队为我们带来了改善Web性能的最佳实践方案.为此,他们为此进行了 一系列的实验.开发了各种工具.写了大量的文章和博客并在各种会议上参与探讨.最佳实践的核心就是提高网站性能.通过各种努力,xcetional Performance团队总结出了一系列可以提高网站速度的方法.可以分为 7 大类 34 条.包括内容.服务器.cookie.CSS.JavaScript.图片.移动应用等七部分. 延伸阅读: Web程序优化的最佳实践