hadoop小结
测试小结:
1.如果只需要对数据集进行过滤,筛选则只需要编写Mapper类,不需要Reduce类,此时要执行下面一条语句:job.setNumReduceTesk(0);
2.如果需要对处理的数据进行分组(group by)、排序(order by)、表连接(join)、排重(distinct)等操作则需要编写Reducer类,因为这些操作都是基于MapTask的输出键(Key)来完成的;
3.如果既有分组又有排序只能使用两个MapReduce作业来串接完成,因为分组和排序会涉及到两次Shuffle过程;
分组与排序的本质何在?
分组是基于排序来完成,也就是说在分组之前其实上已经经过排序,从MapTask到ReduceTask的Shuffle的过程所使用的默认排序是升序,排序就是比较值的大小。
数字类型:直接根据数值大小进行比较;
字符串类型:根据字典序列(ASCII码值大小)进行比较;
大数据学习交流群:217770236 让我我们一起学习大数据
Combiner产生原因:
每一个map都可能会产生大量的本地输出,Combiner的作用就是对map端的输出先做一次合并,以减少在map和reduce节点之间的数据传输量,以提高网络IO性能,是MapReduce的一种优化手段之一。Combiner是继承自Reducer类。
Combiner组件:
1.是在每个 map task 的本地运行,能收到map输出的每一个key的valuelist,所以可以做局部汇总处理
2.因为map task 的本地进行了局部汇总,就会让map端的输出数据大幅精简,减少shuffle过程的网络IO
3.Combiner其实就是一个reduce组件,与reduce的区别在于:Combiner运行maptask的本地
4.Combiner在使用时需要注意,输入输出KV数据类型要跟map和reduce的相应数据类型匹配(combiner的输入是map的输出;combiner的输出是reduce的输入)
5.要注意业务逻辑不能因为Combiner的加入而受影响。
那么在程序中的使用是:
可以直接在Runner类中main方法中:
在指定reduce类后,指定Combiner类即可:语句 wcjob.setCombinerClass(WordCountReducer.class);
因为Combiner实际就是reduce组件,所以可以使用之前指定的reduce即可。
Job wcjob = Job.getInstance(conf); 所以wcjob是job的实现类。
使用场景:即第五条中所述的情况;
不能使用场景:在求取平均数时,因为添加的Combiner组件是与reduce组件具有相同的逻辑,会提前求一次平均值后传给reduce类,导致求取的平均值错误。

