实现MapReduce程序完成行统计

会用到的东西:linux,虚拟机,eclips,jdk1.8,hadoop2.7.4

请根据自己实际情况进行修改,本文仅供参考。

启动Hadoop服务

到hadoop安装目录: cd /home/hadoop/hadoop-2.7.4(自己的安装目录)

启动hadoop集群: sbin/./start-all.sh

查看服务是否启动成功:jps

ee62f635532a4af6b36afce967cfad2f.png

79888e4ebabd4dca98f0b6cb7d8642fb.png

550559eeb03a49668c1510e9dcf44de1.png

d6f8370c41534a76bf2879bcf81a8199.png

打开Eclipse开发工具,新建Maven项目

eclipse设置JDK

打开Eclipse开发工具,选择Eclipse菜单栏windows菜单下的Preference 选项,打开Preference窗口,并选择Java下面的Installed JRE

f50c3a81fee34171bb8f7eecc60a4799.png

点击add按钮,弹出的Add JRE窗口 选择 Standard VM 。

20c3cae8eb224068b93be3ef69fed22c.png

点击 Next 按钮,在弹出的窗口里 ,点击JRE home 后面的 Directory按钮,选择jdk安装的目录

493a3a75a3b644d7ad76b35a3f81f1c6.png

2226a343b3124e9299e8bed402156cc4.png

选择后点击确定,再点击Finish 按钮

0e29ed2ec9634e439117f87e369944de.png

点击apply按钮,再点击Apply and Close,此时Eclipse jdk安装完毕。

新建Maven项目

选择Eclipse菜单栏 File菜单里的New 下的Maven Project 选项

67250cf11f53474db1e68f530eb16d4c.png

点击next,在弹出的窗口中,勾选中Create a simple project 选项

34229adf8b1e4aa995590a3bda8426dc.png

点击Next按钮,在弹出的窗口中,Group id (一般为公司组织名称)填写 :learning ,Artifact Id(项目名称) 填写:MapReduce

b6c0ad0b683b4911866242b51b9a153e.png

点击finish 按钮。

在建好的项目MapReduce上 右键,选择Build Path à Configure Build Path...

659c3375f6154b1fb529ef3e5a6eeddc.png

在弹出的窗口中左边窗口选择Java Build Path,右边选择Libraries 下的JRE System Libray选项后,点击 Edit 按钮

41cd441be9214c25af7fc0981ad4bbdb.png

在弹出的窗口中,选择我们安装的1.8版本的jdk

d04be536a98249bd8585a9d543be5c48.png

点击Finish按钮,然后将设置保存。

再选择左边Java Compiler选项,将右边的Compiler compliance level:  设置为1.8

022c69761fa841a3a237cc5e96701547.png

点击Apply按钮,再点击Apply and Close。

修改pom.xml文件

新建完Maven项目后:pom.xml文件添加内容如下:  

  <properties>

        <hadoop.version>2.7.4</hadoop.version>

  </properties>

   <dependencies>

        <dependency>

          <groupId>org.apache.hadoop</groupId>

          <artifactId>hadoop-client</artifactId>

          <version>${hadoop.version}</version>

        </dependency>

  </dependencies>

  <build>

        <plugins>

            <plugin>

                <artifactId>maven-compiler-plugin</artifactId>

                <version>3.0</version>

                <configuration>

                    <source>1.8</source>

                    <target>1.8</target>

                </configuration>

            </plugin>

            <plugin>

                <groupId>org.apache.maven.plugins</groupId>

                <artifactId>maven-surefire-plugin</artifactId>

                <configuration>

                    <skip>true</skip>

                </configuration>

            </plugin>

        </plugins>

</build>  

43d9411250194528837ab39d5024a12f.png

保存内容,生产文件Maven Dependencies

项目目录结构如下:

235752c002bc4381acf048c0349d44da.png

开发LineCount程序

在src/main/java/下新建 com.learning.mapreduce 包

在src/main/java上点击右键新建Package

424261b3ed644268b9c48aeaafaa5a0c.png

46e2b35e6a954f9aaf914b2589483eba.png

点击Finish按钮(我已经建过了,补个截图)。

在com.learning.mapreduce下新建LineCount class文件

在创建的com.learning.mapreduce 上点击右键选择New à Class 创建一个类,类名叫LineCount

83b61b84f4994d0788742515f837c346.png

a00bcfb1713a498aa1176ea05e26c6b9.png

目录结构如下:

85f03711112e440ab4e660ba367ac5bf.png

