mapreduce打包提交执行wordcount案例

news2024/11/17 15:26:36

文章目录

    • 一、源代码
      • 1. WordCountMapper类
      • 2. WordCountReducer类
      • 3. WordCountDriver类
      • 4. pom.xml
    • 二、相关操作和配置
      • 1. 项目打包
      • 2. 带参测试
      • 3. 上传打包后的jar包和测试文档
      • 4. 增大虚拟内存
      • 5.启动集群
      • 6.在hdfs上创建输入文件夹和上传测试文档Hello.txt
      • 7. 利用jar包在hdfs实现文本计数
      • 8. 查看计算统计结果

一、源代码

1. WordCountMapper类

package org.example.wordcounttemplate;

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 WordCountMapper extends Mapper<LongWritable, Text,Text, IntWritable> {

    //新建输出文本对象(输出的key类型)
    private Text text = new Text();
    //新建输出IntWritable对象(输出的value类型)
    private IntWritable intWritable = new IntWritable( 1);


    /**
     * 重写map方法
     * @param key 文本的索引
     * @param value 文本值
     * @param context 上下文对象
     * @throws IOException
     * @throws InterruptedException
     */
    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {

        //获取拆分后的一行文本

        //mysql mysql value value value
        String line = value.toString();

        //根据分隔符进行单词拆分
        String[] words = line.split( " ");

        //循环创建键值对
        for (String word : words){

            //输出key值设置
            text.set (word) ;

            //进行map输出
            //igeek igeek -> <igeek ,1> <igeek,1>
            context.write(text,intWritable);
        }

    }
}

2. WordCountReducer类

package org.example.wordcounttemplate;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

import java.io.IOException;

public class WordCountReducer extends Reducer<Text, IntWritable,Text, IntWritable> {

    //输出value对象
    private IntWritable valueOut = new IntWritable();


    /**
     * 重写reduce方法
     * @param key 单词值
     * @param values 单词出现的次数集合
     * @param context   上下文对象
     * @throws IOException
     * @throws InterruptedException
     */
    @Override
    protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {

        //每个单词出现的次数
        int sum= 0;

        //<igeek,(1,1)>
        for (IntWritable value : values){

        //累计单词出现的数量
            sum += value.get();
        }

        //进行封装
        valueOut.set(sum);

        // reduce输出
        context.write(key, valueOut);


    }
}

3. WordCountDriver类

package org.example.wordcounttemplate;
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;

/**
 * 充当mapreduce任务的客户端,用于提交任务
 */

public class WordCountDriver {
    public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
//        1.获取配置信息,获取job对象实例
        Configuration conf=new Configuration();
        Job job=Job.getInstance(conf);

//        2.关联本Driver得jar路径
        job.setJarByClass(WordCountDriver.class);

//        3.关联map和reduce
        job.setMapperClass(WordCountMapper.class);
        job.setReducerClass(WordCountReducer.class);

//        4.设置map得输出kv类型
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(IntWritable.class);

//        5.设置最终输出得kv类型
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);

//        6.设置输入和输出路径
        FileInputFormat.setInputPaths(job,new Path(args[0]));
        FileOutputFormat.setOutputPath(job,new Path(args[1]));

//        7.提交job
        boolean result=job.waitForCompletion(true);
        System.out.println(result?"任务提交成功":"任务提交失败");

    }


}

4. pom.xml

重点是更改添加打包插件依赖

<plugins>
    <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.6.1</version>
        <configuration>
            <source>1.8</source>
            <target>1.8</target>
        </configuration>
    </plugin>
    <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <configuration>
            <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>

pom.xml文件内容如下:

<?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>org.example</groupId>
  <artifactId>mapreduce_demo</artifactId>
  <version>1.0-SNAPSHOT</version>

  <name>mapreduce_demo</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>

  <dependencies>
    <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-client -->
    <dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-client</artifactId>
      <version>3.1.3</version>
    </dependency>

  </dependencies>
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.6.1</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <configuration>
          <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>

</project>

二、相关操作和配置

1. 项目打包

在这里插入图片描述

2. 带参测试

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在本地执行成功:

在这里插入图片描述
在这里插入图片描述

3. 上传打包后的jar包和测试文档

上传打包后的带依赖jar包(第二个)和测试文档Hello.txt 到linux系统及hdfs上

cd /opt/jar/
ll

jar包改名:

mv mapreduce_demo-1.0-SNAPSHOT-jar-with-dependencies.jar wordcount.jar
ll

在这里插入图片描述

在这里插入图片描述

 cd /opt/file/
 ll

在这里插入图片描述

4. 增大虚拟内存

进行MapReduce操作时,可能会报溢出虚拟内存的错误

beyond the 'VIRTUAL’memory limit.
Current usage: 32.7 MB of 1 GB physical memory used;
2.3 GB of 2.1 GB virtual memory used. Killing container.

在这里插入图片描述

解决:

在mapred-site.xml中添加如下内容

	<!-- 是否对容器强制执行虚拟内存限制 -->
	<property>
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value>
        <description>Whether virtual memory limits will be enforced for containers</description>
    </property>
	
	
	<!-- 为容器设置内存限制时虚拟内存与物理内存之间的比率 -->
    <property>
        <name>yarn.nodemanager.vmem-pmem-ratio</name>
        <value>5</value>
        <description>Ratio between virtual memory to physical memory when setting memory limits for containers</description>
    </property>
cd /opt/softs/hadoop3.1.3/etc/hadoop/
vim mapred-site.xml

在这里插入图片描述

分发到另外两台服务器虚拟机

scp mapred-site.xml root@bigdata04:/opt/softs/hadoop3.1.3/etc/hadoop/

scp mapred-site.xml root@bigdata05:/opt/softs/hadoop3.1.3/etc/hadoop/

5.启动集群

[root@bigdata03 hadoop]# start-dfs.sh

[root@bigdata05 ~]# start-yarn.sh

在这里插入图片描述
在这里插入图片描述

6.在hdfs上创建输入文件夹和上传测试文档Hello.txt

hadoop fs -ls /
hadoop fs -mkdir /input

hadoop fs -put Hello.txt  /input
hadoop fs -ls  /input


在这里插入图片描述

7. 利用jar包在hdfs实现文本计数

 cd /opt/jar/
 ll
 
 hadoop jar wordcount.jar org.example.wordcounttemplate.WordCountDriver /input/Hello.txt /output  

注意:输出目录需不存在,让他执行命令时自行创建

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8. 查看计算统计结果

hadoop fs -ls  /output
hadoop fs -cat  /output/part-r-00000

在这里插入图片描述

在这里插入图片描述

对照文章:
大数据作业4(含在本地实现wordcount案例)
https://blog.csdn.net/m0_48170265/article/details/130029532?spm=1001.2014.3001.5501

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/445201.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TX-LCN:分布式事务框架

文章目录 概念LCN模式创建父工程parent创建子工程TxManager: 管理事务创建子工程: Eureka Server 注册中心创建子工程: book: 被远程调用方创建子工程: student: 远程调用方 TCC模式在lcn的基础上创建子工程: redistest在student 调用 redistest 概念 TX-LCN由两大模块组成&am…

设计模式:行为型模式 - 策略模式

文章目录 1.概述2.结构3.案例实现4.优缺点5.使用场景6.JDK源码解析 1.概述 先看下面的图片&#xff0c;我们去旅游选择出行模式有很多种&#xff0c;可以骑自行车、可以坐汽车、可以坐火车、可以坐飞机。 作为一个程序猿&#xff0c;开发需要选择一款开发工具&#xff0c;当然…

基于SpringBoot医养中心管理系统

有需要请私信或看评论链接哦 可远程调试 SpringBoot医养中心管理系统 一 介绍 基于SpringBoot医养中心管理系统-登录角色分为用户和管理员。用户登录后可查看个人信息/家人情况&#xff0c;生活情况和收费标准。管理员登录后台可进行账号管理&#xff0c;健康管理&#xff0c…

如何在Android面试中脱颖而出,高频Android面试题解析,帮你快速拿到Offer

Android面试就“小技巧” 了解自己的技能水平&#xff1a;在面试前&#xff0c;确保你对所面试的职位的技能要求有足够的了解&#xff0c;并检查自己的技能水平是否符合这些要求。熟悉面试流程&#xff1a;了解面试过程中可能会遇到的问题&#xff0c;并为每个问题准备好回答。…

itop-3568开发板驱动学习笔记(20)中断线程化

《【北京迅为】itop-3568开发板驱动开发指南.pdf》 学习笔记 文章目录 中断线程化简介中断线程化 API中断线程化实验 中断线程化简介 中断线程化也是中断下文的一种方式&#xff0c;与工作队列和软中断不同的是&#xff0c;中断线程只用于这个中断&#xff0c;当发生中断的时候…

Java基于POI动态合并单元格

Java使用poi导出excel 前言1.Excel和POI对象对应关系&#xff1a;2.POI创建Excel的步骤 一、引入依赖二、示例1.准备数据2.创建Excel工作簿对象3.给excel创建表头4.填充数据5.浏览器访问下载excel6.完整代码 前言 有个需求需要后端将数据导出为excel。并且excel中需要合并单元格…

linux安装java1.8

前言 安装java1.8是为了适配pyspark&#xff0c; 出现错误&#xff1a;pyspark.sql.utils.IllegalArgumentException: Unsupported class file major version 55\56\57\60 通过“java -version”看一下java版本&#xff0c;发现版本是java11&#xff0c;应该安装1.8才对 1、…

GaussDB工作级开发者认证—第二章GaussDB数据库应用程序开发指引

一. 驱动概述 GaussDB客户端接入认证&#xff0c;GaussDB支持以下三种认证方式&#xff1a;基于主机的认证口令认证SSL加密 二. JDBC接口介绍 1. JDBC概述 Java数据库连接&#xff08;JDBC&#xff09;是Java标准&#xff0c;它提供了从Java连接到关系数 据库的接口&#x…

C++智能指针shared_ptr详解

智能指针shared_ptr详解 一、简介二、底层原理2.1、引用计数2.2、shared_ptr的构造和析构2.3、shared_ptr的共享和拷贝2.4、循环引用问题 三、shared_ptr的使用3.1、创建一个shared_ptr3.2、共享一个shared_ptr3.3、使用删除器3.4、解除关联 四、使用示例总结 一、简介 C智能指…

软件测试拿了几个20K offer,分享一波面经

1、你的测试职业发展是什么?  测试经验越多&#xff0c;测试能力越高。所以我的职业发展是需要时间积累的&#xff0c;一步步向着高级测试工程师奔去。而且我也有初步的职业规划&#xff0c;前3年积累测试经验&#xff0c;按如何做好测试工程师的要点去要求自己&#xff0c;不…

MySQL笔记-函数,约束

本文标签 : 数据库函数 约束 目录 一、函数 1.字符串函数. 2.数值函数. 3.日期函数. 4.流程函数 二、约束 1.概述 2.约束演示 3.外键约束 1.概念 : 2. 实现: 3.删除/更新行为: 三、总结 一、函数 1.字符串函数. 实现: -- 函数演示 ---- 语法: select 函数(参数);-- …

跨域和网关通俗小白理解

跨域 跨域就是协议域名端口不同的服务器不能互相请求&#xff0c;企业级解决办法一般是通过Nginx反向代理实现 我们服务&#xff0c;线上都是通过S3服务器的Nginx反向代理解决跨域问题&#xff0c;因为Nginx和服务端沟通属于服务器之间的问题&#xff0c;不像浏览器有同源策略…

哇塞,炫云的智能优化太厉害啦!渲染费用竟然大幅降低了!

你有没有遇到过因为设置参数错误而导致云渲染费用突然飙升的情况呢&#xff1f;或者不知道自己设置的参数是否过高&#xff1f;现在&#xff0c;这些问题都可以轻松解决了&#xff0c;因为炫云的渲染质量功能非常智能和人性化。根据不同用户需求&#xff0c;它将参数优化分为五…

二进制部署nacos、docker部署nacos、k8s部署nacos、helm部署nacos

目录 前言Nacos支持三种部署模式官方文档二进制部署nacos&#xff08;单机模式&#xff09;安装jdk创建数据库及用户名下载安装包并解压导入nacos的表结构修改配置文件&#xff0c;启动nacos&#xff0c;登录nacos 二进制部署nacos&#xff08;cluster模式&#xff09;安装jdk&…

干货 | 什么是高频电解电容,它有普通电解电容有什么区别?

高频电解电容是一种常见的电容器&#xff0c;它在高频电路中发挥着重要的作用。与普通电解电容不同&#xff0c;高频电解电容能够更好地适应高频电路的需求&#xff0c;具有更高的频率响应和更低的ESR&#xff08;等效串联电阻&#xff09;。 电解电容重要性&#xff1a;电解电…

射频功率放大器在超声换能器声场特性校准中的应用

实验名称&#xff1a;基于水听器法的超声换能器声场特性校准技术的研究 研究方向&#xff1a;超声换能器 测试目的&#xff1a; 超声无损检测是无损检测领域重要的技术之一&#xff0c;而换能器作为超声检测中的关键部件&#xff0c;广泛应用于工业检测和医用超声成像领域。其性…

opencv配置安装

opencv配置安装 1、安装方式 https://blog.csdn.net/qq_45022687/article/details/120241068 根据这个网址的配置进行安装 2、解编译 mutex/thread等 似乎因为mingw的问题,#include 等直接引入线程无法直接引用&#xff0c;这导致了原有代码中直接使用mutex/thread的部分需要…

关于ARM核心板、一体板、底板的知识分享

嵌入式处理器模组&#xff0c;又称嵌入式核心板&#xff0c;或为CPU模组/核心板/SOM&#xff08;System on Module)&#xff0c;它是包含处理系统的核心电子部件的子电路板&#xff0c;集成了主芯片、存储器&#xff08;eMMC/Nand Flash)、运行内存&#xff08;DDR&#xff09;…

太神奇了,1984 年的电脑也能跑 Chat-GPT

新加坡的逆向计算爱好者 Yeo Kheng Meng 发布了一个 “doschgpt” ChatGPT 客户端&#xff0c;这个客户端适用于上世纪八十年代的 MS-DOS 系统。 目前这个 DOS 系统的 ChatGPT 客户端已成功在 1984 年的 IBM 5155 便携式 PC 上运行&#xff0c;这台机子配备 4.77Mhz 主频的 In…

孤儿僵尸守护进程基本概念与使用

文章目录 前言孤儿进程僵尸进程守护进程总结 前言 孤儿进程、僵尸进程和守护进程是操作系统中的概念&#xff0c;它们分别表示不同的进程状态和特性。孤儿进程和僵尸进程了解了解(都是为守护进程做铺垫)&#xff0c;但是对于守护进程大家还是可以好好学习学习&#xff0c;相信…