数据大爆炸:WordCount程序的多元化执行方式

news2024/11/29 20:44:29

文章目录

  • 主要内容
    • 1.左方工作区右键New,选择Map文件
    • 2.再创建mymap,myreducer,mywordcount类:
    • 3.打包在linux中运行,注意处理的文件式完全分布式文件
      • 3.1打jar包步骤:
  • 4.完成内容


主要内容

尝试使用不同的方式运行wordcount程序。
1)windows的Eclipse中运行wordcount处理本地文件或完全分布式文件
2)将上面的程序打包在linux中运行,注意处理的文件式完全分布式文件
3)将上面的打包程序在windows的cmd中运行
4)在windows的Eclipse中使用伪分布或分布式运算完成wordcount程序


1.左方工作区右键New,选择Map文件

在这里插入图片描述

定义项目名称:
在这里插入图片描述

创建包:
在这里插入图片描述
在这里插入图片描述

2.再创建mymap,myreducer,mywordcount类:

mymap类代码:

import java.io.IOException;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

public class mymap extends Mapper<LongWritable, Text,Text, IntWritable> { //Mapper类的四个泛型参数分别代表输入键、输入值、输出键和输出值的类型
    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { //输入键是LongWritable(长整型),输入值是Text(文本),输出键是Text,输出值是IntWritable(整型)
        String aline= value.toString(); //将输入值(一行文本)转换成字符串
        String[] words = aline.split(" "); //使用空格将字符串分割成单词数组
        for (String w:words ) { //for-each循环,遍历数组中的每个单词
            context.write(new Text(w),new IntWritable(1)); //在循环体内,每个单词被写入上下文(Context)中,作为输出键值对。输出键是单词本身(new Text(w)),输出值是整数1(new IntWritable(1)),表示这个单词出现了一次
        }
    }
}

myreducer类代码:

import java.io.IOException;
import java.util.Iterator;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

public class myreducer extends Reducer<Text, IntWritable, Text,IntWritable> {
    @Override
    protected void reduce(Text key, Iterable<IntWritable> values, Reducer<Text, IntWritable, Text, IntWritable>.Context context) throws IOException, InterruptedException {
        //它覆盖了父类Reducer的reduce方法。reduce方法负责处理每个键和与之关联的值的集合
    	Iterator<IntWritable> iterator = values.iterator();//获取values的迭代器,用于遍历所有的值
        int sum=0;//初始化一个整数sum,用于累加单词出现的次数
        while(iterator.hasNext()){//遍历迭代器中的每个元素
           IntWritable i= iterator.next();//: 获取迭代器中的下一个IntWritable对象
           sum+=i.get();//将IntWritable对象的值加到sum上
        }
        context.write(key,new IntWritable(sum));//将累加的结果和对应的键写入上下文(Context)中,作为输出键值对
//读取映射阶段输出的键值对,将具有相同键(单词)的值(出现次数)进行累加,最后输出每个单词的总出现次数
    }
}

mywordcount类代码:

import java.io.IOException;
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;

public class mywordcount {
    public static void main(String[] args) throws IOException, InterruptedException, ClassNotFoundException {
        Configuration conf = new Configuration(); //创建一个Hadoop作业配置对象
        conf.set("fs.defaultFS", "hdfs://192.168.222.171:9000");//设置文件系统的默认类型为HDFS,并指定NameNode的地址
        //根据不同运行要求设置相关属性
        //tips1:独立模式无需配置属性,文件可以是本地或分布式
        //tips2:在linux或cmd中用hadoop jar也不用配置属性,文件式伪分布式或完全分布式
        //tips3:直接在idea中或Eclipse中运行,且是伪分布式模式需要配置fs.defaulstFS yarnhost //mapreduce框架等3个属性,详见ppt
        //tip4:直接在idea中或Eclipse中运行,且是完全分布式计算,即windows跨平台提交//wordcount 需要设置跨平台提交参数为true,设置并启动historyserver服务,详见ppt
        //tips5:遇到访问权限问题,在程序中添加System.setProperty("HADOOP_USER_NAME","root");
        Job job=Job.getInstance(conf);// 根据配置创建一个新的作业实例
        job.setMapperClass(mymap.class);//设置作业的Mapper类为mymap
        job.setReducerClass(myreducer.class);//设置作业的Reducer类为myreducer
        job.setMapOutputValueClass(IntWritable.class);//设置Mapper输出值的类型为IntWritable
        job.setMapOutputKeyClass(Text.class);//设置Mapper输出键的类型为Text
        job.setOutputKeyClass(Text.class);//设置作业最终输出键的类型为Text
        job.setOutputValueClass(IntWritable.class);//设置作业最终输出值的类型为IntWritable
       // job.setJar("d:/myhdfswordcount.jar");//在idea或Eclipse直接运行用 作业的jar包路径设置
        job.setJarByClass(mywordcount.class);//独立模式或hadoop jar运行时用  指定作业的jar包,通过作业的主类来查找
        FileInputFormat.setInputPaths(job,new Path("/myinput.txt"));//注意不同模式下文件 设置作业的输入路径
        FileOutputFormat.setOutputPath(job,new Path ("/output"));//输出路径
        boolean b = job.waitForCompletion(true); //提交作业并等待执行完成,返回值表示作业是否成功执行
        if (b)
            System.out.println("success!");
    }
}

