hadoop入门——wordcount

入门Hadoop的WordCount程序 本篇文章主要说两部分:简单介绍MapReduce的工作原理;详细解释WordCount程序。 阅读详情

源码

根据网上的实例,自己稍作修改,把文件读入输出地址,写在系统文件中,通过读文件控制。

import java.io.*;
import java.io.IOException;
import java.util.StringTokenizer;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileSystem;
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.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.GenericOptionsParser;

public class WordCount {

	/**
	 * 
	 * @param args
	 * @throws IOException
	 * @throws ClassNotFoundException
	 * @throws InterruptedException
	 */
	public static void main(String[] args) throws IOException, InterruptedException, ClassNotFoundException {
		// TODO Auto-generated method stub
		Configuration conf = new Configuration();// 取得系统的参数
		// if (args.length != 2) { // 判断一下命令行输入路径/输出路径是否齐全,即是否为两个参数
		// System.err.println("Usage: wordcount <in> <out>");
		// System.exit(2); // 若非两个参数,即退出
		// }
		Job job = new Job(conf, "My Word Count"); // 此程序的执行,在hadoop看来是一个Job,故进行初始化job操作
		/* 读取文件,文件中写了本次要处理的.txt地址和输出地址,用分好隔开 */
		FileSystem fs = FileSystem.get(conf);
		FSDataInputStream fin = fs.open(new Path("/user/zq/text.txt"));
		BufferedReader in = null;
		String line, inpath, outpath;
		inpath = outpath = null;
		try {
			in = new BufferedReader(new InputStreamReader(fin, "UTF-8"));
			if ((line = in.readLine()) != null) {
				String[] str = line.split(";");
				inpath = str[0];
				outpath = str[1];
			}
		} finally {
			if (in != null)
				in.close();
		}
		if (fs.exists(new Path(outpath))) {
			fs.delete(new Path(outpath), true);
		}
		job.setJarByClass(WordCount.class); // 可以认为成,此程序要执行MyWordCount.class这个字节码文件
		job.setMapperClass(TokenizerMapper.class); // 在这个job中,我用TokenizerMapper这个类的map函数
		job.setReducerClass(IntSumReducer.class); // 在这个job中,我用IntSumReducer这个类的reduce函数
		job.setOutputKeyClass(Text.class); // 在reduce的输出时,key的输出类型为Text
		job.setOutputValueClass(IntWritable.class);// 在reduce的输出时,value的输出类型为IntWritable
		FileInputFormat.addInputPath(job, new Path(inpath)); // 初始化要计算word的文件的路径
		FileOutputFormat.setOutputPath(job, new Path(outpath)); // 初始化要计算word的文件的之后的结果的输出路径
		System.exit(job.waitForCompletion(true) ? 0 : 1);
		// 这里就是真正的去提交job到hadoop上去执行了,意思是指如果这个job真正的执行完了则主函数退出了,
		// 若没有真正的执行完就退出了,则为非法退出
	}

