`
pconline900
  • 浏览: 29074 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

基于Hadoop的Map reduce编程(一)

阅读更多
翻译的一篇国外的关于hadoop mapreduce的文章,文章比较长,先翻译第一部分吧

翻译者:pconlin900
博客:http://pconline900.iteye.com

Hadoop是apache的一个开源的map-reduce框架,MapReduce是一个并行计算模型,用来处理海量数据。模型思想来源于google的Jeffrey Dean 和 Sanjay Ghemawat,包括map() reduce()两个主要的功能。

这是一个很简单的类似于Hadoop的MapReduce应用例子,应用了mapreduce的基本思想,可以帮助理解hadoop的处理思想和技术,但注意,它没有使用hadoop框架。
例子的功能是创建一些字符串,然后统计这些字符串里面每个字符出现的次数,最后汇总得到总的字符出现次数。

Listing 1. 主程序
public class Main
{

    public static void main(String[] args)
    {

        MyMapReduce my = new MyMapReduce();
        my.init();

    }
}


Listing 2. MyMapReduce.java

import java.util.*;

public class MyMapReduce
{
List buckets = new ArrayList();
List intermediateresults = new ArrayList();
List values = new ArrayList();

public void init()
{
for(int i = 1; i<=30; i++)
{
values.add("http://pconline900.iteye.com" + new Integer(i).toString());
}



System.out.println("**STEP 1 START**-> Running Conversion into Buckets**");
System.out.println();
List b = step1ConvertIntoBuckets(values,5);
        System.out.println("************STEP 1 COMPLETE*************");
        System.out.println();
        System.out.println();

   System.out.println("**STEP 2 START**->Running **Map Function** concurrently for all        Buckets");
System.out.println();
List res = step2RunMapFunctionForAllBuckets(b);
System.out.println("************STEP 2 COMPLETE*************");

        System.out.println();
        System.out.println();
System.out.println("**STEP 3 START**->Running **Reduce Function** for collating Intermediate Results and Printing Results");
System.out.println();
step3RunReduceFunctionForAllBuckets(res);
System.out.println("************STEP 3 COMPLETE*************");
                  System.out.println("************pconline900 翻译*************");
                  System.out.println("***********博客:http://pconline900.iteye.com*************");


}
public List step1ConvertIntoBuckets(List list,int numberofbuckets)
{
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();
System.out.println(buckets);
System.out.println();
return buckets;

}

public List step2RunMapFunctionForAllBuckets(List list)
{
for(int i=0; i< list.size(); i++)
{
List elementList = (ArrayList)list.get(i);
new StartThread(elementList).start();
}

        try
        {
Thread.currentThread().sleep(1000);
}catch(Exception e)
{
}
return intermediateresults;
}

public void step3RunReduceFunctionForAllBuckets(List list)
{
int sum =0;
for(int i=0; i< list.size(); i++)
{
//you can do some processing here, like finding max of all results etc
int t = Integer.parseInt((String)list.get(i));
sum += t;
}


System.out.println();
System.out.println("Total Count is "+ sum);
System.out.println();

}

class StartThread extends Thread
{
private 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());
}


}
}

}

}


 init()方法创建了一些测试数据,作为测试数据。实际应用中会是海量数据处理。

 step1ConvertIntoBuckets()方法将测试数据拆分到5个 bucket中,每个bucket是一个ArrayList(包含6个String数据)。bucket可以保存在内存,磁盘,或者集群中的其他节点;

 step2RunMapFunctionForAllBuckets()方法创建了5个线程(每个bucket一个),每个线程StartThread处理每个bucket并把处理结果放在intermediateresults这个arraylist中。

 如果bucket分配给不同的节点处理,必须有一个master主控节点监控各个节点的计算,汇总各个节点的处理结果,若有节点失败,master必须能够分配计算任务给其他节点计算。\

 step3RunReduceFunctionForAllBuckets()方法加载intermediateresults中间处理结果,并进行汇总处理,最后得到最终的计算结果。
分享到:
评论
2 楼 lvshuding 2011-08-06  
HRoger 写道
怎么没有继续翻译呢,不知能不能把英文的文章地址给出?谢谢

1 楼 HRoger 2009-05-05  
怎么没有继续翻译呢,不知能不能把英文的文章地址给出?谢谢

相关推荐

    Hadoop Map Reduce教程

    - **定义**:Hadoop MapReduce 是一个基于 Java 的分布式数据处理框架,它能够高效地处理大规模数据集。该框架将任务分解为一系列较小的任务(Map 和 Reduce),并在集群中的多台计算机上并行执行这些任务。 - **...

    hadoop map reduce 中文教程

    Hadoop MapReduce 是一种非常强大的分布式数据处理工具,它通过简单的编程模型支持了大规模数据集的处理。本教程通过详细介绍 MapReduce 的工作原理及其在实际场景中的应用,帮助读者快速入门 Hadoop MapReduce 技术...

    Hadoop Map-Reduce教程

    Hadoop Map-Reduce 是一种编程模型,用于处理大规模数据集(通常为TB级或以上)。这种模型支持分布式计算,可以在成百上千台计算机上运行。Map-Reduce 通过将大数据集拆分成小数据集来实现并行处理,这些小数据集...

    基于Hadoop-Map Reduce的算法.zip

    Hadoop是一个开源框架,专为分布式存储和大规模数据分析设计,而其中的MapReduce编程模型则是其核心组成部分。本篇文章将深入探讨基于Hadoop的MapReduce算法,揭示其在人工智能领域的应用。 MapReduce是Google提出...

    远程调用执行Hadoop Map/Reduce

    本篇文章将深入探讨“远程调用执行Hadoop Map/Reduce”的概念、原理及其实现过程,同时结合标签“源码”和“工具”,我们将涉及到如何通过编程接口与Hadoop集群进行交互。 Hadoop MapReduce是一种编程模型,用于大...

    基于Hadoop的电影影评数据分析

    【基于Hadoop的电影影评数据分析】是一项大数据课程的大作业,旨在利用Hadoop的分布式处理能力来分析电影影评数据。Hadoop是一个由Apache软件基金会开发的开源框架,专为处理和存储大规模数据而设计。它由四个核心...

    最高气温 map reduce hadoop 实例

    MapReduce是一种编程模型,用于大规模数据集的并行计算,由Google提出并在Hadoop中得以实现。 【描述】:“运行命令hadoop jar ‘/home/hadoop/downloas/max.jar’ upload.MaxTemperature” 这里执行的命令是启动...

    基于hadoop的词频统计.docx

    Hadoop 是一种基于云计算的分布式计算框架,由 Apache 基金会在2002年发起,起源于 Apache Nutch 项目。它的核心是分布式文件系统 HDFS(Hadoop Distributed File System)和 MapReduce 计算模型。Hadoop 设计的目标...

    Map-Reduce原理体系架构和工作机制,eclipse与Hadoop集群连接

    Map-Reduce是一种编程模型,用于处理大规模数据集(通常是TB级或更大),该模型可以在大量计算机(称为集群)上进行并行处理。Map-Reduce的设计初衷是为了简化大数据处理任务,通过将这些任务分解成两个阶段——Map...

    Hadoop下MapReduce编程介绍

    详细介绍基于hadoop的mapreduce编程,基本原理。hadoop架构,map的处理方式,reduce的处理输入输出等。

    基于hadoop的简易云盘实现.zip

    【标题】"基于hadoop的简易云盘实现.zip"揭示了这个项目是关于利用Hadoop框架构建一个简单的云存储服务。Hadoop是一个开源的分布式计算框架,它允许处理和存储大量数据,尤其适合大数据处理场景。这个简易云盘的实现...

    基于Hadoop的电子商务推荐系统的设计与实现_李文海.pdf

    【基于Hadoop的电子商务推荐系统的设计与实现】是针对大数据时代下解决信息过载问题的一种解决方案。该系统利用Hadoop的分布式计算框架,构建了一个能够处理海量数据的推荐系统。Hadoop是Apache开源项目,主要由HDFS...

    基于 Hadoop 平台,使用 MapReduce 编程,统计NBA球员五项数据.zip

    在这个项目“基于 Hadoop 平台,使用 MapReduce 编程,统计NBA球员五项数据”中,我们将深入探讨如何利用 Hadoop 的核心组件 MapReduce 对 NBA 球员的数据进行分析。 MapReduce 是一种编程模型,用于大规模数据集...

    hadoop之map/reduce

    在Hadoop生态系统中,MapReduce是一种分布式编程模型,主要用于处理和生成大数据集。它通过将大规模数据分割成小块,然后在多台机器上并行处理这些数据块,最后将结果汇总,从而实现高效的批量数据处理。MapReduce的...

    基于Hadoop的Web日志挖掘

    在设计基于Hadoop的Web日志挖掘平台时,研究者们采用了Hadoop的集群框架,利用MapReduce编程模式来实现数据的分布式处理。这种设计能够充分利用云计算环境下的多节点计算资源,显著提升Web日志数据的处理速度和效率...

    基于Hadoop架构的分布式计算和存储技术及其应用.pdf

    而MapReduce是Hadoop的另一个核心组件,它是一种分布式计算模型,通过Map(映射)和Reduce(归约)两个阶段对大规模数据集进行处理。Map阶段将输入数据分割成独立的块,并进行并行处理,产生一系列中间结果。Reduce...

    基于Hadoop的大数据编程,主要涉及HDFS,MapRedue,HBase。非生产环境.zip

    在这个“基于Hadoop的大数据编程”主题中,我们主要关注三个核心组件:HDFS(Hadoop Distributed File System)、MapReduce以及HBase。 **HDFS(Hadoop Distributed File System)**是Hadoop的核心部分,它是一个...

    Windows平台下Hadoop的Map/Reduce开发

    通过以上步骤,初学者可以逐步熟悉Windows环境下Hadoop的安装、配置和开发流程,从而顺利入门Map/Reduce编程。随着经验的增长,可以进一步探索更复杂的数据处理任务和优化策略,如Combiner的使用、Shuffle和Sort过程...

    基于hadoop计算机平均分

    【标题】"基于Hadoop计算机平均分"是一个关于利用Java编程语言和Apache Hadoop框架来计算数据集中的平均分数的项目。Hadoop是大数据处理领域的一个核心工具,它提供了分布式存储(HDFS)和分布式计算(MapReduce)的...

Global site tag (gtag.js) - Google Analytics