MapReduce工程(IDEA)

hadoop

1. maven工程

1.1 创建maven工程

  1. 选择创建工程。

创建工程
  1. 选择Maven工程,不选模板。

maven选项
  1. 填好坐标,选择项目存放地址,创建工程。

坐标

1.2 修改配置文件

  1. 修改pom.xml,mainClass选择自己的入口类如下:
<?xml version="1.0" encoding="UTF-8"?>
<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>per.hao</groupId>
<artifactId>MapReduceTest</artifactId>
<version>1.0</version> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<hadoop.version>2.7.2</hadoop.version>
</properties> <dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>RELEASE</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.8.2</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>${hadoop.version}</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>${hadoop.version}</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>${hadoop.version}</version>
</dependency>
</dependencies> <!-- 构建打包插件, mainClass选择自己的入口类 -->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<!-- 指定入口函数 -->
<mainClass>per.hao.mapreduce.MRMainClass</mainClass>
<!-- 是否添加依赖的jar路径配置 -->
<addClasspath>false</addClasspath>
<!-- 依赖的jar包存放位置,和生成的jar放在同一级目录下 -->
<!--<classpathPrefix>lib/</classpathPrefix>-->
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>per.hao.mapreduce.MRMainClass</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build> </project>
  1. 在项目的src/main/resources目录下,新建一个文件,命名为log4j.properties,在文件中填入
log4j.rootLogger=INFO, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=target/spring.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n

1.3 Mapper类

package per.hao.mapreduce.wordcount;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper; import java.io.IOException; /**
* 输入:
* 行读取偏移量:LongWritable
* 每行内容:Text
* 输出:
* 单词:Text
* 单词计数:IntWritable
* */
public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable> { private Text k = new Text();
private static final IntWritable ONE = new IntWritable(1); @Override
protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
// 获取一行数据
String line = value.toString(); // 切分
String[] words = line.split("\\s"); // 输出
for (String word : words) {
k.set(word);
context.write(k, ONE);
}
}
}

1.4 Reduces类

package per.hao.mapreduce.wordcount;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer; import java.io.IOException; public class WordCountReduce extends Reducer<Text, IntWritable, Text, IntWritable> { private int sum;
private IntWritable v = new IntWritable(); @Override
protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
// 累加求和
sum = 0;
for (IntWritable count : values) {
sum += count.get();
} // 输出
v.set(sum);
context.write(key, v);
}
}

1.5 Driver类

package per.hao.mapreduce.wordcount;

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.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; import java.io.IOException; public class WordCountDriver {
public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
// 获取配置并根据配置获取任务实例
Configuration conf = new Configuration();
Job job = Job.getInstance(conf); //设置jar加载路径
job.setJarByClass(WordCountDriver.class); // 设置Mapper、Reduce类
job.setMapperClass(WordCountMapper.class);
job.setReducerClass(WordCountReduce.class); // 设置Mapper输出
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(IntWritable.class); // 设置最终输出
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class); // 设置输入输出路径
if (args.length < 2) {
System.out.println("需要指定输入输出路径");
System.exit(1);
} else {
FileInputFormat.setInputPaths(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
} // 提交任务
boolean result = job.waitForCompletion(true);
System.exit(result ? 0 : 1); }
}

1.6 入口类

package per.hao.mapreduce;

import org.apache.hadoop.util.ProgramDriver;
import per.hao.mapreduce.wordcount.WordCountDriver; public class MRMainClass {
public static void main(String[] args) {
int exitCode = -1;
ProgramDriver pd = new ProgramDriver(); try {
pd.addClass("wordcount", WordCountDriver.class, "我的MapReduce测试程序-WordCount"); exitCode = pd.run(args);
} catch (Throwable throwable) {
throwable.printStackTrace();
} System.exit(exitCode);
}
}

1.7 测试

  1. 打包jar包
mvn clean test package

打包好的jar
  1. 上传jar到服务器

  2. 创建文件word.txt,内容如下:

export	HADOOP_CLUSTER_NAME	myhadoop
export HADOOP_TMP_DIR hdata hadoop
hdata export
HADOOP_TMP_DIR myhadoop export
  1. 创建文件到指定路径
# 创建路径
/opt/cluster/hadoop/bin/hadoop fs -mkdir -p /mapreduce/test/input/20180702;
# 上传
/opt/cluster/hadoop/bin/hadoop fs -put ./word.txt /mapreduce/test/input/20180702;
  1. 测试运行wordcount
/opt/cluster/hadoop/bin/hadoop jar ./MapReduceTest-1.0.jar wordcount /mapreduce/test/input/20180702 /mapreduce/test/output/20180702;
  1. 结果

输出结果

2. 普通工程

注: 相比maven的通过pom.xml配置文件配置依赖与打包;普通工程 手动添加依赖打包

2.1 添加依赖

  1. 点击File -> Project Structure
  2. 点击Modules -> 选择项目 -> Dependencies -> JARs or dir…

依赖添加界面

2.2 打包

  1. 点击File -> Project Structure。
  2. 依次点击图片所示蓝色部分。

添加打包
  1. 选择mainClass与依赖打包选项,点击OK。

打包选项

