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

server/2024/9/23 14:33:21/

文章目录

  • 主要内容
    • 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类代码:

java">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类的四个泛型参数分别代表输入键、输入值、输出键和输出值的类型@Overrideprotected 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类代码:

java">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> {@Overrideprotected 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类代码:

java">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类为mymapjob.setReducerClass(myreducer.class);//设置作业的Reducer类为myreducerjob.setMapOutputValueClass(IntWritable.class);//设置Mapper输出值的类型为IntWritablejob.setMapOutputKeyClass(Text.class);//设置Mapper输出键的类型为Textjob.setOutputKeyClass(Text.class);//设置作业最终输出键的类型为Textjob.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.ppmy.cn/server/5979.html

相关文章

OpenHarmony实战开发-如何实现发布图片评论功能。

介绍 本示例将通过发布图片评论场景&#xff0c;介绍如何使用startAbilityForResult接口拉起相机拍照&#xff0c;并获取相机返回的数据。 效果图预览 使用说明 通过startAbilityForResult接口拉起相机&#xff0c;拍照后获取图片地址。 实现思路 1.创建CommentData类&…

eslint 规则

什么是 ESLint&#xff1f; ESLint 是一个可配置的 JavaScript 检查器。它可以帮助你发现并修复 JavaScript 代码中的问题。问题可以是任何东西&#xff0c;从潜在的运行时错误&#xff0c;到不遵循最佳实践&#xff0c;再到风格问题。 规则 规则是 ESLint 的核心构建块。规则…

web自动化系列-selenium 的鼠标操作(十)

对于鼠标操作 &#xff0c;我们可以通过click()方法进行点击操作 &#xff0c;但是有些特殊场景下的操作 &#xff0c;click()是无法完成的 &#xff0c;比如 &#xff1a;我想进行鼠标悬停 、想进行鼠标拖拽 &#xff0c;怎么办 &#xff1f; 这个时候你用click()是无法完成的…

JavaScript 作用域链详细解析

JavaScript 作用域链&#xff08;Scope Chain&#xff09;是一种变量和函数查找机制&#xff0c;它决定了在某个执行环境中变量和函数的可访问性。当访问一个变量或函数时&#xff0c;JavaScript 引擎会首先在当前的执行环境中查找&#xff0c;如果找不到则会向上级执行环境中继…

Swift面向对象编程

类的定义与实例化&#xff1a; Swift中定义一个类使用class关键字&#xff0c;类的属性和方法都写在大括号内。示例代码如下&#xff1a; class MyClass {var property1: Intvar property2: Stringinit(property1: Int, property2: String) {self.property1 property1self.pr…

HarmonyOS开发实例:【分布式手写板】

介绍 本篇Codelab使用设备管理及分布式键值数据库能力&#xff0c;实现多设备之间手写板应用拉起及同步书写内容的功能。操作流程&#xff1a; 设备连接同一无线网络&#xff0c;安装分布式手写板应用。进入应用&#xff0c;点击允许使用多设备协同&#xff0c;点击主页上查询…

【微服务】Gateway的基本配置详解

目录 什么是gateway 基本配置详解 1. 路由配置 2. 过滤器配置 3. 路由断言 4. 过滤器工厂 什么是gateway Spring Cloud Gateway 是 Spring Cloud 生态系统中的一个全新的微服务网关&#xff0c;它基于 Spring 5、Project Reactor 和 Spring Boot 2 技术栈&#xff0c;提供…

Tomcat架构设计精髓分析-Connector高内聚低耦合设计

优秀的模块化设计通常都会采用高内聚、低耦合 高内聚是指相关度比较高的功能要尽可能集中&#xff0c;不要分散。低耦合是指两个相关的模块要尽可能减少依赖的部分和降低依赖的程序&#xff0c;不要让两个模块产中强依赖。 Tomca连接器需要实现的功能: 监听网络端口 接受网络…