代码实现——MapReduce统计单词出现次数

需求

对以下txt文档进行单词出现次数统计(txt文档在/Users/lizhengi/test/input/目录下)

hadoop take spring
spark hadoop hdfs
mapreduce take Tomcat
tomcat
kafka kafka flume
flume
hive

实现

1、新建Maven工程,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>com.lizhengi</groupId><artifactId>Hadoop-API</artifactId><version>1.0-SNAPSHOT</version><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>RELEASE</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.8.2</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>3.2.1</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>3.2.1</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-hdfs</artifactId><version>3.2.1</version></dependency></dependencies></project>

2、src/main/resources目录下,新建一个文件,命名为“log4j.properties”,添加内容如下

log4j.rootLogger=INFO, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=target/spring.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n

3、编写Mapper类-WcMapper

package com.lizhengi.wordcount;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;/*** @author lizhengi* @create 2020-07-20*/
public class WcMapper extends Mapper<LongWritable, Text, Text, IntWritable> {Text k = new Text();IntWritable v = new IntWritable(1);@Overrideprotected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {// 1 拿到传入进来的一行内容,把数据类型转化为StringString line = value.toString();// 2 将这一行内容按照分隔符进行一行内容的切割 切割成一个单词数组String[] words = line.split(" ");// 3 遍历数组,每出现一个单词  就标记一个数字1  <单词,1>for (String word : words) {//使用mr程序的上下文context 把mapper阶段处理的数据发送出去//作为reduce节点的输入数据k.set(word);context.write(k, v);}}
}

4、编写Reducer类-WcReducer

package com.lizhengi.wordcount;import java.io.IOException;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;/*** @author lizhengi* @create 2020-07-20*/
public class WcReducer extends Reducer<Text, IntWritable, Text, IntWritable>{int sum;IntWritable v = new IntWritable();@Overrideprotected void reduce(Text key, Iterable<IntWritable> values,Context context) throws IOException, InterruptedException {// 1 定义一个计数器sum = 0;// 2 遍历一组迭代器,把每一个数量1累加起来就构成了单词的总次数for (IntWritable count : values) {sum += count.get();}// 3 输出最终的结果v.set(sum);context.write(key,v);}
}

5、编写Driver驱动类-WcDriver

package com.lizhengi.wordcount;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;/*** @author lizhengi* @create 2020-07-20*/
public class WcDriver {public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {// 1 获取配置信息以及封装任务Configuration configuration = new Configuration();Job job = Job.getInstance(configuration);// 2 设置jar加载路径job.setJarByClass(WcDriver.class);// 3 设置map和reduce类job.setMapperClass(WcMapper.class);job.setReducerClass(WcReducer.class);// 4 设置map输出job.setMapOutputKeyClass(Text.class);job.setMapOutputValueClass(IntWritable.class);// 5 设置最终输出kv类型job.setOutputKeyClass(Text.class);job.setOutputValueClass(IntWritable.class);// 6 设置输入和输出路径FileInputFormat.setInputPaths(job, "/Users/lizhengi/test/input");FileOutputFormat.setOutputPath(job, new Path("/Users/lizhengi/test/output"));// 7 提交boolean result = job.waitForCompletion(true);System.exit(result ? 0 : 1);}
}

结果

[root@carlota1]ls /Users/lizhengi/test/output/
#多了两个文件
_SUCCESS	part-r-00000
[root@carlota1 output]cat part-r-00000
flume	2
hadoop	2
hdfs	1
hive	1
kafka	2
mapreduce	1
spark 	1
spring	1
take	2
tomcat		2

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

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

相关文章

MIP个性化组件提交规范

MIP个性化组件一般用来实现前后端数据传输或特殊的交互效果&#xff0c;由广大开发者贡献。出于性能、可维护性等方面的考虑&#xff0c;开发者在新增组件或升级组件时&#xff0c;请遵守以下规范。 规范中的必须&#xff08;MUST&#xff09;&#xff0c;禁止&#xff08;MUS…

jar包在Hadoop集群上测试(MapReduce)

本片使用MapReduce——统计输出给定的文本文档每一个单词出现的总次数的案例进行&#xff0c;jar包在集群上测试 1、添加打包插件依赖 <build><plugins><plugin><artifactId>maven-compiler-plugin</artifactId><version>3.6.2</versio…

代码实现——MapReduce实现Hadoop序列化

简单介绍 1、什么是序列化 序列化&#xff1a;把内存中的对象&#xff0c;转换成字节序列(或其他数据传输协议)以便于存储到磁盘(持久化)和网络传输。反序列化&#xff1a;将收到字节序列(或其他数据传输协议)或者是磁盘的持久化数据&#xff0c;转换成内存中的对象。 2、 为…

日常问题——hadoop启动后发现namenode没有启动,但是排除了格式化过度的问题

hadoop启动后发现namenode没有启动&#xff0c;网上说的格式化过度的问题我是没有的&#xff0c;因为我只格式化过一次。之后查看日志 vim /opt/hadoop/logs/namenode对应的log文件 发现 2020-03-03 23:16:21,868 INFO org.apache.hadoop.metrics2.impl.MetricsSystemImpl: Na…

Zookeeper3.6.1常用的Shell命令

1、客户端连接 zkCli.sh zkCli.sh -server host:port2、显示节点信息 -s状态 -w监听器 -R递归 ls [-s] [-w] [-R] path3、创建节点 -s加序列号 -e临时节点 create [-s] [-e] path [data]4、获取节点值 -s状态 -w监听器 get [-s] [-w] path5、设置节点值 -s状态 set [-s] […

CentOS7下MySQL5.7的安装

1、下载MySQL 安装包&#xff1a; wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpmyum -y localinstall mysql57-community-release-el7-11.noarch.rpm 2、在线安装MySQL yum -y install mysql-community-server 3、启动mysql 服务 systemct…

CentOS7下Hive的安装配置

0、安装前提 安装配置jdk与hadoop安装配置好mysql 1、下载上传 下载hive&#xff0c;地址:http://mirror.bit.edu.cn/apache/hive/上传到指定位置scp apache-hive-3.1.2-bin.tar.gz rootCarlota1:/usr/local/apps 2、解压安装 tar -zxvf apache-hive-3.1.2-bin.tar.gzmv a…

Hive常用的操作命令

Hive常用的交互命令 hive 进入数据库hive -e 不进入hive的交互窗口执行sql语句hive -f 执行sql脚本hive -help 查看帮助 Hive常用数据库的操作命令 show databases;查看hive中的所有数据库use default;用default数据库create database myhive ;创建数据库create database if…

Hive常见的属性配置

配置文件 默认配置文件&#xff1a;hive-default.xml 用户自定义配置文件&#xff1a;hive-site.xml 用户自定义配置会覆盖默认配置。另外&#xff0c;Hive也会读入Hadoop的配置&#xff0c;因为Hive是作为Hadoop的客户端启动的&#xff0c;Hive的配置会覆盖Hadoop的配置。配…

什么是集群(cluster)

1、集群 1.1 什么是集群 简单的说&#xff0c;集群(cluster)就是一组计算机&#xff0c;它们作为一个整体向用户提供一组网络资源。这些单个的计算机系统就是集群的节点(node)。一个理想的集群是&#xff0c;用户从来不会意识到集群系统底层的节点&#xff0c;在他/她们看来&am…

Kafka:集群部署

0、环境准备 安装jdk&#xff0c;配置环境提前安装zookeeper 1、解压安装 将tar压缩包上传tar -zxvf kafka_2.12-2.5.0.tgz 2、配置变量环境 vi /etc/profile #kafka export KAFKA_HOME/usr/local/apps/kafka_2.12-2.5.0 export PATH$PATH:$KAFKA_HOME/binsource /etc/pr…

集群(cluster)amp;高可用性(HA)概念

1.1 什么是集群 简单的说&#xff0c;集群&#xff08;cluster&#xff09;就是一组计算机&#xff0c;它们作为一个整体向用户提供一组网络资源。这些单个的计算机系统就是集群的节点&#xff08;node&#xff09;。一个理想的集群是&#xff0c;用户从来不会意识到集群系…

Kafka:常用命令

启动Kafka&#xff1a;kafka-server-start.sh -daemon $KAFKA_HOME/config/server.properties创建一个叫test的话题&#xff0c;有两个分区&#xff0c;每个分区3个副本&#xff1a;kafka-topics.sh --zookeeper localhost:2181 --create --topic test --replication-factor 3 …

MySQL Cluster 群集安装环境介绍

MySQL Cluster 群集安装环境介绍 MySQL 群集支持的操作系统:* Linux (Red Hat, Novell/SUSE) * Sun Solaris * IBM AIX * HP-UX * Mac OS X MySQL 软件:* MySQL Max 版本 (並不是指 MaxDB)* MySQL NDB Cluster 系统最低需求&#xff1a; OS&#xff1a; Linux ( Turbolinux…

八股文打卡day9——计算机网络(9)

面试题&#xff1a;HTTP1.0和HTTP1.1的区别&#xff1f; 我的回答&#xff1a; 1.长连接&#xff1a;HTTP1.1引入了长连接的机制&#xff0c;connection&#xff1a;keep-alive。一个TCP连接可以进行多次请求和响应。而HTTP1.0每次请求响应一次都得建立连接、断开连接。 引入…

使用ogg实现oracle到kafka的增量数据实时同步

Oracle Golden Gate软件是一种基于日志的结构化数据复制备份软件&#xff0c;它通过解析源数据库在线日志或归档日志获得数据的增量变化&#xff0c;再将这些变化应用到目标数据库&#xff0c;从而实现源数据库与目标数据库同步。 0、本篇中源端和目标端的一些配置信息&#xf…

转载:35岁前成功的12条黄金法则

习惯的力量是惊人的。习惯能载着你走向成功&#xff0c;也能驮着你滑向失败。如何选择&#xff0c;完全取决于你自己。 1.习惯的力量&#xff1a;35岁以前养成好习惯 你想成功吗&#xff1f;那就及早培养有利于成功的好习惯。 习惯的力量是惊人的&#xff0c;35岁…

JDK源码解析之 Java.lang.Object

Object类是Java中其他所有类的祖先&#xff0c;没有Object类Java面向对象无从谈起。作为其他所有类的基类&#xff0c;Object具有哪些属性和行为&#xff0c;是Java语言设计背后的思维体现。 Object类位于java.lang包中&#xff0c;java.lang包包含着Java最基础和核心的类&…

将z-blog改成英文blog所遇到的问题

1.将z-blog中文章日期中的“年,月,日”改成英文 相关模板:b_article-multi.htmlb_article-single.html默认用的时间标签是<#article/posttime/longdate#> 即 "2007年1月13日" 这样的形式你可以换成 <#article/posttime/shortdate#>即 "2…

JDK源码解析之 Java.lang.String

String 类代表字符串。Java 程序中的所有字符串字面值&#xff08;如 “abc” &#xff09;都作为此类的实例实现。 字符串是常量&#xff1b;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的&#xff0c;所以可以共享。 一、类定义 p…