1、需求
按學生的年齡段,將資料輸出到不同的檔案。這裡我們分為三個年齡段:小於等於20歲、大於20歲小於等於50歲和大於50歲
2、實現
1、編寫partitioner,**如下
publicstatic
class studentpartitioner extends partitioner
else
if (ageint <= 50)
else
}}
publicstatic
@override
protected
void map(longwritable key, text value,context context) throws
ioexception, interruptedexception
}}
3、編寫reducer
publicstatic
class studentreducer extends reducer
}}
4、一些執行**
@overridepublic
int run(string arg0) throws
exception
//新建乙個任務
job job = new job(conf, "partitionerdemo");
//設定主類
job.setjarbyclass(studentpartitioner.class
);
//輸入路徑
fileinputformat.addinputpath(job, new path(arg0[0]));
//輸出路徑
fileoutputformat.setoutputpath(job, new path(arg0[1]));
//);
//reducer
job.setreducerclass(studentreducer.class
);
// job.setmapoutputkeyclass(intwritable.class
); job.setmapoutputvalueclass(text.
class
);
//reducer輸出格式
job.setoutputkeyclass(nullwritable.class
);
job.setoutputvalueclass(text.
class
);
//設定partitioner類
job.setpartitionerclass(studentpartitioner.class
);
//reduce個數設定為3
job.setnumreducetasks(3);
//提交任務
return job.waitforcompletion(true)?0:1;
}
publicstatic
void main(string args0) throws
exception ;
int ec = toolrunner.run(new configuration(), new
studentagepartitionerdemo(), args0);
system.exit(ec);
}
3、總結
partitioner適用於事先知道分割槽數的情況下,比如像上面這個需求
缺點:1、在作業執行之前需要知道分割槽數,也就是年齡段的個數,如果分割槽數未知,就無法操作。
2、一般來說,讓應用程式來嚴格限定分割槽數並不好,因為可能導致分割槽數少或分割槽不均
】。
spark的自定義partitioner
在hadoop的mapreduce中預設patitioner是hashpartitioner,我們可以自定義partitioner可以有效防止資料傾斜,在spark裡面也是一樣,在spark裡也是預設的hashpartitioner,如果自己想自己定義partitioner繼承org.apache....
使用Apache HTTPServer實現負載均衡
採用http 模式配置方法 修改conf目錄下的httpd.conf檔案 第一步 載入module loadmodule proxy module modules mod proxy.so loadmodule proxy balancer module modules mod proxy bala...
使用陣列實現棧,使用單向鍊錶實現佇列
棧 源 使用陣列實現棧的 出棧 入棧 返回棧頂元素 取得棧的大小 及棧的複製 最重要的是定義結構體,結構體內部兩個屬性,乙個 int 型陣列,乙個 top 表示陣列內的有效資料為 top 個。include include include typedef int datetype define ma...