以上代码缺一不可

3.打包在linux中运行,注意处理的文件式完全分布式文件

虚拟机打开,启动hadoop,
关防火墙

systemctl stop firewalld

退出安全模式:

hadoop dfsadmin -safemode leave

保证正常连接

3.1打jar包步骤:

1.右键src,点export
在这里插入图片描述

选择JAR File:
在这里插入图片描述

都点上:
在这里插入图片描述

勾选三个类即可:
在这里插入图片描述
在这里插入图片描述

找到jar包,上传到虚拟机指定位置(无限制):【黄色小标就是上传按钮】

之后上传统计文字的txt文件到hdfs中!(put方法)或者eclipse里面连接的DFS直接上传文件【选择一种方式即可】

Hadoop fs -put /myinput.txt /

在这里插入图片描述

输出文件名必须是hdfs里面不存在的!
然后,到上传jar包的指定位置:
在这里插入图片描述

使用命令:
Hadoop jar jar包名 包名.类名
我的就是:Hadoop jar wrword.jar five.mywordcount

伪分布式是相同思想(类比虚拟机)
仅修改mywordcount文件代码
在这里插入图片描述

在cmd运行命令:
Hadoop.cmd jar jar包名 包名.类名
我的就是:Hadoop.cmd jar wrword.jar five.mywordcount

4.完成内容

结束!

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

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

相关文章

去哪网拿去花不能提现,只能用于透支消费,那么拿去花提现是怎么实现呢?

去哪网拿去花不能提现&#xff0c;只能用于透支消费&#xff0c;那么拿去花提现是怎么实现呢&#xff1f; 申请携程拿去花之后&#xff0c;有一些人就会想着把钱提现出来拿去用。一般来说&#xff0c;他们都是通过线下门店来提现拿去花&#xff0c;拿去花允许用户先消费后付款&…

Unity类银河恶魔城学习记录13-1 p142 Save system源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili FileDataHandler.cs using System; using System.IO; using UnityEngine; p…

什么地推网推拉新副业平台最值得推荐? 赚取互联网第一桶金

随着互联网的发展&#xff0c;新型行业层出不穷。其中地推网推拉新作为互联网行业具有收入高、门槛低、时间自由等优势&#xff0c;一部分人从中嗅到了商机&#xff0c;开始纷纷接触并加入了进来。但还是有一部分人对于地推网推拉新的了解很少&#xff0c;不知道如何才能加入其…

程序设计|C语言教学——C语言基础1:C语言的引入和入门

一、程序的执行 1.定义 解释&#xff1a;借助一个程序&#xff0c;那个程序能够试图理解你的程序&#xff0c;然后按照你的要求执行。下次执行的时候还需要从零开始解释。 编译&#xff1a;借助一个程序&#xff0c;能够像翻译官一样&#xff0c;把你的程序翻译成机器语言&a…

IoC与Spring

目录 IoC控制反转 现实案例 特点 目的 DI依赖注入 小总结 介绍Spring 狭义和广义上的Spring 传统编码方式的不足 需求引入 弊端分析 IoC控制反转 现实案例 1、买水果问老板各种水果的口感而不是自己去挨个尝试一遍。 2、买房子找中介而不是自己去花时间找房东。…

字节对编码 (BPE):提升语言处理的效率和有效性

原文地址&#xff1a;byte-pair-encoding-bpe-bridging-efficiency-and-effectiveness-in-language-processing 2024 年 4 月 12 日 介绍 在快速发展的自然语言处理 (NLP) 领域&#xff0c;对人类语言高效解析和理解的追求带来了重大创新。字节对编码&#xff08;BPE&#x…

Windows 任务计划程序 【不管用户是否登录都要运行】执行时不显示CMD或程序窗口

任务计划程序右侧可以导出xml 「只在用户登录时运行」LogonType&#xff1a;InteractiveToken。 「不管用户是否登录都要运行」LogonType&#xff1a;Password。 用管理员运行CMD &#xff1a;schtasks /change /it /tn "test" 「不管用户是否登录都要运行」Logon…

邮件过滤是什么?怎么设置邮件过滤?

现在我们每天都要收发很多电子邮件。有的是朋友发来的问候&#xff0c;有的是工作伙伴的沟通&#xff0c;还有的可能是那些我们不想要的广告或垃圾邮件。这么多邮件&#xff0c;怎么看过来呀&#xff1f;其实&#xff0c;有一个好工具叫“邮件过滤”&#xff0c;它就像你的私人…