LineCount.java文件内容如下:

package com.learning.mapreduce;

import java.io.IOException;

import java.util.Iterator;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.fs.Path;

import org.apache.hadoop.io.IntWritable;

import org.apache.hadoop.io.Text;

import org.apache.hadoop.mapreduce.Job;

import org.apache.hadoop.mapreduce.Mapper;

import org.apache.hadoop.mapreduce.Reducer;

import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;

import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

public class LineCount {

private static final Text LINE_COUNT_KEY = new Text("Total Line ");

private static class Map extends Mapper<Object, Text, Text, IntWritable> {

public static enum FileRecorder {

LineRecorder

}

private static final IntWritable one = new IntWritable(1);

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

context.getCounter(FileRecorder.LineRecorder).increment(1);

context.write(LINE_COUNT_KEY, one);

}

}

 private static class Reduce extends Reducer<Text,IntWritable,Text,IntWritable> {

        public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {

             int sum = 0 ;

             Iterator<IntWritable> it =  values.iterator();

             while(it.hasNext()){

                 sum+=it.next().get();

             }

            context.write(key,new IntWritable(sum));

        }

    }

public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {

 if(args.length!=2){

            System.out.println("Please input 2 params!");

            System.exit(2);

        }  

        Configuration conf = new Configuration();

        Job job = Job.getInstance(conf, "Line Count");

        job.setJarByClass(LineCount.class);

        job.setMapperClass(Map.class);

        job.setReducerClass(Reduce.class);

        job.setMapOutputKeyClass(Text.class);  

        job.setMapOutputValueClass(IntWritable.class);  

        FileInputFormat.addInputPath(job, new Path(args[0]));

        FileOutputFormat.setOutputPath(job, new Path(args[1]));

        System.exit(job.waitForCompletion(true) ? 0 : 1);

}

}

92ea3c7522844aa7aaf633b3e7b1efa5.png

保存

导出jar文件

在MapReduce项目上点击右键,点击“export”

d041034bc4e24ba2822a6962f381910d.png

在弹出的对话框中选择JAR file

995083e429a447afa8a97211a33dbc59.png

点击”Next>”按钮,进入到如下对话框,取消右边的三个选项,并选择jar文件路径

ff5f22fa45664a7eb54eb221bc43c3bd.png

2c7fca3d927340119f58b2ae2a3d469a.png

(我已经做过此操作,补个截图)

点击”Finish“按钮,即可完成到处jar文件,在eclipse-workspace/MapReduce/target目录下可以看到生成的MapReduce.jar文件

b768f2556afe4ddbb08afa6213c8948c.png

jar文件上传到master服务器上

在master服务器上的/home/hadoop目录下新建目录: mapreduce

命令:mkdir /home/hadoop/mapreduce

38f54279231b40bcad0b1a690d99223e.png

将MapReduce.jar文件发送到master服务器上的/home/hadoop/mapreduce目录

xftp连接master服务器,在右框打开/home/hadoop/mapreduce目录,左框打开eclipse-workspace/MapReduce/target目录,将左框的MapReduce.jar文件复制粘贴到右框

f9d3a65afa7746b0b5f42a9c50433858.png

准备测试数据

在master服务器的/home/hadoop/mapreduce目录下新建loaddata1.txt文件

d9dd458c46874075a077a5d0e9b90232.png

67b1755b4654420ab3455fda72c00781.png

将文件上传到hdfs系统

进入hadoop-2.7.4目录下,使用命令bin/hdfs dfs -mkdir在hdfs里新建目录 /input 和 /output,

命令:

cd /home/hadoop/hadoop-2.7.4

bin/hdfs dfs -mkdir /input

bin/hdfs dfs -mkdir /output

9aa012d5ee724a1385abc5e5cfbfb1c1.png

使用命令hdfs dfs -put将loaddata1.txt上传到hdfs /input 目录

520d051dc4b0458b9804a866f28f349e.png

运行LineCount

运行LineCount程序命令:bin/hadoop jar /home/hadoop/mapreduce/MapReduce.jar com.learning.mapreduce.LineCount  /input /output/linecount

查看运行成功之后生成了哪些目录和文件:bin/hdfs dfs -ls -R /output

查看运行的结果:bin/hdfs dfs -cat /output/linecount/part-r-00000

5fd5882e0cbf498fa9b5a1701da08111.png

38d19c9392234bbb91ff6490aacdc2d2.png

95aaedc6d78a4945a62d014a1e396885.png

9c157121443b440c90e48a2192a27a0a.png

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值