java多个mapreduce_通过Maven管理多个MapReduce项目

本文介绍了如何配置Maven环境,并在Eclipse中使用Maven管理多个MapReduce项目。通过创建Maven项目,配置pom.xml文件,添加依赖,实现了MapReduce程序的自动构建和管理。同时,展示了如何通过ProgramDriver类来运行和管理多个MapReduce任务,包括WordCount和WordCount2。最后,演示了如何在Hadoop集群上运行这些项目。
摘要由CSDN通过智能技术生成

1. 配置Maven环境

首先检查Windows是否配置了maven,进入cmd命令行,输入mvn -version命令,如果出现下图所示的 情形则表示满意配置maven。

2717c5e922850b848c82e2b228923e00.png

从浏览器进入maven官网,下载maven压缩包:

fe8bb4d95cc1671e119bf2ba7d4e5c62.png

进入环境变量配置页面,新建一个MAVEN_HOME变量,变量值为刚才解压的路径(进入能看到bin文件夹的路径)。

b18760c60e3543fd8abd20223de3a12a.png

然后,在Path变量下添加MAVEN_HOME变量。

23b584061bdb98570547b01dfb757bae.png

注意:老版本Windows直接在变量后面加上分号,然后加上%MAVEN_HOME%\bin。

回到命令行,再输入mvn -version,如果出现下图所示的情形则表明配置成功。

925a6f994a727597378b631cfd8b5acc.png

2. 在Eclipse中配置Maven

进入Eclipse,然后Window->Preferences->Maven,首先关联Maven安装路径待eclipse.

d543b7fa8d608ded078da27bb326455f.png

然后配置settings.xml文件,下面的本地库保存路径可以自定义(一般默认就好)。

a8cb830c8c331b4945c543ccb10342b1.png

3. 使用Maven管理多个MapReduce项目

首先新建一个maven项目。

7ec5f8982e3e655511165428229d02fe.png

0e6a3acee6139a38a5bcfd424bc1bbbf.png

cee323d56c3d6d4a5d9ac0b0bdf5d9ca.png

0304764556c3bf709dca6b55961328e1.png

*(该图和我最后的名称不同,因为修改过,不过不影响,按照你自己的来即可)

此时,WordCount.java类肯定是一片红,有很多报错,这是因为我们目前还没有引入所需要的jar文件。接下来是通过Maven框架引入所依赖的jar文件,这和之前我们直接导入然后Build Path的方法不同。我们现在使用Maven框架来进行管理,我们只需要在pom.xml文件中写入以下内容就可以实现jar文件的自动下载和管理。配置完后保存文件,然后Maven会自动下载好所需要的jar文件,报错也都会给解决掉。

pom.xml

4.0.0

//下面两行改为自己新建项目时的Id

com.hadoop

maven

1.0-SNAPSHOT

jar

maven

http://maven.apache.org

UTF-8

2.6.0

junit

junit

3.8.1

test

jdk.tools

jdk.tools

1.8        //改成自己对于的JDK版本号

system

${JAVA_HOME}/lib/tools.jar

org.apache.hadoop

hadoop-common

${hadoop.version}

org.apache.hadoop

hadoop-hdfs

${hadoop.version}

org.apache.hadoop

hadoop-client

${hadoop.version}

org.apache.maven.plugins

maven-shade-plugin

2.4.1

package

shade

com.hadoop.mavenPro.MyDriver      //根据自己的项目路径修改

false    //该句很关键,必须配置为false

接下来是调试Maven项目中的MapReduce程序。

在右键WordCount类选择:Run as->Run Configuration。

搜索主类:

a338b552b7add317a36c87872b99f144.png

注意:如果搜不到对应类,请将Search上面的Project选择为自己所新建的项目。

设置输入输出路径

38bc91e6b2be9799975039241144ebb1.png

然后点击运行。

运行结果如下:

2ea894a0a6eb76a088d499a429aa3ca0.png

输出目录如下

569d649e4c951a7bdecc09ad92eeb298.png

58b1fb28e8edaafe01d457d08841ee43.png

那么,Maven如何管理多个MapReduce程序呢?

我们再新建一个MapReduce程序,于是我又新建了一个2.0版本的WordCount类WordCount2.java。然后配置方法同上,只是输出路径要修改一下。

ba68fa55278667f765593ba5d3a9280c.png

运行结果如下

d156906b9ca38a48885cc2977bd37dc9.png

eed1b4064010338192bd111e3ec92cdf.png