使用卡宾类需要注意问题:
1.combiner类与普通的Reducer类都一样,继承于Reducer类;
2.combiner类的统计算法对于ReduceTask而言必须具有可拆解性,否则不能使用combiner;
3.如果你的conbiner类的算法与Reduce的算法完全一致,则可直接编写的Reducer类作为combiner;
| Hadoop中的分布式缓存:基于磁盘IO进行迭代,消耗较大,但是磁盘存储数据的性价比更高;主要做离线数据处理; |
| Spark是:基于内存进行迭代的,对于实时处理数据和处理稍微小点的数据更具有优势;主要做流式数据处理; |
| 当内存的容量能够达到很高并且购买内存花费也不高,即性价比和磁盘差距不大时,那么hadoop就将会面临被淘汰的危机。 |
hadoop集群分区:
1、分区是必须要经历Shuffle过程的,没有Shuffle过程无法完成分区操作
2、分区是通过MapTask输出的key来完成的,默认的分区算法是数组求模法:
数组求模法:
将Map的输出Key调用hashcode()函数得到的哈希吗(hashcode),此哈希吗是一个数值类型,将此哈希码数值直接与整数的最大值(Integer.MAXVALUE)取按位与(&)操作,将与操作的结果与ReducerTask
的数量取余数,将此余数作为当前Key落入的Reduce节点的索引;
-------------------------
Integer mod = (Key.hashCode()&Integer.MAXVALUE)%NumReduceTask;
被除数=34567234
NumReduceTask=3
-------结果:
0、1、2 这三个数作为Reduce节点的索引;
数组求模法是有HashPartitioner类来实现的,也是MapReduce分区的默认算法。
hadoop集群的性能和效率:
1、数据量需要达到一定的数量级使用hadoop集群来处理才是划算的
2、集群的计算性能取决于任务数量的多少,设置任务数量必须充分考虑到集群的计算能力(比如:物理节点数量);
a、Map设置的任务数量作为最小值参考
b、Reduce的任务数默认是1,如果设置了则启动设置的数量不管MapTask还是ReduceTask,
不管MapTask还是ReduceTask,只要任务数量越多则并发能力越强,处理效率会在一定程度上越高;但是,设置设置的任务数量必须参考集群中的物理节点数量,如果设置的任务数量过多,会导致每个物理节点上分摊的任务数量过多,处理器并发每个任务产生的计算开销越大,任务之间因处理负载导致相互之间的影响很大,任务失败率上升,计算性能反而下降(因为任务失败会重新请求,至多重新请求三次),因此在设计MapTask与ReduceTask任务数量时必须权衡利弊,折中考虑...
hadoop小结的更多相关文章
- 转载:Hadoop排序工具用法小结
本文转载自Silhouette的文章,原文地址:http://www.dreamingfish123.info/?p=1102 Hadoop排序工具用法小结 发表于 2014 年 8 月 25 日 由 ...
- Linux操作、hadoop和sh脚本小结
近期一直在忙项目上的事情,今天对以前的工作做一个简单的小结.明天就是国庆节啦. 1 脚本可以手动执行,可是crontab缺总是找不到路径? #!/bin/bash. /etc/profile . / ...
- Hadoop 2.4.1 设置问题小结【原创】
先丢点问题小结到这里,免得忘记,有空再弄个详细教程玩,网上的教程要不就是旧版的,要不就是没说到点子上,随便搞搞也能碰上结果是对的时候,但是知其然而不知其所以然,没意思啊.解决问题的方法有很多种,总得找 ...
- 【Hadoop】HIVE 小结概览
一.HIVE概览小结 二.HIVE安装 Hive只在一个节点上安装即可 .上传tar包 .解压 tar -zxvf hive-.tar.gz -C /cloud/ .配置mysql metastore ...
- hadoop高可用集群搭建小结
hadoop高可用集群搭建小结1.Zookeeper集群搭建2.格式化Zookeeper集群 (注:在Zookeeper集群建立hadoop-ha,amenode的元数据)3.开启Journalmno ...
- Spark+Hadoop问题小结
1.spark执行./start-all.sh报"WARN Utils: Service 'sparkWorker' could not bind on port 0. Attempting ...
- Hadoop 2.4.1 登录认证配置小结
1.简单模式 这种模式,配置简单,使用简单. core-site.xml添加 <property> <name>hadoop.security.authorization< ...
- Hadoop 2.4.1 Map/Reduce小结【原创】
看了下MapReduce的例子.再看了下Mapper和Reducer源码,理清了参数的意义,就o了. public class Mapper<KEYIN, VALUEIN, KEYOUT, VA ...
- hadoop部署小结的命令
hadoop部署总结的命令 学习笔记,转自:hadoop部署总结的命令http://www.aboutyun.com/thread-5385-1-1.html(出处: about云开发)
随机推荐
- 【原创】IO流:读写操作研究(输入流)
默写代码(以下问题要求能默写,不翻书不百度) 输入 问题一:从文件abc.txt中读取数据到字节数组并打印出来. 分析:如果读取数据,首先第一个问题,数据有多少?如果数据量不确定,如果确定字节数组大小 ...
- jquery综合
1.选择器性能比较: http://www.jcodecraeer.com/a/javascript/2012/0418/112.html http://developer.51cto.com/art ...
- scrollIntoView() 调用元素就可以出现在视窗中
/* 如果滚动页面也是DOM没有解决的一个问题.为了解决这个问题,浏览器实现了一下方法, 以方便开发人员如何更好的控制页面的滚动.在各种专有方法中,HTML5选择了scrollIntoView() 作 ...
- linux使用framebuffer的代码
#include <linux/fb.h> #include <sys/mman.h> #include <sys/ioctl.h> #include <st ...
- IDEA打开maven项目dependencies红线
第一步:install报红的项目,从maven库下载需要的包,看看日志还缺哪些本地包,少了就去下,丢到库里.不缺包后,reimport一下一般就OK了,如果还是红的,重启一下就好了. 如果第一步还没好 ...
- Eigen3安装及注意
执行命令: sudo apt-get install libeigen3-dev 安装后执行以下命令 运行命令: sudo cp -r /usr/include/eigen3/Eigen /usr/i ...
- 背水一战 Windows 10 (103) - 通知(Toast): 基础, 按计划显示 toast 通知
[源码下载] 背水一战 Windows 10 (103) - 通知(Toast): 基础, 按计划显示 toast 通知 作者:webabcd 介绍背水一战 Windows 10 之 通知(Toast ...
- MXNet的新接口Gluon
为什么要开发Gluon的接口 在MXNet中我们可以通过Sybmol模块来定义神经网络,并组通过Module模块提供的一些上层API来简化整个训练过程.那MXNet为什么还要重新开发一套Python的 ...
- django项目微博第三方登录
此处咱们用到的是 social_django,所以要把此应用注册到配置文件中, INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.a ...
- Python开发端口扫描器
首先是最常用的端口扫描器: 虽说有nmap等强大的工具,不过如果由于条件限制无法安装Nmap呢? 我这个脚本写的比较简单,默认扫描1-65535全部的端口 实际的话,可以根据需要自己修改脚本来实现定制 ...