maven打包hadoop项目(含第三方jar)

 maven打包hadoop项目(含第三方jar)

 

问题背景:

1 写map-reduce程序,用到第三方jar,怎么打包并提交项目到服务器执行。

2 mahout中itembased算法,将uid从string映射为long。

 

我这里实现的具体功能是:

Mahout的itembased算法的数据格式是:uid,vid,score。其中uid和vid必须是数字型(long),score是小数整数都可以。

然而我这里每行记录的字段uid,vid,score,

uid是含有字母。因此我必须把uid从string映射到long。

考虑到速度,就用分布式程序来做这个转换。

此外,还直接调用了mahout里面的一个类

org.apache.mahout.cf.taste.impl.model.MemoryIDMigrator


用Maven创建一个标准化的Java项目

mvn archetype:generate-DarchetypeGroupId=org.apache.maven.archetypes -DgroupId=org.linger.mahout-DartifactId=mahoutProject -DpackageName=org.linger.mahout -Dversion=1.0-DinteractiveMode=false

 

执行mvn clean install初始化项目,注意会自动生成一个pom.xml文件。

 

修改pom.xml,

1 先把junit的去掉。

 

2 在pom.xml添加mahout依赖jar(这里先不研究mahout这些jar依赖怎么得出来的)

         <properties>
                   <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
                   <mahout.version>0.8</mahout.version>
         </properties>
 
         <dependencies>
                   <dependency>
                            <groupId>org.apache.mahout</groupId>
                            <artifactId>mahout-core</artifactId>
                            <version>${mahout.version}</version>
                   </dependency>
                   <dependency>
                            <groupId>org.apache.mahout</groupId>
                            <artifactId>mahout-integration</artifactId>
                            <version>${mahout.version}</version>
                            <exclusions>
                                     <exclusion>
                                               <groupId>org.mortbay.jetty</groupId>
                                               <artifactId>jetty</artifactId>
                                     </exclusion>
                                     <exclusion>
                                               <groupId>org.apache.cassandra</groupId>
                                               <artifactId>cassandra-all</artifactId>
                                     </exclusion>
                                     <exclusion>
                                               <groupId>me.prettyprint</groupId>
                                               <artifactId>hector-core</artifactId>
                                     </exclusion>
                            </exclusions>
                   </dependency>
         </dependencies>



3 pom.xml配置jar打包选项

<build>
    <plugins>
         <plugin>
              <artifactId>maven-assembly-plugin</artifactId>
               <configuration>
                    <archive>
                         <manifest>
                             <mainClass>org.linger.mahout.mapreducer.UserVideoFormat</mainClass>
                         </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
               </configuration>
               <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                         <goals>
                             <goal>single</goal>
                         </goals>
                    </execution>
               </executions>
         </plugin>
    </plugins>
</build>


 

我写的map-reduce代码

package org.linger.mahout.mapreducer;

import java.io.IOException;
import java.util.StringTokenizer;

import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapred.FileInputFormat;
import org.apache.hadoop.mapred.FileOutputFormat;
import org.apache.hadoop.mapred.JobClient;
import org.apache.hadoop.mapred.JobConf;
import org.apache.hadoop.mapred.MapReduceBase;
import org.apache.hadoop.mapred.Mapper;
import org.apache.hadoop.mapred.OutputCollector;
import org.apache.hadoop.mapred.Reporter;
import org.apache.hadoop.mapred.TextInputFormat;
import org.apache.hadoop.mapred.TextOutputFormat;
import org.apache.hadoop.util.GenericOptionsParser;
import org.apache.mahout.cf.taste.impl.model.MemoryIDMigrator;


public class UserVideoFormat {

	 public static class Map extends MapReduceBase implements Mapper<LongWritable, Text, Text, Text> 
	 {
		 	     private Text userId = new Text(); 	
		 	     private Text lefts = new Text(); 
		 	     private MemoryIDMigrator thing2long = new MemoryIDMigrator(); 
		 	      public void map(LongWritable key, Text value, OutputCollector<Text, Text> output, Reporter reporter) throws IOException 
		 	      {
		 	    	  String line = value.toString();
		 	    	  int spliter = line.indexOf(',');
		 	    	  String userStr = line.substring(0, spliter);
		 	    	  String leftsStr = line.substring(spliter+1);
		 	    	   
		 	    	  userId.set(Long.toString(thing2long.toLongID(userStr)));
		 	     	  lefts.set(leftsStr);
				      output.collect(userId, lefts);

		 	      }
	 }
	 
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		JobConf conf = new JobConf(UserVideoFormat.class);
		conf.setJobName("UserVideoFormat");

		
		
	    conf.setOutputKeyClass(Text.class);
		conf.setOutputValueClass(Text.class);
	
	    conf.setMapperClass(Map.class);

	    conf.set("mapred.textoutputformat.separator", ",");
	    
		conf.setInputFormat(TextInputFormat.class);
		conf.setOutputFormat(TextOutputFormat.class);

		String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
		
		FileInputFormat.setInputPaths(conf, new Path(otherArgs[0]));
		FileOutputFormat.setOutputPath(conf, new Path(otherArgs[1]));
		
        
		JobClient.runJob(conf);
	}

}


 

 

执行mvn package打包

在target目录下自动生成mahoutProject-1.0-jar-with-dependencies.jar

 

hadoop jar mahoutProject-1.0-jar-with-dependencies.jarinput output

注意到,由于pom.xml配置中指明该jar包的main函数,所以这里不需要再写明main函数。

否则,一般都会在jar包后面指明main函数。

 

参考资料:

Maven构建Mahout项目

http://blog.fens.me/hadoop-mahout-maven-eclipse/

Hadoop Job使用第三方依赖jar文件

http://shiyanjun.cn/archives/373.html

mahout做推荐时uid,pid为string类型

http://blog.csdn.net/pan12jian/article/details/38703569



本文链接:http://blog.csdn.net/lingerlanlan/article/details/42086623

本文作者:linger


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Maven是一个项目管理工具,它提供了一种简单的方式来管理项目的依赖关系。在使用Maven进行项目开发的过程中,我们经常会遇到引入第三方jar包的需求,从而为项目提供所需的功能。 Maven提供了一种批量安装第三方jar包的功能,可以通过在项目的pom.xml文件中声明依赖关系来实现。首先,我们需要找到所需的第三方jar包的Maven坐标,这通常包括groupId、artifactId和version三个属性。 在pom.xml文件中,我们可以通过在dependencies节点下添加多个dependency节点来声明多个第三方jar包的依赖关系。在每个dependency节点内,我们需要填写对应第三方jar包的groupId、artifactId和version属性。 当我们保存并关闭pom.xml文件后,Maven会自动从中央仓库或私有仓库中下载并安装所需的第三方jar包。这样,我们就可以在项目中直接引用这些jar包,并使用其中的类和方法。 除了在pom.xml文件中声明第三方jar包的依赖关系外,我们还可以使用Maven命令进行批量安装。通过执行"mvn install"命令,Maven会按照pom.xml文件中所声明的依赖关系,自动下载并安装所有的第三方jar包。 总之,Maven是一个非常方便的批量安装第三方jar包工具,通过在项目的pom.xml文件中声明依赖关系,我们可以轻松地管理和安装所需的第三方jar包。这样,我们可以快速、高效地开发自己的项目,节省了手动下载和安装第三方jar包的时间和努力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值