根据以上的本地调试证明两个MapReduce程序都没有问题,以下就是多个MapReduce程序的管理。

Maven是通过ProgramDriver类来进行管理的。首先我们先新建一个MyDriver类,代码如下:

MyDriver.java

package com.hadoop.mavenPro;

import org.apache.hadoop.util.ProgramDriver;/**

* @author Zimo

**/

public classMyDriver {public static voidmain(String argv[]){int exitCode = -1;

ProgramDriver pgd= newProgramDriver();try{

pgd.addClass("wordcount", WordCount.class,                         //设置项目别名"A map/reduce program that counts the words in the input files.");   //添加项目描述

pgd.addClass("wordcount2", WordCount2.class,"A map/reduce program that counts the words in the input files.");

exitCode=pgd.run(argv);

}catch(Throwable e){

e.printStackTrace();

}

System.exit(exitCode);

}

}

通过cmd命令行打包项目:进入项目路径->clean->package。

326f8cca322b6aecc6b8fc0bb400be1b.png

3acabf605e83cdbeed9d0009efce8c94.png

然后回到Eclipse,右键项目刷新一下,target目录下也出现了相应的jar包了,可以直接上传到Hadoop集群运行。

09ece66f50543630d7cf446ae1cb92f9.png

然后登陆到Hadoop集群并启动。

[hadoop@centpy ~]$ cd $HADOOP_HOME //进入Hadoop路径

[hadoop@centpy hadoop-2.6.0]$ pwd/usr/hadoop/hadoop-2.6.0[hadoop@centpy hadoop-2.6.0]$ sbin/start-all.sh //启动集群

This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh

Starting namenodes on [centpy]

centpy: starting namenode, logging to/usr/hadoop/hadoop-2.6.0/logs/hadoop-hadoop-namenode-centpy.outcentpy: starting datanode, logging to/usr/hadoop/hadoop-2.6.0/logs/hadoop-hadoop-datanode-centpy.outStarting secondary namenodes [0.0.0.0]0.0.0.0: starting secondarynamenode, logging to /usr/hadoop/hadoop-2.6.0/logs/hadoop-hadoop-secondarynamenode-centpy.outstarting yarn daemons

starting resourcemanager, logging to/usr/hadoop/hadoop-2.6.0/logs/yarn-hadoop-resourcemanager-centpy.outcentpy: starting nodemanager, logging to/usr/hadoop/hadoop-2.6.0/logs/yarn-hadoop-nodemanager-centpy.out[hadoop@centpy hadoop-2.6.0]$ jps2113NameNode2643NodeManager2212DataNode2794Jps2542ResourceManager2399 SecondaryNameNode

新建一个文件夹用于该项目文件的存放。

[hadoop@centpy hadoop-2.6.0]$ hadoop fs -mkdir /maven

[hadoop@centpy hadoop-2.6.0]$hadoop fs -ls /Found7items

drwxr-xr-x - hadoop hadoop 0 2018-04-14 14:20 /hdfsOutput

drwxr-xr-x - hadoop supergroup 0 2018-04-25 09:37 /maven

drwxrwxrwx- hadoop supergroup 0 2018-04-13 22:10 /phone

drwxr-xr-x - hadoop hadoop 0 2018-04-14 14:43 /test

drwx------ - hadoop hadoop 0 2018-04-13 22:10 /tmp

drwxr-xr-x - hadoop hadoop 0 2018-04-14 14:34 /weather

drwxr-xr-x - hadoop hadoop 0 2018-04-14 15:04 /weibo

上传一个输入文件到/maven。

[hadoop@centpy hadoop-2.6.0]$ vi word.txt             //新建一个文件作为输入文件

hadoop maven

hadoop maven

hadoop maven

[hadoop@centpy hadoop-2.6.0]$ hadoop fs -put word.txt /maven //将输入文件放到HDFS中

[hadoop@centpy hadoop-2.6.0]$ hadoop fs -ls /maven

Found1items-rw-r--r-- 1 hadoop supergroup 39 2018-04-25 09:43 /maven/word.txt

上传项目jar包

[hadoop@centpy hadoop-2.6.0]$ rz //上传之前打包的jar文件

[hadoop@centpy hadoop-2.6.0]$ ls

bin lib libhadoop.so.1.0.0LICENSE.txt sbin word.txt

data libexec libhadooputils.a logs share

etc libhadoop.a libhdfs.a maven-1.0-SNAPSHOT.jar Temperature.jar

include libhadooppipes.a libhdfs.so NOTICE.txt WeiboCount.jar

jar libhadoop.so libhdfs.so.0.0.0 README.txt WordCount.jar

运行项目

[hadoop@centpy hadoop-2.6.0]$hadoop jar maven-1.0-SNAPSHOT.jar wordcount /maven/word.txt /maven/output //运行程序//由于pom.xml中配置了主类,出现可以直接找到Driver类,所以不用再像以前一样写全包路径,直接写Driver类中的项目别名就行了!

18/04/25 10:35:02 INFO client.RMProxy: Connecting to ResourceManager at /0.0.0.0:8032

18/04/25 10:35:03 WARN mapreduce.JobSubmitter: Hadoop command-line option parsing not performed. Implement the Tool interface and execute your application with ToolRunner to remedy this.18/04/25 10:35:14 INFO input.FileInputFormat: Total input paths to process : 1

18/04/25 10:35:14 INFO mapreduce.JobSubmitter: number of splits:1

18/04/25 10:35:15 INFO mapreduce.JobSubmitter: Submitting tokens forjob: job_1524619938432_000118/04/25 10:35:15INFO impl.YarnClientImpl: Submitted application application_1524619938432_000118/04/25 10:35:15 INFO mapreduce.Job: The url to track the job: http://centpy:8088/proxy/application_1524619938432_0001/

18/04/25 10:35:15INFO mapreduce.Job: Running job: job_1524619938432_000118/04/25 10:35:41 INFO mapreduce.Job: Job job_1524619938432_0001 running in uber mode : false

18/04/25 10:35:41 INFO mapreduce.Job: map 0% reduce 0%

18/04/25 10:35:52 INFO mapreduce.Job: map 100% reduce 0%

18/04/25 10:36:04 INFO mapreduce.Job: map 100% reduce 100%

18/04/25 10:36:05INFO mapreduce.Job: Job job_1524619938432_0001 completed successfully18/04/25 10:36:05 INFO mapreduce.Job: Counters: 49File System Counters

FILE: Number of bytes read=31FILE: Number of bytes written=211407FILE: Number of read operations=0FILE: Number of large read operations=0FILE: Number of write operations=0HDFS: Number of bytes read=137HDFS: Number of bytes written=17HDFS: Number of read operations=6HDFS: Number of large read operations=0HDFS: Number of write operations=2Job Counters

Launched map tasks=1Launched reduce tasks=1Data-local map tasks=1Total time spent by all mapsin occupied slots (ms)=8939Total time spent by all reducesin occupied slots (ms)=6521Total time spent by all map tasks (ms)=8939Total time spent by all reduce tasks (ms)=6521Total vcore-seconds taken by all map tasks=8939Total vcore-seconds taken by all reduce tasks=6521Total megabyte-seconds taken by all map tasks=9153536Total megabyte-seconds taken by all reduce tasks=6677504Map-Reduce Framework

Map input records=3Map output records=6Map output bytes=63Map output materialized bytes=31Input split bytes=98Combine input records=6Combine output records=2Reduce input groups=2Reduce shuffle bytes=31Reduce input records=2Reduce output records=2Spilled Records=4Shuffled Maps=1Failed Shuffles=0Merged Map outputs=1GC time elapsed (ms)=283CPU time spent (ms)=3120Physical memory (bytes) snapshot=302731264Virtual memory (bytes) snapshot=4132818944Total committed heap usage (bytes)=161746944Shuffle Errors

BAD_ID=0CONNECTION=0IO_ERROR=0WRONG_LENGTH=0WRONG_MAP=0WRONG_REDUCE=0File Input Format Counters

Bytes Read=39File Output Format Counters

Bytes Written=17

输出结果可以从浏览器进入文件系统查看。

2e3b159bb2cb3cb9ebcf974678f76908.png

同样,运行我们的2.0版本的WordCount程序只需要将运行命令中的wordcount修改为wordcount2即可。

a7f2fd2626940630c70e6747f61bbc85.png

运行后文件系统中也出现了结果目录

acc2114353b854a92411f8871cc2f7de.png

0fede3716a5f9acade1f3c440a764266.png

到此,通过Maven框架管理多个MapReduce项目的步骤就到此结束了,大家可以多建几个MapReduce项目进行进一步测试。

以上就是博主为大家介绍的这一板块的主要内容,这都是博主自己的学习过程,希望能给大家带来一定的指导作用,有用的还望大家点个支持,如果对你没用也望包涵,有错误烦请指出。如有期待可关注博主以第一时间获取更新哦,谢谢!

版权声明:本文为博主原创文章,未经博主允许不得转载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值