溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Eclipse+Maven構建Hadoop項目的方法步驟

發布時間:2020-09-05 06:52:35 來源:腳本之家 閱讀:525 作者:Eric Chan 欄目:編程語言

Maven 翻譯為”專家”、”內行”,是 Apache 下的一個純 Java 開發的開源項目?;陧椖繉ο竽P?Project Object Model 縮寫:POM)概念,Maven利用一個中央信息片斷能管理一個項目的構建、報告和文檔等步驟。Maven 是一個項目管理工具,可以對 Java 項目進行構建、依賴管理。

在開發一些大型項目的時候,需要用到各種各樣的開源包jar,為了方便管理及加載jar,使用maven開發項目可以節省大量時間且方便項目移動至新的開發環境。

開發環境

  • 系統:MacOS 10.14.1
  • Hadoop:2.7.0
  • Java:1.8.0
  • Eclipse:4.6.2
  • Maven: 3.3.9

Maven安裝

我使用的這個版本的Eclipse已經自帶了Maven插件,不需要在自行安裝,因此我也沒有實際操作,本文就不介紹如何配置。

至于怎么知道自己使用的Eclipse是否自帶有Maven,可以在Eclipse->Preference->Maven->Installations查看是否有Maven及版本號?;蛘咧苯有陆椖坎榭词欠裼蠱aven選項。

Eclipse+Maven構建Hadoop項目的方法步驟 

構建Hadoop環境

創建Maven項目

打開Eclipse,File->new->project,選擇Maven,然后下一步next

Eclipse+Maven構建Hadoop項目的方法步驟

選擇Creat a simple project,然后下一步next

Eclipse+Maven構建Hadoop項目的方法步驟

輸入Group id和artifact id。然后finish。

groupid和artifactId被統稱為“坐標”是為了保證項目唯一性而提出的,如果你要把你項目弄到maven本地倉庫去,你想要找到你的項目就必須根據這兩個id去查找。

groupId一般分為多個段,這里我只說兩段,第一段為域,第二段為公司名稱。域又分為org、com、cn等等許多,其中org為非營利組織,com為商業組織。舉個apache公司的tomcat項目例子:這個項目的groupId是org.apache,它的域是org(因為tomcat是非營利項目),公司名稱是apache,artigactId是tomcat。

比如我創建一個項目,我一般會將groupId設置為cn.snowin,cn表示域為中國,snowin是我個人姓名縮寫,artifactId設置為testProj,表示你這個項目的名稱是testProj,依照這個設置,你的包結構最后是cn.snowin.testProj打頭。(引自 鏈接 )

Eclipse+Maven構建Hadoop項目的方法步驟

完成上述步驟后,就可以在Project Explorer中看到剛剛創建的Maven項目。

Eclipse+Maven構建Hadoop項目的方法步驟 

增加Hadoop依賴

我使用的Hadoop 2.7版本,以下是我的POM配置文件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
 
	<groupId>practice.hadoop</groupId>
	<artifactId>simple-examples</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>
 
	<name>simple-examples</name>
	<url>http://maven.apache.org</url>
 
	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>
 
	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
			<scope>test</scope>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common -->
		<dependency>
			<groupId>org.apache.hadoop</groupId>
			<artifactId>hadoop-common</artifactId>
			<version>2.7.0</version>
		</dependency>
 
		<dependency>
			<groupId>org.apache.hadoop</groupId>
			<artifactId>hadoop-hdfs</artifactId>
			<version>2.7.0</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-client -->
		<dependency>
			<groupId>org.apache.hadoop</groupId>
			<artifactId>hadoop-client</artifactId>
			<version>2.7.0</version>
		</dependency>
 		
 		<dependency>
			<groupId>org.apache.mrunit</groupId>
			<artifactId>mrunit</artifactId>
			<version>1.1.0</version>
			<classifier>hadoop2</classifier>
			<scope>test</scope>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-mapreduce-client-core -->
		<dependency>
			<groupId>org.apache.hadoop</groupId>
			<artifactId>hadoop-mapreduce-client-core</artifactId>
			<version>2.7.0</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-yarn-api -->
		<dependency>
			<groupId>org.apache.hadoop</groupId>
			<artifactId>hadoop-yarn-api</artifactId>
			<version>2.7.0</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-auth -->
		<dependency>
			<groupId>org.apache.hadoop</groupId>
			<artifactId>hadoop-auth</artifactId>
			<version>2.7.0</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-minicluster -->
		<dependency>
			<groupId>org.apache.hadoop</groupId>
			<artifactId>hadoop-minicluster</artifactId>
			<version>2.7.0</version>
			<scope>test</scope>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-mapreduce-client-jobclient -->
		<dependency>
			<groupId>org.apache.hadoop</groupId>
			<artifactId>hadoop-mapreduce-client-jobclient</artifactId>
			<version>2.7.0</version>
			<scope>provided</scope>
		</dependency>
 
	</dependencies>
