专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »Java教程 » hadoop:基于Hadoop的Map reduce编程(一) »正文

hadoop:基于Hadoop的Map reduce编程(一)

来源: 发布时间:星期四, 2009年1月8日 浏览:22次 评论:0
  翻译篇国外有关hadoop mapreduce文章文章比较长先翻译第部分吧

  翻译者:pconlin900

  博客:http://pconline900.javaeye.com

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

  这是个很简单类似于HadoopMapReduce应用例子应用了mapreduce基本思想可以帮助理解hadoop处理思想和技术但注意它没有使用hadoop框架

  例子功能是创建然后统计这些串里面每个出现次数最后汇总得到总出现次数

  Listing 1. 主

public Main
{
  public void (String args)
  {
    MyMapReduce my = MyMapReduce;
    my.init;
  }
}
Listing 2. MyMapReduce.java
import java.util.*;
public MyMapReduce
{
List buckets = ArrayList;
List ermediateresults = ArrayList;
List values = ArrayList;
public void init
{
for( i = 1; i<=30; i)
{
values.add("http://pconline900.javaeye.com" + Integer(i).toString);
}
  
.out.prln("**STEP 1 START**-> Running Conversion o Buckets**");
.out.prln;
List b = step1ConvertIntoBuckets(values,5);
    .out.prln("************STEP 1 COMPLETE*************");
    .out.prln;
    .out.prln;
  .out.prln("**STEP 2 START**->Running **Map Function** concurrently for all    Buckets");
.out.prln;
List res = step2RunMapFunctionForAllBuckets(b);
.out.prln("************STEP 2 COMPLETE*************");
    .out.prln;
    .out.prln;
.out.prln("**STEP 3 START**->Running **Reduce Function** for collating Intermediate Results and Pring Results");
.out.prln;
step3RunReduceFunctionForAllBuckets(res);
.out.prln("************STEP 3 COMPLETE*************");
         .out.prln("************pconline900 翻译*************");
         .out.prln("***********博客:http://pconline900.javaeye.com*************");
}
public List step1ConvertIntoBuckets(List list, numberofbuckets)
{
n = list.size;
m = n / numberofbuckets;
rem = n% numberofbuckets;
count = 0;
.out.prln("BUCKETS");
for( j =1; j<= numberofbuckets; j)
{
List temp = ArrayList;
for( i=1; i<= m; i)
{
temp.add((String)values.get(count));
count;
}
buckets.add(temp);
temp = ArrayList;
}
(rem != 0)
{
List temp = ArrayList;
for( i =1; i<=rem;i)
{
temp.add((String)values.get(count));
count;
}
buckets.add(temp);
}
    .out.prln;
.out.prln(buckets);
.out.prln;
buckets;
}
public List step2RunMapFunctionForAllBuckets(List list)
{
for( i=0; i< list.size; i)
{
List elementList = (ArrayList)list.get(i);
StartThread(elementList).start;
}
    try
    {
Thread.currentThread.sleep(1000);
}catch(Exception e)
{
}
ermediateresults;
}
public void step3RunReduceFunctionForAllBuckets(List list)
{
sum =0;
for( i=0; i< list.size; i)
{
//you can do some processing here, like finding max of all results etc
t = Integer.parseInt((String)list.get(i));
sum t;
}
.out.prln;
.out.prln("Total Count is "+ sum);
.out.prln;
}
StartThread extends Thread
{
private List tempList = ArrayList;
public StartThread(List list)
{
tempList = list;
}
public void run
{
for( i=0; i< tempList.size;i)
{
String str = (String)tempList.get(i);
synchronized(this)
           {
ermediateresults.add( Integer(str.length).toString);
}
}
}
}
}


   init思路方法创建了些测试数据作为测试数据实际应用中会是海量数据处理

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

   step2RunMapFunctionForAllBuckets思路方法创建了5个线程(每个bucket个)每个线程StartThread处理每个bucket并把处理结果放在ermediateresults这个.gif' />list中

   如果bucket分配给区别节点处理必须有个master主控节点监控各个节点计算汇总各个节点处理结果若有节点失败master必须能够分配计算任务给其他节点计算

   step3RunReduceFunctionForAllBuckets思路方法加载ermediateresults中间处理结果并进行汇总处理最后得到最终计算结果



0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: