Hadoop 实操(二)使用IDEA编写第一个MapReduce程序

Hadoop 实操(二)使用IDEA编写第一个MapReduce程序
一、IDEA部分:
1、打开idea,新建项目 File->New->Project
2、在弹出的界面选择JDK,我用的IDEA版本是2019.3.1的,自带JDK是11,我安装了1.8,所以这里我选择的是1.8。
在这里插入图片描述
3、为项目起名
在这里插入图片描述
4、因为我配置了maven,所以我这直接在pom文件里添加了hadoop的依赖。

<repositories>
    <repository>
        <id>nexus-aliyun</id>
        <name>nexus-aliyun</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
</repositories>
<dependencies>
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-hdfs</artifactId>
        <version>2.9.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-common</artifactId>
        <version>2.9.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-yarn-common</artifactId>
        <version>2.9.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-mapreduce-client-common</artifactId>
        <version>2.9.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-auth</artifactId>
        <version>2.9.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.lucene</groupId>
        <artifactId>lucene-analyzers-common</artifactId>
        <version>7.3.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.lucene</groupId>
        <artifactId>lucene-core</artifactId>
        <version>7.3.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.lucene</groupId>
        <artifactId>lucene-analyzers-icu</artifactId>
        <version>7.3.0</version>
    </dependency>
    <dependency>
        <groupId>jfree</groupId>
        <artifactId>jfreechart</artifactId>
        <version>1.0.13</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <artifactId>maven-dependency-plugin</artifactId>
            <configuration>
                <excludeTransitive>false</excludeTransitive>
                <stripVersion>true</stripVersion>
                <outputDirectory>./lib</outputDirectory>
            </configuration>

        </plugin>
    </plugins>
</build>

4、创建三个类 ,Map类、Reduce类、入口类。

Map类 类名:Map

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;
public class Map extends Mapper<LongWritable,Text,Text,IntWritable> {
    public void map(LongWritable key,Text value,Context context)throws IOException,InterruptedException{
        String line = value.toString();//读取一行数据
        String str[] = line.split("");//因为英文字母是以“ ”为间隔的,因此使用“ ”分隔符将一行数据切成多个单词并存在数组中
        for(String s :str){//循环迭代字符串,将一个单词变成<key,value>形式,及<"hello",1>
            context.write(new Text(s),new IntWritable(1));
        }
    }
}

Reduce类 类名:WordcountReduce

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.io.Text;
import java.io.IOException;
public class WordcountReduce extends Reducer<Text,IntWritable,Text,IntWritable> {
    public void reduce(Text key, Iterable<IntWritable> values,Context context)throws IOException,InterruptedException{
        int count = 0;
        for(IntWritable value: values) {
            count++;
        }
        context.write(key,new IntWritable(count));
    }
}

入口类 类名:WordCount

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.GenericOptionsParser;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
public class WordCount {
    public static void main(String[] args)throws Exception{
        Configuration conf = new Configuration();
        //获取运行时输入的参数,一般是通过shell脚本文件传进来。
        String [] otherArgs = new         GenericOptionsParser(conf,args).getRemainingArgs();
        if(otherArgs.length < 2){
            System.err.println("必须输入读取文件路径和输出路径");
            System.exit(2);
        }
        Job job = new Job();
        job.setJarByClass(WordCount.class);
        job.setJobName("wordcount app");
        //设置读取文件的路径,都是从HDFS中读取。读取文件路径从脚本文件中传进来
        FileInputFormat.addInputPath(job,new Path(args[0]));
        //设置mapreduce程序的输出路径,MapReduce的结果都是输入到文件中
        FileOutputFormat.setOutputPath(job,new Path(args[1]));
        //设置实现了map函数的类
        job.setMapperClass(Map.class);
        //设置实现了reduce函数的类
        job.setReducerClass(WordcountReduce.class);
        //设置reduce函数的key值
        job.setOutputKeyClass(Text.class);
        //设置reduce函数的value值
        job.setOutputValueClass(IntWritable.class);
        System.exit(job.waitForCompletion(true) ? 0 :1);
    }
}

5、打jar包 File->Project Structure ,然后如图
在这里插入图片描述
选择以后在弹出的窗口选择刚刚写好的Word Count类
在这里插入图片描述
然后开始打jar包
在这里插入图片描述
在这里插入图片描述
点击上图的“Build”之后就会生成一个jar包。jar的位置看下图,依次点击File->Project Structure->Artifacts就会看到如下的界面:
在这里插入图片描述
二、Linux下操作
1、启动FDFS
#start-all.sh
2、打开WinSCP,使用方法可以参考我上一篇文章。把刚才打好的jar包直接复制到root目录下。
在这里插入图片描述
3、在hdfs上创建目录,创建一个txt.因为我之前创建过目录,所以直接就创建txt了。创建目录的方法请看上一篇。/data/wordcount是我之前创建的目录。

在这里插入图片描述
4、执行
在这里插入图片描述
执行成功以后的结果应该是:
在这里插入图片描述
5、运行成功后在hadoop集群中的hdfs文件系统中会看到一个output4的文件夹。使用“hadoop fs -ls /”命令查看
在这里插入图片描述
6、在output4文件夹中有两个文件,分别是_SUCCESS和part-r-00000,part-r-00000记录着mapreduce的执行结果,使用hadoop fs -cat /wordcount_output/part-r-00000查看part-r-00000的内容:
在这里插入图片描述
注:还有一种shell文件的方法,请参考https://www.cnblogs.com/airnew/p/9540982.html

  • 5
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Hadoop编写MapReduce程序是指使用Hadoop框架来MapReduce算法。MapReduce是一种分布式计算模型,它将大规模数据集分成小的数据块,然后在分布式计算集群上并行处理这些数据块。MapReduce程序由两个部分组成:Map和Reduce。 Map阶段:Map阶段将输入数据分成小的数据块,然后对每个数据块进行处理,生成键值对。Map阶段的输出结果是一个键值对列表。 Reduce阶段:Reduce阶段将Map阶段输出的键值对列表进行合并,生成最终的输出结果。Reduce阶段的输出结果是一个键值对列表。 编写MapReduce程序的步骤如下: 1. 定义Map函数:Map函数将输入数据分成小的数据块,然后对每个数据块进行处理,生成键值对。 2. 定义Reduce函数:Reduce函数将Map函数输出的键值对列表进行合并,生成最终的输出结果。 3. 定义输入格式:定义输入数据的格式,例如文本文件、CSV文件等。 4. 定义输出格式:定义输出数据的格式,例如文本文件、CSV文件等。 5. 配置Hadoop环境:配置Hadoop环境,包括Hadoop的安装、配置、启动等。 6. 编写MapReduce程序编写MapReduce程序,包括Map函数、Reduce函数、输入格式、输出格式等。 7. 运行MapReduce程序:将编写好的MapReduce程序提交到Hadoop集群上运行。 8. 查看输出结果:查看MapReduce程序的输出结果,进行调试和优化。 以上就是Hadoop编写MapReduce程序的基本步骤。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值