Python --- 怎么把Python当计算器用?(小白自学笔记)

怎么把Python当计算器用&#xff1f;(小白自学笔记) Part I&#xff1a;标准数学包的导入 今天刚刚装了python&#xff0c;打算用它来取代matlab的基本计算功能&#xff0c;当我的日常计算器用。(这里还有一个捷径&#xff0c;如果你跟我一样也是纯小白的话&#xff0c;直接问c…

市场复盘总结 20240417

仅用于记录当天的市场情况&#xff0c;用于统计交易策略的适用情况&#xff0c;以便程序回测 短线核心&#xff1a;不参与任何级别的调整&#xff0c;采用龙空龙模式 一支股票 10%的时候可以操作&#xff0c; 90%的时间适合空仓等待 二进三&#xff1a; 进级率 100% 最常用的二…

鸿蒙相关岗位需求突增!你具体知道都有哪些岗位吗?

1 月 18 日&#xff0c;鸿蒙 Next 预览版面向开发者正式开放申请。至此&#xff0c;鸿蒙原生应用版图已成型&#xff0c;这个中国自主研发的操作系统&#xff0c;正式走上了独立之路。 随后迎来了不少互联网公司与华为鸿蒙原生应用达成了合作&#xff0c;像我们常见的阿里、京…

[ ROS入门]

00ROS实现流程大致分为5步 先创建一个工作空间&#xff1b;再创建一个功能包&#xff1b;编辑源文件&#xff1b;编辑配置文件&#xff1b;编译并执行。 01创建工作空间 02进入src创建ros包并添加依赖 上述命令&#xff0c;会在工作空间下生成一个功能包&#xff0c;该功能包依…

OpenHarmony实战开发-如何使用Navigation实现多设备适配。

介绍 在应用开发时&#xff0c;一个应用需要适配多终端的设备&#xff0c;使用Navigation的mode属性来实现一套代码&#xff0c;多终端适配。 效果图预览 使用说明 将程序运行在折叠屏手机或者平板上观看适配效果。 实现思路 本例涉及的关键特性和实现方案如下&#xff1a…

TR-DPO:革新大模型对齐技术

这篇论文中提出的TR-DPO&#xff08;Trust Region Direct Preference Optimization&#xff09;方法的架构或流程设计主要侧重于改进语言模型对齐过程中的稳定性和有效性。 在传统的对齐方法中&#xff0c;模型在学习的时候需要尽可能地靠近一个预先设定的参考模型。这就像是给…

https加密证书

网站要出去安全模式访问&#xff0c;加强网络安全就需要使用HTTPS加密证书。 本文主要介绍什么是HTTPS加密证书&#xff0c;如何申请HTTPS加密证书&#xff0c;如何安装HTTPS加密证书等问题展开讨论。 什么是HTTPS加密证书&#xff1f; HTTPS加密证书的行业产品用语叫作SSL证…

将gidp模块、ipam集成到ultralytics项目中实现gidp-yolov8、ipam-yolov8

gdip-yolo与ia-seg都是一种将图像自适应模块插入模型前面,从而提升模型在特定数据下检测能力的网络结构。gdip-yolo提出了gdip模块,可以应用到大雾数据与低亮度数据(夜晚环境),然后用于目标检测训练;ia-seg将ia-yolo中的代码修改了一下修车了ipam模块,应用到低亮度数据(…

监控系统Prometheus--与第三方框架集成

文章目录 Prometheus和Flink集成拷贝jar包修改Flink配置为了运行测试程序&#xff0c;启动netcat启动hdfs、yarn&#xff0c;提交flink任务到yarn上可以通过8088跳到flinkUI的job页面&#xff0c;查看指标统计刷新Prometheus页面&#xff0c;如果有flink指标&#xff0c;集成成…

ORAN C平面 Section Extension 23

ORAN C平面Section扩展23用于任意symbol模式的调制压缩参数。此section扩展允许为一个或多个“SymPrbPatterns”指定多组“mcScaleReMask、csf和mcScaleOffset”值。“SymPrbPattern”用于指定一组PRB&#xff0c;这些PRB可以跨越使用prbPattern指定的整个PRB范围&#xff08;频…

基于SpringBoot+Vue的医院挂号就诊系统设计与实现(源码+文档+包运行)

一.系统概述 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装医院挂号就诊系统软件来发挥其高效地信息处理的作用&a…

【C++】STL之string的模拟实现

在本篇博客中&#xff0c;作者将会带领你模拟实现简单的STL中的string类的。至于string的常规使用&#xff0c;这里不做讲解。 string类的c参考文档 string - C Reference (cplusplus.com) 一.string的基本结构 string类的大致结构可以分为三个变量来表示&#xff0c;一个是字…