	// Mapper<input_Key_Type,input_Value_Type,output_key_type,output_value_type>
	// 这里的Text相当于jdk中的String,IntWritable相当于jdk的int类型
	public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable> {

                // 声明一个IntWritable变量,作计数用,每出现一个key,给其一个value=1的值		
                private final static IntWritable one = new IntWritable(1);
		private Text word = new Text();// 用来暂存map输出中的key值,Text类型的,故有此声明

		/*
		 * 这里就是map函数,也用到了范型,它是和Mapper抽象类中的相对应的,此处的Object key, Text
		 * value的类型和上边的Object,Text是相对应的,而且最好一样,不然的话,多数情况运行时会报错。
		 */
		public void map(Object key, Text value, Context context) {
			String[] str = value.toString().split(" ");
			for (String s : str) {
				word.set(s);// 出现一个单词就给它设成一个key并将其值设为1
				try {
					context.write(word, one);// 输出设成的key/value值
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}

	public static class IntSumReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
		private IntWritable result = new IntWritable();

		public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException,
				InterruptedException {
			int sum = 0;
			/*
			 * 由于map的打散,这里会得到如,{key,values}={"hello",{1,1,1,1,1,1,....}},这样的集合
			 * 这里需要逐一将它们的value取出来予以相加,取得总的出现次数,即为汇和
			 */
			for (IntWritable val : values) {
				sum += val.get();
			}
			result.set(sum);// 将values的和取得,并设成result对应的值
			context.write(key, result);
		}
	}
}


确认没错后,打成jar包

运行:

启动WinSCP,连上集群。把jar包放在自己的文件夹内,如 /home/tseg/zq。

创建文件 /user/zq/text.txt,里面写明输入输出地址,如/user/zq/t.txt;/user/zq/out。 然后根据输入地址(/user/zq/t.txt),创建相应的准备处理的文件(就是wordcount要处理的)。

在PuTTY中打开会话窗口。执行wordcount

tseg@dell1:~$ cd /home/tseg/zq
tseg@dell1:~/zq$ hadoop jar wordcount.jar

运行完毕后,列出输出目录表

tseg@dell1:~$ cd zq
tseg@dell1:~/zq$ hadoop fs -ls /user/zq/out
Found 2 items
drwxr-xr-x   - tseg supergroup          0 2014-03-19 15:38 /user/zq/out/_logs
-rw-r--r--   2 tseg supergroup         65 2014-03-19 15:39 /user/zq/out/part-r-00000

显示输出结果:

tseg@dell1:~/zq$ hadoop fs -cat /user/zq/out/part-r-00000
        1
a       1
b       1
c       2
d       4
e       5
f       3
g       2
h       1
r       4
s       3
sd      1
t       2
w       1
y       2
yu      1







        
Hadoop_1 入门WordCount 记录踩得坑以及部署环境流程。 搭建的是伪分布Hadoop 首先环境需要安装zookeeper。这个好装,不多说 其次比较复杂的是安装openssh。我的Linux系统是centos 7 mini版本。安装openssh之前的准备工作有很多。 需要安装的tar包有: libpcap-1.8.1.tar.gz zlib-1.2.8.tar.gz perl-5.22.4.tar.gz ... 阅读详情

相关推荐

大数据hadoop入门示例1-WordCount

Hadoop入门案例–实现WordCount 文章目录1.环境配置1.1 pom.xml文件2.resources文件2.创建运行文件2.1创建工程2.2 创建Mapper2.3创建Reducer文件2.4创建Driver3 输入和输出4. 1.环境配置 1.1 pom.xml文件 在maven工程里导入hadoop包,hadoop版本应该和window环境下配置的hadoop环境保持一致。 <dependencies> <dependency>

qq_42754919的博客 393

hadoop官网的wordcount案例(Example: WordCount v1.0)

官网的wordcount:链接: link https://hadoop.apache.org/docs/stable/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html Input and Output types of a MapReduce job: (input) <k1, v1&gt...

weixin_43932564的博客 749

Hadoop WordCount实战:大数据处理入门

Hadoop是一个由Apache基金会开发的分布式系统基础架构。它使用Java编写,能够处理海量数据,支持应用程序在由普通硬件构成的大型集群上运行。Hadoop的核心是HDFS和MapReduce,HDFS用于存储大规模数据,MapReduce则负责计算。除了这两个组件之外,Hadoop还包括YARN用于资源管理,以及一个庞大的生态系统,其中包括HBase, Hive, Pig等。

weixin_42497762的博客 912

Hadoop集群WordCount详解

1.1 MapReduce编程模型MapReduce采用”分而治之”的思想,把对大规模数据集的操作,分发给一个主节点管理下的各个分节点共同完成,然后通过整合各个节点的中间结果,得到最终结果。简单地说,MapReduce就是”任务的分解与结果的汇总”。在Hadoop中,用于执行MapReduce任务的机器角色有两个:一个是JobTracker;另一个是TaskTracker,JobTracker是用于调度工作的,TaskTracker是用于执行工作的。一个Hadoop集群中只有一台JobTracker。

m0_67402125的博客 1990

FCKeditor 2.6.4 php版本任意文件上传——漏洞复现

一、漏洞描述 FCKeditor是目前最优秀的可见即可得网页编辑器之一,它采用JavaScript编写。具备功能强大、配置容易、跨浏览器、支持多种编程语言、开源等特点。它非常流行,互联网上很容易找到相关技术文档,国内许多Web项目和大型网站均采用了FCKeditor。 Fckeditor 低于 2.6.4 php 版本任意文件上传漏洞,当您的PHP环境配置为 GPC = Off 时可绕过currentfolder参数过滤上传脚本木马控制网站服务器 二、漏洞原理 漏洞版本:<=2.6.4 三、环境搭建

W小哥 1万+

从.bib到.bbl:手把手教你搞定LaTeX参考文献的完整流程

本文详细介绍了从.bib到.bbl的LaTeX参考文献处理完整流程,包括文献数据库构建、样式选择、主文档配置、编译流程及问题排查。特别针对.bib、.bbl等文件的操作提供了实战解决方案,帮助用户高效管理学术文献引用,适用于各类学术写作场景。

weixin_29292431的博客 285

Hadoop之实战WordCount

大致流程如下: 第一步:开发Map阶段代码 第二步:开发Reduce阶段代码 第三步:组装Job 在idea中创建WordCountJob类 添加注释,梳理一下需求: 需求:读取hdfs上的hello.txt文件,计算文件中每个单词出现的总次数 hello.txt文件内容如下: hello you hello me 最终需要的结果形式如下: hello 2 me 1 you 1 先创建map阶段的代码,在这里需要自定义一个mapper类,继承框架中的Mapper类 public static.

qq_52150032的博客 1962

避坑指南:用pygrib处理ERA5气象数据时遇到的5个典型问题

本文总结了使用pygrib库处理ERA5气象GRIB数据时常见的五个典型问题及解决方案,涵盖数据获取、内存管理、时间处理、空间插值和性能优化。重点针对气象数据插值这一核心挑战,提供了处理不规则网格、缺失值和跨日期变更线的实用代码示例与优化策略,帮助用户高效、稳定地完成气象数据分析工作。

weixin_28224217的博客 185

数据挖掘实验:使用 Hadoop 实现 WordCount 应用

数据挖掘实验:使用 Hadoop 实现 WordCount 应用

ProgramNovice的博客 9155

如何构建智能聊天系统

聊天分为听、思考、读,简单的通过ASR、LLM、TTS三类模型的组合可以实现,最近openai推出支持多模态的GPT-4o模型,可以把三个模型真正融合成在一起。现在市面上的模型百花齐放,各有所长。要实现可落地的方案,需要结合业务,验证模型效果,同时也要考虑方案的可行性,有些模型在国内能用,有些在国内不能用。

xsgnzb的专栏 2107

保姆级教程:在华为云Ubuntu服务器上快速搭建RAGflow开发环境(避坑指南)

本文提供了一份在华为云Ubuntu服务器上快速搭建RAGflow开发环境的保姆级教程。针对网络拉取镜像等常见问题,详细介绍了从服务器选型、系统优化、Docker配置到RAGflow部署与验证的全流程,并给出生产环境调优建议,帮助开发者高效避坑,快速构建企业级应用环境。

weixin_29250403的博客 84

利用Hadoop自带example实现wordCount

上次虽然把环境搭好了,但是实际运行起来一堆错误,下面简述一下踩的坑。1、hadoop fs -put上传文件失败,WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Problem connecting to server: master:80202、NodeManager运行一段时间后自行消失解决方案:同上,第1个问题解决了这个问题也消失了,亏我还给他准备了好几种解决方案。具体过程:1、开启hdfs与yarn集群。...

李白 667

《QT+PCL 第一章》:点云读取显示

点云读取显示一、核心代码二、QT设置三、效果展示 一、核心代码 二、QT设置 三、效果展示

阁楼 1万+

hadoop入门程序WordCount代码详解

输入文件: file1: hello world file2: hello hadoop 输出文件: file: world       1 hello        2 hadoop    1 以下是代码解释,后面有本人的源代码。 1.首先是Mapper类 2.Reducer类 3.Job类

MinG_Question的博客 616

【Nginx学习】5步揭秘Nginx邮件代理模块:邮件代理服务器的功能与实现

Nginx的邮件代理模块(Mail Proxy Module)允许Nginx作为邮件代理服务器,支持SMTP、POP3和IMAP协议。这使得Nginx可以作为一个高性能的邮件网关,用于过滤垃圾邮件、病毒扫描、负载均衡等任务。简单来说,Nginx在这里就像是一个邮递员,负责将邮件从发件人手中安全、快速地送到收件人手中。通过上述的解析,我们可以看到Nginx在邮件代理模块中的设计和实现。从配置解析、连接处理,到协议处理、SSL/TLS加密和日志记录,每一步都至关重要。

java专栏 1312

四旋翼飞行器建模(一)

四旋翼飞行器的姿态运动学和姿态动力学建模方法。

加斯顿工程师的博客 685

hadoop 经典入门wordcount

/**  *  hadoop经典入门wordcount 主要有三大步 1.编写mapper函数 2.编写reducer函数 3.配置  */ public class WordCount { /** * mapper类 *  * 这些泛型继承自hadoop自定义的序列化框架Writable *         Hadoop使用自己的序列化框架以减少集群间,网络流量提高性能 也可以在

NON blog 510

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

hadoop1-入门案例Grep|wordCount

download and install 官网下载 https://hadoop.apache.org/releases.html 版本 2.8.5,解压 cd /opt tar -zxvf hadoop-2.8.5.tar.gz 目录结构 Grep案例 2.测试 创建文件夹,将配置文件复制到input [root@localhost hadoop-2.8.5]# mkdir input [r...

橘子味的阳光 511

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

hadoop入门之wordcount小案例

1.创建工程file->new->other->map/reduce->map/reduce project ->next->project name -->finish 2.建立工程目录 3.写java文件3.1WCMapper.javapackage hadoop.example.wordcount;import java.io.IOException;import org.apache.h

qq_24005787的博客 1031

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Hadoop入门实践之从WordCount程序说起

这段时间需要学习Hadoop了,以前一直听说Hadoop,但是从来没有研究过,这几天粗略看完了《Hadoop实战》这本书,对Hadoop编程有了大致的了解。接下来就是多看多写了。以Hadoop自带的例子WordCount程序开始,来记录我的Hadoop学习过程。 Hadoop自带例子WordCount.java /** * Licensed under the Apache Lice...

weixin_30628801的博客 103

Hadoop入门案例WordCount

Hadoop入门案例WordCount,wordcount可以说是hadoop的入门案例,也是基础案例。主要体现思想就是mapreduce核心思想。

weixin_58414150的博客 1045

hadoop wordcount入门

配置 ubuntu14.04 伪分布式 hadoop1.04 wordcount入门程序, 摘自hadoop基础教程 import java.io.*; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.*; ...

weixin_30312563的博客 98

hadoop 超详细入门wordcount

概述今天博客收到了第一条评论,感觉很赞哦,最近一直在学习hadoop,主要是结合《实战Hadop:开启通向云计算的捷径(刘鹏)》,然后apache官网的doc(还是要以官网为主,虽然是全英文的,但总比那些版本都不对的博客来开得多得多),自己尝试了一下hadoop的hello world之后,有继续尝试了使用docker来模拟多机的集群分布式环境,最后再返回来看hadoop的核心框架hdfs和mapr

continueOo的博客 1648

Hadoop入门经典:WordCount

以下程序在hadoop1.2.1上测试成功。 本例先将源代码呈现,然后详细说明执行步骤,最后对源代码及执行过程进行分析。 一、源代码 package org.jediael.hadoopdemo.wordcount; import java.io.IOException; import java.util.StringTokenizer; import or...

apple01010105的博客 324

hadoop入门·wordcount

MapReduce实现wordcount Mapreduce实现主要是通过继承map和reduce类完成。在map中,让每一个节点对其邮件资源进行单词计数,构成键值对输出;reduce中接受键值对,对键相同的对进行合并,即可将各个节点的统计信息加以汇总。 将文件传到hdfs上就可以进行wordcount统计啦,下面是代码: import java.io.IOException; im...

weixin_41802971的博客 276

hadoop入门之WordCount程序

Mapper阶段: 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<LongWrita

mo 311
上一篇: 在Mysql中导入.sql文件
下一篇: 本体概述
ByebyeLazy
博客等级 码龄17年 3粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值