`
pconline900
  • 浏览: 28854 次
  • 性别: 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 map reduce 的中文简易教程,能轻松帮助普通用户不需了解太多hadoop底层知识就能实现分布式编程,很好的入门教程。

    Hadoop下MapReduce编程介绍

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

    一种基于Hadoop 的云计算平台搭建与性能

    Hadoop 平台的实现原理源自Google 提出的Map-Reduce 编程模型 和GFS 分布式存储系统,在海量的非结构化数据的处理方面有着其他平台难以匹敌的优势。 10 本文在介绍了如何使用Hadoop搭建云计算平台的同时介绍了如何对...

    基于Hadoop的大数据处理系统.pdf

    Hadoop MapReduce MapReduce的名字源于这个模型中的两项核⼼操作:Map和Reduce。这是函数式编程(Functional Programming)中的两个核⼼概 念。 MapReduce是⼀种简化的分布式编程模式,让程序⾃动分布到⼀个由普通...

    基于Hadoop下MapReduce框架实现的的并行C4.5算法.zip

    * 程序利用Eclipse EE在Hadoop平台下,使用Map/Reduce编程框架,将传统的C4.5决策树算法并行化; * 该部分属于本科毕业设计中,并行随机森林算法的核心部分; * Hadoop的搭建主要参考给力星的博客( ...

    基于Hadoop大数据平台和无简并高维离散超混沌系统的加密

    算法采用流密码对称加密方式,在Hadoop平台上读取存储于HDFS(Hadoop distributed file system)的大数据,进行分片处理和MapReduce编程后,用Map函数实现数据并行加密和解密,通过Reduce函数实现数据的合并操作并存储于...

    hadoop 编程框架 cascading

    cascading是在hadoop基础之上的map-reduce编程框架。能够简化hadoop上的分布式编程。目前应用在amazon ec2上。一个非常好的工具。

    Hadoop:Hadoop编程

    您还可以找到如何在Map Reduce中编写自定义数据类型和自定义分区程序。 #trendfinder文件夹:在Trendfinder文件夹中,您将发现如何使用多个Mappers和Reducers。 在这里,我们根据推文的出现来处理推特数据。 #...

    论文研究-基于Hadoop的时态信息存储与时态关系演算问题研究.pdf

    针对分布式处理特征和时态集合数据类型,提出一种在Map/Reduce编程计算模式下进行海量时态信息关系演算的实现方法;通过扩展时态区间关系运算,实现以时态集合为基本时态数据操作对象的交、并等关系运算。以医疗时态...

    hadoop2.9.2 涉及的mr编程相关文件.rar

    4.启动eclipse,检查插件是否运行成功(有DFS Locations的东东就是ok的) 若是没有,也别着急,在window-perspective-openperspective-other中将map/reduce打开 5.Mr配置以及jar包导入参考mapreduce编程ppt 6.别...

    基于R和Hadoop的大规模数据主成分分析

    R软件具有强大的统计分析功能,...本文利用RHadoop项目中的rhdfs和rmr2两个包,以及Map Reduce编程模型,设计出能够针对大规模数据进行主成分分析的函数,并对纽约股票市场部分股票价格数据进行主成分分析,以验证其可行性。

    Hadoop下的分布式搜索引擎

    了Map/Reduce编程模型运行原理及其优点,其次介绍 了Map/Reduce模型的开源实现版本——Hadoop分布 式处理平台,在此基础上将搜索引擎的爬行器、索引器和 查询器三个功能模块按照Map/Reduce模型进行设计, 充分利用...

    Hadoop-map-reduce-model:疯狂减少基于HadoopWeb日志

    MapReduce编程:使用hadoop计算维基百科文章的内部PageRank。 本课程向您介绍编程和数据操作的MapReduce模型。 它将提供有限的实践经验来分析真实的数据源:维基百科。 数据: 为了完成此任务,已向您提供了许多...

    mapreduce-programming:此示例程序将让您提取有用的统计数据,例如排名前 10 的平均评分电影、使用 Hadoop map-reduce 框架以及链接多个映射器和化简器对 200 万条记录进行基于流派的过滤

    mapreduce 编程 此示例程序将让您提取有用的统计数据,例如排名前 10 的平均评分电影、使用 Hadoop map-reduce 框架以及链接多个映射器和化简器对 200 万条记录进行基于流派的过滤

    Hadoop实战中文版

    5.2.1 Reduce侧的联结 5.2.2 基于DistributedCache的复制联结 5.2.3 半联结:map侧过滤后在reduce侧联结 5.3 创建一个Bloom filter 5.3.1 Bloom filter做了什么 5.3.2 实现一个Bloom filter 5.3.3 Hadoop 0.20...

    在Eclipse下的Hadoop0.17.0(MapReduce)的统计作业指导书

    Hadoop为分布式编程提供了一个理想的平台,普通的程序员只要理解了分布式的特点,就可以轻易地实现分布式计算,而不需要理解分布式的细节。本文用实例讲解了在Eclipse下,使用Hadoop对数据集的统计度量的实现过程。 ...

    Hadoop学习资料

    5.Map Reduce 2.0 编程实践 6.HBase 应用场景、原理与架构 7.HBase编程实践 8.HBase 案例分析 9.Zookeeper部署及典型应用 10.Hadoop数据入库系统Flume与Sqoop 11.数据分析系统Hice与Pig应用与比较 12.数据挖掘工具包...

    Hadoop从入门到上手企业开发

    近百节课视频详细讲解,需要的小伙伴自行百度网盘下载,链接见附件,...064 源代码跟踪查看Map Task和Reduce Task数目的个数 065 回顾MapReduce执行过程以及MapReduce核心 066 Hadoop MapReduce框架数据类型讲解 067

    Map-ReduceAnagrams:这是在 map-reduce 编程模型中查找字谜的基本实现。 它是在 Hadoop 文件系统中实现的

    Map-ReduceAnagrams 这是在 map-reduce 编程模型中查找字谜的基本实现。 它是在 Hadoop 文件系统中实现的。 要正常工作,您必须提供两个参数: 输入文件的路径(英文单词) 输出文件的路径(字谜) 如果您有任何问题...

    MRPack:单个MapReduce作业中基于Hadoop并发算法

    在MRPack中,所有算法都在Map and Reduce编程模型中实现,然后所有这些算法都在单个统一的Map and Reduce超类下执行。 MRPack使用主映射和归约,子映射和归约的方法来实现。 它引入了用于中间数据处理的复合键结构...

Global site tag (gtag.js) - Google Analytics