</project>

在Project Explorer中右鍵該項目,選擇build project,Maven就會根據POM.xml配置文件下載所需要的jar包。

Eclipse+Maven構建Hadoop項目的方法步驟

稍等一段時間后,就可以看到Maven Dependencies中已經下載好的jar包。

Eclipse+Maven構建Hadoop項目的方法步驟 

hadoop配置文件

運行 MapReduce 程序前,務必將 /usr/local/Cellar/hadoop/2.7.0/libexec/etc/hadoop 中將有修改過的配置文件(如偽分布式需要core-site.xml 和 hdfs-site.xml),以及log4j.properties復制到 src/main/resources/

Eclipse+Maven構建Hadoop項目的方法步驟

MapReduce實例—WordCount

src/main/java/ 路徑下,創建java文件,代碼如下

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

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;
import org.apache.hadoop.util.GenericOptionsParser;

public class WordCount {

	public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable> {

		/**
		 * LongWritable, IntWritable, Text 均是 Hadoop 中實現的用于封裝 Java
		 * 數據類型的類,這些類實現了WritableComparable接口,
		 * 都能夠被串行化從而便于在分布式環境中進行數據交換,你可以將它們分別視為long,int,String 的替代品。
		 */
		private final static IntWritable one = new IntWritable(1); // 值為1
		private Text word = new Text();

		public void map(Object key, Text value, Context context) throws IOException, InterruptedException {
			StringTokenizer itr = new StringTokenizer(value.toString()); // 對字符串進行切分
			while (itr.hasMoreTokens()) {
				word.set(itr.nextToken());
				context.write(word, one); 
			}
		}
	}

	public static class IntSumReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
		private IntWritable result = new IntWritable();

		public void reduce(Text key, Iterable<IntWritable> values, Context context)
				throws IOException, InterruptedException {
			int sum = 0;
			for (IntWritable val : values) {
				sum += val.get();
			}
			result.set(sum);
			context.write(key, result);
		}
	}

	public static void main(String[] args) throws Exception {
		Configuration conf = new Configuration();
    conf.addResource("classpath:/hadoop/core-site.xml");
    conf.addResource("classpath:/hadoop/hdfs-site.xml");
    conf.addResource("classpath:/hadoop/mapred-site.xml");
//		String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
		String[] otherArgs = {"/input", "/output"};
		if (otherArgs.length != 2) {
			System.err.println("Usage: wordcount <in> <out>");
			System.exit(2);
		}
		Job job = new Job(conf, "word count");
		job.setJarByClass(WordCount.class);
		job.setMapperClass(TokenizerMapper.class);
		job.setCombinerClass(IntSumReducer.class);
		job.setReducerClass(IntSumReducer.class);
		job.setOutputKeyClass(Text.class);
		job.setOutputValueClass(IntWritable.class);
		FileInputFormat.setInputDirRecursive(job, true);
		FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
		FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
		System.exit(job.waitForCompletion(true) ? 0 : 1);
	}

}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女