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

embedded/2024/10/19 13:21:10/

文章目录

  • 主要内容
    • 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/embedded/6086.html

相关文章

Python属于动态强类型语言

1、动态与静态编程语言 动态编程语言和静态编程语言是基于变量类型声明和类型检查的特性的区别。 动态编程语言&#xff1a; 在动态编程语言中&#xff0c;变量的类型是在运行时动态确定的。这意味着在声明变量时不需要显式地指定变量类型&#xff0c;变量可以根据赋值的数据…

LeetCode 3.无重复字符发最长字串

目录 题目描述 方法一 思路&#xff1a; 代码&#xff1a; 题目描述 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长 子串 的长度。 示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc"&#xff0c;所以…

葡萄书--深度学习基础

卷积神经网络 卷积神经网络具有的特性&#xff1a; 平移不变性&#xff08;translation invariance&#xff09;&#xff1a;不管检测对象出现在图像中的哪个位置&#xff0c;神经网络的前面几层应该对相同的图像区域具有相似的反应&#xff0c;即为“平移不变性”。图像的平移…

【数据结构练习题】堆——top-k问题

♥♥♥♥♥个人主页♥♥♥♥♥ ♥♥♥♥♥数据结构练习题总结专栏♥♥♥♥♥ ♥♥♥♥♥上一章&#xff1a;【数据结构练习题】二叉树(1)——1.相同的树2.另一颗树的子树3.翻转二叉树4.平衡二叉树5.对称二叉树♥♥♥♥♥ 文章目录 1.top-k问题1.1问题描述1.2思路分析1.3绘图分析…

HarmonyOS开发实例:【事件的订阅和发布】

介绍 本示例主要展示了公共事件相关的功能&#xff0c;实现了一个检测用户部分行为的应用。具体而言实现了如下几点功能&#xff1a; 1.通过订阅系统公共事件&#xff0c;实现对用户操作行为&#xff08;亮灭屏、锁屏和解锁屏幕、断联网&#xff09;的监测&#xff1b; 2.通…

CentOS常见的命令

CentOS&#xff08;Community ENTerprise Operating System&#xff09;是一个基于Red Hat Enterprise Linux源代码构建的开源企业级Linux发行版。在日常的系统管理和维护中&#xff0c;掌握一些常见的CentOS命令是非常必要的。本文将介绍一些CentOS系统中常用的命令&#xff0…

【Linux 杂货铺】进程间通信

1.进程为什么要通信呢&#xff1f; ①&#x1f34e; 为了进程之间更好的协同工作&#xff0c;举个例子&#xff0c;在学校&#xff0c;学院的管理人员给教师安排课程的时候&#xff0c;必须事先知道该教师平常的上课情况&#xff0c;不然会将教师的课程安排到一起造成麻烦&…

Keepalived+LVS+nginx搭建nginx高可用集群

一、简介 nginx是一款非常优秀的反向代理工具&#xff0c;支持请求分发&#xff0c;负载均衡&#xff0c;以及缓存等等非常实用的功能。在请求处理上&#xff0c;nginx采用的是epoll模型&#xff0c;这是一种基于事件监听的模型&#xff0c;因而其具备非常高效的请求处理效率…