基于Hadoop的分布并行加法的实现

本文档详细介绍了如何在Hadoop环境中实现分布式并行加法。首先,搭建了包括JDK、Hadoop、SSH通信和eclipse Java开发环境的配置。接着,在Ubuntu的三台虚拟机上配置了主从节点,并通过MapReduce编程实现了多个数的加法。通过eclipse创建工程并配置运行,最后展示了程序的运行和结果。此外,还提供了在命令行下运行程序的方法。

1、搭建好Hadoop环境,包括JDK的安装、Hadoop的安装及文件配置、SSH通信的配置、eclipse Java开发环境的配置(具体安装见最后附件Hadoop安装配置)。

2、本环境配置是在ubuntu下建立了三台虚拟机,一台为master,另两台为slave。打开三台虚拟机,在master上启动Hadoop


使用jps命令查看结点启动情况,如下表明Hadoop启动成功:


3、打开eclipse,建立工程并配置Hadoop运行(具体安装见最后附件Hadoop安装配置),编程界面如下:


4、MapReduce下分布并行实现多个数相加的程序,代码及详细解释如下:

import java.io.IOException; //异常包

import java.util.StringTokenizer; //分隔字符串,默认用空格来分隔

import org.apache.hadoop.conf.Configured; //任务配置包,配置任务所需的map等函数

import org.apache.hadoop.fs.Path; //设置文件路径

import org.apache.hadoop.io.IntWritable; //Hadoop的数据类型,类似Javaint

import org.apache.hadoop.io.LongWritable; //数据类型,类似Javalong

import org.apache.hadoop.io.Text; //hadoop数据类型,类似JavaString

import org.apache.hadoop.mapreduce.Job; //控制整个作业运行

import org.apache.hadoop.mapreduce.Mapper; //map接口

import org.apache.hadoop.mapreduce.Reducer; //reduce接口

import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; /定义输入路径

import org.apache.hadoop.mapreduce.lib.input.TextInputFormat; /定义输入路径

import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; /输出路径

import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat; /输出路径

import org.apache.hadoop.util.Tool; //会用到的工具包

import org.apache.hadoop.util.ToolRunner; 

public class sumcount extends Configured implements Tool { 实现map函数

    public static class Map extends Mapper<LongWritable, Text, Text, IntWritable> { 

        public void map(LongWritable key, Text value, Context context) throws IOException,InterruptedException { 

            String line = value.toString(); //file01中的1 2 3等值,转换成string

            StringTokenizer tokenizer = new StringTokenizer(line); //以空格为分隔符,分割出各个value

            while(tokenizer.hasMoreElements()){ //while循环中,将每个value改写成Hadoop能够处理的(key,value)形式,如(0,1)、(1,2)、(0,3......

                String strSorce0 = tokenizer.nextToken(); //依此取每个value

                context.write(new Text("0"), new IntWritable(Integer.parseInt(strSorce0))); //写成key,value)形式

                if(tokenizer.hasMoreElements())

                {

                 String strSorce1 = tokenizer.nextToken(); 

                    context.write(new Text("1"), new IntWritable(Integer.parseInt(strSorce1))); //因为只配置了两台从属机器,所以我把奇数数字放到了slave1机器上去运行加法,把偶数数字放到了slave2机器上去运行加法,实际中可以根据key值自动分配,相同key值得肯定放到同一台机器上运行,同一机器上也可以放不同key值得value

                }

            } 

<
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值