栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

本地运行Hadoop WordCount程序练习

本地运行Hadoop WordCount程序练习

^_^ 1.配置本地hadoop

Hadoop2.7.5链接:https://pan.baidu.com/s/12ef3m0CV21NhjxO7lBH0Eg
提取码:hhhh
将下载的hadoop包解压到D盘下方便找

然后右击此电脑点属性→点击右边的高级系统设置→点击环境变量→选到下面的Path,点编辑再点新建→进入hadoop包解压过后的下一级bin目录,把完整的路径复制到里面



然后注销一下机器 ,使文件生效

然后可以win+R 打开命令行 输入:hadoop -version 看一下版本 输出版本信息就没问题了

2.配置Maven 阿里源

Maven3.6链接:https://pan.baidu.com/s/1_4MT6v2RZMiSccsUoMX_TQ
提取码:hhhh
将下载的maven包解压到D盘下方便找

然后右击此电脑点击属性→点击右边的高级系统设置→点击环境变量→选到下面的Path,点编辑再点新建→进入maven包解压过后的下一级bin目录,把完整的路径复制到里面
设置阿里云仓库:进入到Maven目录的conf目录下,有一个settings.xml文件,把下面这段代码添加进去

	
      nexus-aliyun
      *
      Nexus aliyun
      http://maven.aliyun.com/nexus/content/groups/public
    
  
安装JDK1.8

如果已经安装了可以跳过此步骤

机器原本就有jDK但是需要使用另一个JDK版本的安装步骤:

第一步 把下载好的JDK包解压到D盘目录下,安装JDK 选择安装目录 安装过程中会出现两次 安装提示 。第一次是安装 JDK ,第二次是安装 jre 。建议两个都安装在同一个java文件夹中的不同文件夹中。

第二步 安装完JDK后配置环境变量 计算机→属性→高级系统设置→环境变量

第三步 系统变量→新建 JAVA_HOME 变量 。 变量值填写jdk的安装目录 : D:Javajdk1.8.0

第五步 系统变量→寻找 Path 变量→编辑→新建 %JAVA_HOME%bin

机器没有JDK,需要安装JDK:

第一步 : 把下载好的JDK包解压到D盘目录下,安装JDK 选择安装目录 安装过程中会出现两次 安装提示 。第一次是安装 JDK ,第二次是安装 jre 。建议两个都安装在同一个java文件夹中的不同文件夹中。

第二步: 安装完JDK后配置环境变量 计算机→属性→高级系统设置→环境变量

第三步 : 系统变量→新建 JAVA_HOME 变量 。 变量值填写jdk的安装目录 : D:Javajdk1.8.0

第四步: 系统变量→寻找 Path 变量→编辑→新建 %JAVA_HOME%bin

再新建一个 变量值填: %JAVA_HOME%jrebin

第五步: 系统变量→新建 CLASSPATH 变量

变量值填写 .;%JAVA_HOME%lib;%JAVA_HOME%libtools.jar(注意最前面有一点)

win+R 打开CMD命令行 输入java -version 若显示版本信息则安装成功


开始写MR程序

第一步:打开IDEA→New Project→ 选择Maven→ 看到上面有一个Project SDK 在这里可以选择JDK版本 我们选择1.8→点击下面的Next

第二步:设置一下Maven项目的名字 ,Name 那一栏填写 MyMRCode→ Finsh

第三步:Maven项目创建后会创建一个 pom.xml 文件,然后把下面的代码插入到的标签内(使用的hadoop是什么版本就把下面的版本号修改一下,比如我使用的是2.7.5,就把标签里的内容修改成2.7.5):


		
			org.apache.hadoop
			hadoop-common
			2.7.5
		
		
			org.apache.hadoop
			hadoop-hdfs
			2.7.5
		
		
			org.apache.hadoop
			hadoop-client
			2.7.5
		
		
			org.apache.hadoop
			hadoop-mapreduce-client-core
			2.7.5
		
		
			junit
			junit
			4.12
		

然后它会自己下载所需要的资源包,等待下面的进度条加载完就可以进一步写MR程序了!


WordCount案例

然后在D盘的mr/input/目录下新建一个word.txt文件,并在里面写一些单词

Hello Hadoop
Hello Word
Hello MapReduce

​ 在Maven项目的src文件夹下新建一个package -> 在这个包下面新建一个WordCountMapper类

Map阶段代码实例:

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 WordCountMapper extends Mapper {
	
	@Override
	protected void map(LongWritable key, Text value, Mapper.Context context)
			throws IOException, InterruptedException {
		// 拿到传入进来的一行内容,把数据类型转换为String
		String line = value.toString();
		// 将这行内容按照分隔符切割
		String[] words = line.split(" ");
		// 遍历数组,每出现一个单词就标记一个数组1 例如:<单词,1>
		for (String word : words) {
			// 使用MR上下文context,把Map阶段处理的数据发送给Reduce阶段作为输入数据
			context.write(new Text(word), new IntWritable(1));
			//第一行 Hello Hadoop 发送出去的是 
		}
	}
}

​ 在新建一个WordCountReducer 类

​ 代码实例:


import java.io.IOException;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;
public class WordCountReducer extends Reducer {

	protected void reduce(Text key, Iterable value,
			Reducer.Context context) throws IOException, InterruptedException {
		//定义一个计数器
		int count = 0;
		//遍历一组迭代器,把每一个数量1累加起来就构成了单词的总次数
		
		//
		for (IntWritable iw : value) {
			count += iw.get();
		}
		context.write(key, new IntWritable(count));
	}
}

​ 再写一个Runner类:


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 Runner {

	public static void main(String[] args) throws Exception {
		// 通过Job来封装本次MR的相关信息
		Configuration conf = new Configuration();
		
		Job wcjob = Job.getInstance(conf);

		// 指定MR Job jar包运行主类
		wcjob.setJarByClass(Runner.class);
		// 指定本次MR所有的Mapper Reducer类
		wcjob.setMapperClass(WordCountMapper.class);
		wcjob.setReducerClass(WordCountReducer.class);

		// 设置我们的业务逻辑 Mapper类的输出 key和 value的数据类型
		wcjob.setMapOutputKeyClass(Text.class);
		wcjob.setMapOutputValueClass(IntWritable.class);

		// 设置我们的业务逻辑 Reducer类的输出 key和 value的数据类型
		wcjob.setOutputKeyClass(Text.class);
		wcjob.setOutputValueClass(IntWritable.class);
		
		//设置Combiner组件
		wcjob.setCombinerClass(WordCountCombiner.class);
		

		// 指定要处理的数据所在的位置
		FileInputFormat.setInputPaths(wcjob, "D:/mr/input"); 
		// 指定处理完成之后的结果所保存的位置
		FileOutputFormat.setOutputPath(wcjob, new Path("D:/mr/output"));

		// 提交程序并且监控打印程序执行情况
		boolean res = wcjob.waitForCompletion(true);
		System.exit(res ? 0 : 1);
	}
}

最后再运行一下这个Runner程序!
然后在D盘的output目录下可以查看生成的文件.

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/422338.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号