如果可以说些啥HADOOP解读.docx
- 文档编号:10255309
- 上传时间:2023-05-24
- 格式:DOCX
- 页数:43
- 大小:29.34KB
如果可以说些啥HADOOP解读.docx
《如果可以说些啥HADOOP解读.docx》由会员分享,可在线阅读,更多相关《如果可以说些啥HADOOP解读.docx(43页珍藏版)》请在冰点文库上搜索。
如果可以说些啥HADOOP解读
1.1.理论与原理概括
1.1.1.Mapreduce
每个Mapreduce任务都会被JobConf初始化为一个JOB,每个JOB可以分为两个阶段,MAP阶段和REDUCE阶段。
是谁初始化了他的任务?
是JOBtracker和tasktracker.前面的分配任务,后者执行任务。
步骤:
1)初始化Mapreduce.,利用反射,把Mapreduce的类装饰成JobConf对象。
2)给对象命名便于在JobTracker和TaskTracker里面进行监测。
3)设置输出、输入、路径利用工具类FileInputFormat,FileoutputFormat
4)获取数据栈inputsplit.他存储的是数据的分片长度和记录了数据的位置。
Inputsplit是怎么获取到的?
Inputformat调用getrecordReader生成RecordReader,RR在通过createKey()和createValue()创建出可以处理的Map集合。
不同类型的输入都会转成Map来处理。
5)Map类继承了Mapreducebase,实现了Mapper
6)Reduce类继承了Mapreducebase,实现了Reducer
7)发布编译运行程序:
Mkdirfirstjar
Javac-classpath~/hadoop/hadopp-2.0-core.jar-dfirstjar//编译,并存放到firstjar
Wordcount.java
Jar-cvfwordcount.jar-Cfirstjar/.//打包生成jar
8)上传文件:
~/hadoop/bin/hadoopdfs-mkdirinput
~/hadoop/bin/hadoopdfs-put~/input/file0*input
9)部署
将生成的jar文件,放到HADOOP_HOME目录下面
执行:
~/hadoop/bin/hadoopjarwordcount.jarwordcountinputoutput
注意:
Mapreduce不仅仅只有一个reducetask.每个reduce会收集一个或者多个key,reduce的数量可以通过程序控制。
一个reduce产生一个输出文件。
没有reduce的时候,程序会将Maptask的结果作为最终结果,有多少个Maptask,就有多少个输出文件。
1.1.2.Hbase
1.1.2.1.安装
注意:
Hbase的版本。
在Hbase的lib下面有hadoop-core.jar。
如果想要与其他版本的Hadoop,那么需要将Hadoop的core.jar和test.jar复制一份到Hbase的lib下面。
1.1.2.2.修改Hbase配置文件
Hbase先加载Hbasedefault.xml里面的配置信息,然后加载Hbaseset.xml.所以:
两个文件里面有相同配置信息后面加载的会覆盖前面的。
1.1.2.3.HbaseShell
1、进入数据库hbaseshell
2、
1.2.设计模式
1.2.1.策略模式
好处:
动态的改变对象的行为
原则:
把一个类中,经常改变,或者将来要改变的部分提取出来作为一个接口,然后在类中包含这个对象的实例。
(组合的方式形成以前的类),目的:
类的实例在运行时,可以随意的实现这个接口的行为。
实例:
会员算积分,刘备锦娘妙计
packagenie.design.model.strategy;
publicclassStrategy{
publicstaticvoidmain(String[]args){
//大部分模式结构相似,不同在客户端的调用
SetStrategyImplsstegy1=newSetStrategyImpl(newStrategyImpl1());
sstegy1.open();
SetStrategyImplsstegy2=newSetStrategyImpl(newStrategyImpl2());
sstegy2.open();
SetStrategyImplsstegy3=newSetStrategyImpl(newStrategyImpl3());
sstegy3.open();
SetStrategyImplsstegy4=newSetStrategyImpl(newStrategyImpl4());
sstegy4.open();
}
}
interfaceIStrategy{
voidoperate();
}
classSetStrategyImpl{
privateIStrategystrategy;
publicSetStrategyImpl(IStrategystrategy){
this.strategy=strategy;
}
voidopen(){
this.strategy.operate();
}
}
classStrategyImpl1implementsIStrategy{
@Override
publicvoidoperate(){
}
}
classStrategyImpl2implementsIStrategy{
@Override
publicvoidoperate(){
}
}
classStrategyImpl3implementsIStrategy{
@Override
publicvoidoperate(){
}
}
classStrategyImpl4implementsIStrategy{
@Override
publicvoidoperate(){
}
}
实例2:
packagenie.design.model.strategy;
publicclassStrategy2{
publicstaticvoidmain(String[]args){
Priceprice=newPrice(newprimaryMember());
price.quote();
}
}
interfaceMemberStraretgy{
voidcalcPrice();
}
classprimaryMemberimplementsMemberStraretgy{
@Override
publicvoidcalcPrice(){
}
}
classMediaMemberimplementsMemberStraretgy{
@Override
publicvoidcalcPrice(){
}
}
classAdvancedMemberimplementsMemberStraretgy{
@Override
publicvoidcalcPrice(){
}
}
classPrice{
privateMemberStraretgystraretgy;
publicPrice(MemberStraretgystraretgy){
this.straretgy=straretgy;
}
/*计算价格*/
voidquote(){
this.straretgy.calcPrice();
}
}
1.2.2.责任链模式
好处:
客户端不需要知道具体是谁处理了他的请求。
解耦请求的发出者和发请求的接受着之间的关系。
原则:
符合自己的能力就处理客户端发的请求,不符合自己的能力范围,就向上传递请求。
缺点:
责任链分为两种:
一种是生成类型责任链,和检查类型责任链。
生成类型的责任链也就是一个产品的生成,每一个对象无论如何都会做出自己相应的贡献,然后再向上传递,检查责任链是检查是否是自己的处理范围,是处理,不是就向上传递。
实例:
领导审批,报销
packagenie.design.model.workchain;
publicclassWorkChain{
publicstaticvoidmain(String[]args){
Handlerh1=newManager1();
Handlerh2=newManager2();
Handlerh3=newManager3();
Handlerh4=newManager4();
h2.setHandler(h1);
h3.setHandler(h2);
h4.setHandler(h3);
Stringresult=h4.handlerRequest("",200);
System.out.println("谁处理的结果"+result);
}
}
abstractclassHandler{
protectedHandlerhandler=null;
publicHandlergetHandler(){
returnhandler;
}
publicvoidsetHandler(Handlerhandler){
this.handler=handler;
}
publicabstractStringhandlerRequest(Stringstr,intfee);
}
classManager1extendsHandler{
@Override
publicStringhandlerRequest(Stringstr,intfee){
if(this.getHandler()!
=null&&fee>400){
returnthis.getHandler().handlerRequest(str,fee);
}
return"Manager1success";
}
}
classManager2extendsHandler{
@Override
publicStringhandlerRequest(Stringstr,intfee){
if(this.getHandler()!
=null&&fee>300){
returnthis.getHandler().handlerRequest(str,fee);
}
return"Manager2success";
}
}
classManager3extendsHandler{
@Override
publicStringhandlerRequest(Stringstr,intfee){
if(this.getHandler()!
=null&&fee>200){
returnthis.getHandler().handlerRequest(str,fee);
}
return"Manager3success";
}
}
classManager4extendsHandler{
@Override
publicStringhandlerRequest(Stringstr,intfee){
if(this.getHandler()!
=null&&fee>100){
returnthis.getHandler().handlerRequest(str,fee);
}
return"Manager4success";
}
}
1.2.3.观察者模式
好处:
所有对象都跟主对象进行相同的行为。
在一对多依赖的对象关系中,如果这个'一'对象状态发生了变化,那么它所有依赖他的'多'对象都应该被通知,然后做相应的行为,这就是观察者模式.
原则:
实例:
缺点:
性能降低,需要添加和遍历
packagenie.design.model.Observer;
importjava.util.ArrayList;
importjava.util.List;
publicclassObserver2{
publicstaticvoidmain(String[]args){
Watchedwatched=newWatchedImpl1();
Watcherwatcher1=newWatcherImpl1();
Watcherwatcher2=newWatcherImpl2();
Watcherwatcher3=newWatcherImpl3();
watched.add(watcher1);
watched.add(watcher2);
watched.add(watcher3);
watched.notifys("ok");
}
}
interfaceWatcher{
voidupdate(Stringstr);
}
interfaceWatched{
voidadd(Watcherw);
voidremove(Watcherw);
voidnotifys(Stringstr);
}
classWatcherImpl1implementsWatcher{
@Override
publicvoidupdate(Stringstr){
System.out.println("WatcherImpl1"+str);
}
}
classWatcherImpl2implementsWatcher{
@Override
publicvoidupdate(Stringstr){
System.out.println("WatcherImp12"+str);
}
}
classWatcherImpl3implementsWatcher{
@Override
publicvoidupdate(Stringstr){
System.out.println("WatcherImp13"+str);
}
}
classWatchedImpl1implementsWatched{
privateList
@Override
publicvoidadd(Watcherw){
list.add(w);
}
@Override
publicvoidremove(Watcherw){
list.remove(w);
}
@Override
publicvoidnotifys(Stringstr){
for(Watcherwa:
list){
wa.update(str);
}
}
}
1.2.4.状态模式
状态模式和策略模式很相似。
但是不同在于:
状态模式加入的对象是谁,就会执行这个对象的内容,策略模式
好处:
状态模式可以使对象在不同的状态有不同的行为,策略模式是封装了一组算法,客户端在使用时候可以不改变Context,运行时选择任意的算法。
策略模式允许对象选择行为,状态模式的行为是固定死的,根据不同的状态,执行不同的行为。
packagenie.design.model.state;
publicclassState{
publicstaticvoidmain(String[]args){
IStatesits=newStatesImpl1();
Contextcon=newContext();
con.setiStates(its);
con.request("工作好。
。
。
");
}
}
interfaceIStates{
voidhandle(Strings);
}
classContext{
privateIStatesiStates;
publicIStatesgetiStates(){
returniStates;
}
publicvoidsetiStates(IStatesiStates){
this.iStates=iStates;
}
voidrequest(Stringstr){
iStates.handle(str);
}
}
classStatesImpl1implementsIStates{
@Override
publicvoidhandle(Strings){
System.out.println("StatesImpl1"+s);
}
}
classStatesImpl2implementsIStates{
@Override
publicvoidhandle(Strings){
System.out.println("StatesImpl2"+s);
}
}
classStatesImpl3implementsIStates{
@Override
publicvoidhandle(Strings){
System.out.println("StatesImpl3"+s);
}
}
classStatesImpl4implementsIStates{
@Override
publicvoidhandle(Strings){
System.out.println("StatesImpl4"+s);
}
}
实例2:
投票
packagenie.design.model.state;
importjava.util.HashMap;
importjava.util.Map;
publicclassState2{
publicstaticvoidmain(String[]args){
VoteManagervm=newVoteManager();
for(inti=0;i<9;i++){
vm.vote("u1","A");
}
}
}
interfaceVoteState{
publicvoidvote(Stringuser,StringvoteItem,VoteManagervoteManager);
}
//具体状态类——正常投票
classNormalVoteStateimplementsVoteState{
@Override
publicvoidvote(Stringuser,StringvoteItem,VoteManagervoteManager){
//正常投票,记录到投票记录中
voteManager.getMapVote().put(user,voteItem);
System.out.println("恭喜投票成功");
}
}
//具体状态类——重复投票
classRepeatVoteStateimplementsVoteState{
@Override
publicvoidvote(Stringuser,StringvoteItem,VoteManagervoteManager){
System.out.println("请不要重复投票");
}
}
// 具体状态类——恶意刷票
classSpiteVoteStateimplementsVoteState{
@Override
publicvoidvote(Stringuser,StringvoteItem,VoteManagervoteManager){
//恶意投票,取消用户的投票资格,并取消投票记录
Stringstr=voteManager.getMapVote().get(user);
if(str!
=null){
voteManager.getMapVote().remove(user);
}
System.out.println("你有恶意刷屏行为,取消投票资格");
}
}
// 具体状态类——黑名单
classBlackVoteStateimplementsVoteState{
@Override
publicvoidvote(Stringuser,StringvoteItem,VoteManagervoteManager){
//记录黑名单中,禁止登录系统
System.out.println("进入黑名单,将禁止登录和使用本系统");
}
}
//环境类
classVoteManager{
//持有状体处理对象
privateVoteStatestate=null;
//记录用户投票的结果,Map
privateMap
//记录用户投票次数,Map
privateMap
/**
*获取用户投票结果的Map
*/
publicMap
returnmapVote;
}
publicvoidvote(Stringuser,StringvoteItem){
//1.为该用户增加投票次数
//从记录中取出该用户已有的投票次数
IntegeroldVoteCount=mapVoteCount.get(user);
if(oldVoteCount==null){
oldVoteCount=0;
}
oldVoteCount+=1;
mapVoteCount.put(user,oldVoteCount);
//2.判断该用户的投票类型,就相当于判断对应的状态
//到底是正常投票、重复投票、恶意投票还是上黑名单的状态
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 如果 可以说 HADOOP 解读