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. 【转】C# 对sqlite基本操作,带批量插入

    原文地址:https://download.csdn.net/download/mic_gary/10154869 public class SQLiteHelper { //数据库连接字符串 pub ...

  2. 你的ThreadLocal线程安全么

    想必很多小伙伴们对ThreadLocal并不陌生,ThreadLocal叫做线程本地变量,也就是ThreadLocal为变量在每个线程中都创建了一个副本,每个线程可以访问自己内部的副本变量.那么,我们 ...

  3. 删除list集合中某些数据

    去除list集合中不符合条件的数据 List<DictVo> applyStateList = SingletonHoldResource.getInstance().getList(Fr ...

  4. libevent笔记5:水位watermarks

    bufferevent中提供了对读写回调的触发条件及最大缓存长度的设置,即低高水位: 低水位:是读写回调函数的最低触发数据长度,当输入/输出缓存区中的数据长度小于低水位时,读/写回调函数不会被触发: ...

  5. HDFS命令行及JAVA API操作

    查看进程 jps 访问hdfs: hadoop-root:50070 hdfs bash命令: hdfs dfs <1>   -help:  显示命令的帮助的信息 <2>  - ...

  6. SuperMemo

    SuperMemo Your friend, Jackson is invited to a TV show called SuperMemo in which the participant is ...

  7. 【java】获取客户端访问的公网ip和归属地

    import com.alibaba.druid.support.json.JSONUtils; import org.thymeleaf.util.StringUtils; import javax ...

  8. phpcms新建模板页教程

    phpcms新建模板页教程1 直接去template文件夹里的复制的模板页 比方说list1.html2 去后台 界面模板风格 default 默认模板 点击详情列表 找到list1.htm 设置中文 ...

  9. ps 简单使用 ----- 将图片静态图片制作成动图

    1. 准备好你需要静态图片  放到文件夹中 2.打开ps 软件    将右上角切换为   动感 3.观察下方时间轴   点击加号   将图片导入 按住shift  选择图片 4.切换为帧格式 选择循环 ...

  10. nacos配置中心demo

    地址: https://www.cnblogs.com/LUA123/p/10656079.html (非常好的实例)