配置完成
  1. 选择打包,弹出窗口选择build,rebuild…

打包
  1. 输出目录,找到输出的jar

输出目录

输出的jar

MapReduce工程(IDEA)的更多相关文章

  1. 实训任务03: 使用Eclipse创建MapReduce工程

    实训任务03: 使用Eclipse创建MapReduce工程 实训1: win7中使用Eclipse创建MapReduce工程 实训2:Centos 6.8系统中安装Eclipse 一.下载Eclip ...

  2. intelij创建MapReduce工程

    1.创建一个maven工程 2.POM文件 <?xml version="1.0" encoding="UTF-8"?><project xm ...

  3. 关于在eclipse下的mapreduce工程打包成jar包的问题(包含第三方jar包)

    这个问题也是在开发项目中经常遇到的一个问题,网上提供了很多方法,但是我发现很多并不适用,这里推荐两种方法,一种肯定没问题,就是比较麻烦,另一种是适用FatJar来打包,但是我没成功,原因估计出在ubu ...

  4. ubuntu14.04 Hadoop单机开发环境搭建MapReduce项目

    Hadoop官网:http://hadoop.apache.org/ 目前最新的版本是Hadoop 3.0.0-alpha1前提:java 1.6 版本以上 首先从官网下载压缩包(hadoop-3.0 ...

  5. 实训任务04 MapReduce编程入门

    实训任务04 MapReduce编程入门 1.实训1:画图mapReduce处理过程 使用有短句“A friend in need is a friend in deed”,画出使用MapReduce ...

  6. 指导手册05:MapReduce编程入门

    指导手册05:MapReduce编程入门   Part 1:使用Eclipse创建MapReduce工程 操作系统: Centos 6.8, hadoop 2.6.4 情景描述: 因为Hadoop本身 ...

  7. 通过mapreduce把mysql的数据读取到hdfs

    前面讲过了怎么通过mapreduce把mysql的一张表的数据放到另外一张表中,这次讲的是把mysql的数据读取到hdfs里面去 具体怎么搭建环境我这里就不多说了.参考 通过mapreduce把mys ...

  8. Google MapReduce到底解决什么问题?

    很多时候,定义清楚问题比解决问题更难. 什么是MapReduce? 它不是一个产品,而是一种解决问题的思路,它有多个工程实现,Google在论文中也给出了它自己的工程架构实现. MapReduce这个 ...

  9. windows下eclipse远程连接hadoop集群开发mapreduce

    转载请注明出处,谢谢 2017-10-22 17:14:09  之前都是用python开发maprduce程序的,今天试了在windows下通过eclipse java开发,在开发前先搭建开发环境.在 ...

随机推荐

  1. Android Studio 之 ROM【3】,LiveData+ViewModel+AsyncTask+Repository+RecyclerView

    教程地址:https://www.bilibili.com/video/av65180549 源码地址:https://github.com/longway777/Android-2019-Tutor ...

  2. GPG实践

    遇见的问题 安装之后没有显示如教程中的 直接提示真实姓名于电子邮件的地址 公钥与密钥 设置吊销证书

  3. 福州大学软件工程1916|W班 第10、11次作业成绩排名

    作业链接 项目Alpha冲刺(团队) 事后诸葛亮(团队) 评分细则 博客评分标准 本次作业包括现场Alpha答辩评分(映射总分为100分)+博客分(总分130分)+贡献度得分,其中博客分由以下部分组成 ...

  4. Python 3.X 练习集100题 02

    企业发放的奖金根据利润提成.利润(I):低于或等于10万元时,奖金可提10%:高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%:20万到40万之间时,高 ...

  5. POJ-最大连续子序列和

    给定一个整数序列,找到一个具有最大和的连续子序列(子序列最少包含一个元素),返回其最大和. 实例输入: -2, 1, -3, 4, -1, 2, 1, -5, 4 实例输出: 6(连续子序列4, -1 ...

  6. git安装和使用配置

    1.简介 Git是一个开源的分布式版本控制系统,能用于快速高效地处理任何或小或大的项目,它是Linus Torvalds为了帮助管理Linux内核开发而开发的一个源码开放的版本控制软件. 2.Linu ...

  7. 红黑树和AVL树的区别(转)

    add by zhj: AVL树和红黑树都是平衡二叉树,虽然AVL树是最早发明的平衡二叉树,但直接把平衡二叉树等价于AVL树,我认为非常不合适. 但很多地方都在这么用.两者的比较如下 平衡二叉树类型 ...

  8. golang ----并发 && 并行

    Go 语言的线程是并发机制,不是并行机制. 那么,什么是并发,什么是并行? 并发是不同的代码块交替执行,也就是交替可以做不同的事情. 并行是不同的代码块同时执行,也就是同时可以做不同的事情. 举个生活 ...

  9. 门控循环单元(GRU)与 LSTM 的区别

    29 November 2019 14:48 GRU is a popular variant of LSTM which replaces the forget gate and the input ...

  10. N-gram理解

    如何来理解这个概率呢? p( i love you) 如果是 =p(i)p(love)p(you) 就是只考虑单词出现的概率本身. 如果是  =p(i)p(love|i)p(you|love)  就是 ...