hadoop初学之MapReduce编程模型学习
来源:互联网 发布:qt图形界面编程入门 编辑:程序博客网 时间:2024/05/17 16:11
MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念"Map(映射)"和"Reduce(化简)",和他们的主要思想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。他极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。 当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(化简)函数,用来保证所有映射的键值对中的每一个共享相同的键组,下面我将用一个小例子,作为学习的总结,不过我有一个疑问:主线程为什么要停止1s呢,希望大家可以给我解答疑问
新建MyMapReduce.java
package mapReduce;import java.util.*;public class MyMapReduce {List buckets = new ArrayList();List intermediateresults = new ArrayList();List values = new ArrayList();public void init() { //init()方法创建了一些测试数据,作为测试数据。实际应用中会是海量数据处理for (int i = 1; i <= 30; i++) {values.add("javaxp:" + new Integer(i).toString());}System.out.println("拆分成不同的Buckets");List b = step1ConvertIntoBuckets(values, 5);System.out.println("Map Function:同时处理所有的Buckets");List res = step2RunMapFunctionForAllBuckets(b);System.out.println("*Reduce Function:收集中间的结果,并打印输出");step3RunReduceFunctionForAllBuckets(res);}public List step1ConvertIntoBuckets(List list, int numberofbuckets) // 将测试数据拆分到5个 bucket中,每个bucket是一个ArrayList(包含6个String数据)。bucket可以保存在内存,磁盘,或者集群中的其他节点{int n = list.size();int m = n / numberofbuckets;int rem = n % numberofbuckets;int count = 0;System.out.println("BUCKETS");for (int j = 1; j <= numberofbuckets; j++) {List temp = new ArrayList();for (int i = 1; i <= m; i++) {temp.add((String) values.get(count));count++;}buckets.add(temp);temp = new ArrayList();}if (rem != 0) {List temp = new ArrayList();for (int i = 1; i <= rem; i++) {temp.add((String) values.get(count));count++;}buckets.add(temp);}System.out.println(buckets);return buckets;}public List step2RunMapFunctionForAllBuckets(List list) { //创建了5个线程(每个bucket一个),每个线程StartThread处理每个bucket并把处理结果放在intermediateresults这个arraylist中for (int i = 0; i < list.size(); i++) {List elementList = (ArrayList) list.get(i);new StartThread(elementList).start();}try {Thread.currentThread().sleep(1000); //为什么要停止 1s呢?} catch (Exception e) {}return intermediateresults;}public void step3RunReduceFunctionForAllBuckets(List list) {// 加载intermediateresults中间处理结果,并进行汇总处理,最后得到最终的计算结果,如果bucket分配给不同的节点处理,必须有一个master主控节点监控各个节点的计算,汇总各个节点的处理结果,若有节点失败,master必须能够分配计算任务给其他节点计算int sum = 0;for (int i = 0; i < list.size(); i++) {// you can do some processing here, like finding max of all results// etcint t = Integer.parseInt((String) list.get(i));sum += t;}System.out.println("Total Count is " + sum);}class StartThread extends Thread { //分进程处理拆分下来的listprivate List tempList = new ArrayList();public StartThread(List list) {tempList = list;}public void run() {for (int i = 0; i < tempList.size(); i++) {String str = (String) tempList.get(i);synchronized (this) {intermediateresults.add(new Integer(str.length()).toString());}}}}}
另建一个调用类:Main.java
package mapReduce;/* * 参考资料:http://pconline900.iteye.com/blog/246680 */public class Main { public static void main(String[] args) { MyMapReduce my = new MyMapReduce(); my.init(); } }
- hadoop初学之MapReduce编程模型学习
- Hadoop之MapReduce编程模型
- Hadoop MapReduce编程模型之InputFormat接口学习
- 初学Hadoop之MapReduce
- Hadoop学习笔记2--MapReduce编程模型
- Hadoop MapReduce编程模型
- Hadoop技术内幕之MapReduce编程模型(上)
- Hadoop技术内幕之MapReduce编程模型(下)
- hadoop初识之十:mapreduce编程模型与数据传输格式
- 【Hadoop入门学习系列之四】MapReduce 2.0应用场景和原理、基本架构和编程模型
- Hadoop之MapReduce-Partition编程
- Hadoop之深入MapReduce编程
- hadoop 之MapReduce编程实战
- hadoop学习笔记之二:MapReduce基本编程
- 【Hadoop入门学习系列之五】MapReduce 2.0编程实战
- mapreduce编程模型学习--1
- mapreduce编程模型之partitioner
- mapreduce编程模型之WritableComparator
- Android系统启动流程
- qt多窗口应用
- ANT--HELLOWORLD
- 汇编语言Assembly Language
- 找不到 Root file system on NFS
- hadoop初学之MapReduce编程模型学习
- Use Memory Layout from Target Dialog
- linux下NAT内网连通IPv6的实现
- 昨天,今天,明天830
- 震区归来话旅游867
- 第一次C程序设计上机报告
- mysqldump 备份命令错误 Can't create/write to file '' (Errcode: 13)
- onActivityResult
- 贴一下今天python中文乱码问题解决办法。