【精选】Hadoop |
您所在的位置:网站首页 › 计算文本字数的方法有 › 【精选】Hadoop |
一、前情提要
上一篇文章介绍了MapReduce的Api调用方法以及eclipse的配置,这次我们就利用MapReduce对英语文章文件进行单词统计! 有需要的欢迎看看我的前一篇文章:MapReduce相关eclipse配置及Api调用 目录 一、前情提要二、前置条件三、创建Maven工程四、修改Windows系统变量五、编写MapReduce的jar包程序六、在Linux执行单词统计排序六、在Eclipse执行单词统计排序 二、前置条件 需要安装下载方法IDEA自备hadoop-eclipse-plugin-2.7.0.jar百度网盘下载 , 提取码:f259MobaXterm百度网盘下载,提取码:f64v确保Hadoop集群搭建成功,若还没搭建成功,欢迎看看我之前的文章:Hadoop集群搭建(步骤图文超详细版) 本次将会用到的,HDFS命令大全:Hadoop——HDF的Shell命令,建议大家在操作时看看!! 三、创建Maven工程打开IDEA工具,在左上角点击 “File”——“New”——“Project” ↓ 点击右上角的这个按钮,重新加载依赖库和配置文件↓ 右键桌面上的 “此电脑” 图标,点击 “属性” ,在环境变量中新建系统变量↓ 上一篇文章中,我们把 hadoop 整个文件从 linux 系统上压缩并解压至 Windows 上,现在我们打开这个 hadoop 文件,来到 /etc/hadoop/ 这个目录下,将以下四个文件拷贝复制到 IDEA 刚创建的项目中 四个文件↓ 紧接着我们创建一个包和三个类:WordMain.java、WordMapper.java、WordReduce.java 在这里我先来解释一下这三个包分别的用处↓ WordMain类是对任务的创建进行部分配置,主要是在Job中设定相应的Mapper类和Reduce类,这样任务在运行时才知道使用相应类进行处理;WordMain驱动类还可以对 MapReduce程序进行相应配置,让任务在haadoop集群运行所定义的配置中进行。 WordMapper类继承了Mapper方法,作用是将单词从大写到小写和a到z的规律进行排序 WordReduce类则是继承了Reducer方法,作用是将单词利用正则表达式进行拆分统计
WordMapper类代码↓ package com.mapreducetest; import java.io.IOException; import java.util.Date; import java.util.StringTokenizer; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Mapper; // 创建一个 WordMap类 继承于 Mapper抽象类 public class WordMapper extends Mapper { private final static IntWritable one = new IntWritable(1); private Text word = new Text(); // Mapper抽象类的核心方法,三个参数 public void map(Object key, // 首字符偏移量 Text value, // 文件的一行内容 Context context) // Mapper端的上下文,与 OutputCollector 和 Reporter 的功能类似 throws IOException, InterruptedException { String[] ars = value.toString().split("['.;,?| \t\n\r\f]"); for (String tmp : ars) { if (tmp == null || tmp.length() private IntWritable result = new IntWritable(); // 用于记录 key 的最终的词频数 // Reducer抽象类的核心方法,三个参数 public void reduce(Text key, // Map端 输出的 key 值 Iterable values, // Map端 输出的 Value 集合(相同key的集合) Context context) // Reduce 端的上下文,与 OutputCollector 和 Reporter 的功能类似 throws IOException, InterruptedException { int sum = 0; for (IntWritable val : values) // 遍历 values集合,并把值相加 { sum += val.get(); } result.set(sum); // 得到最终词频数 System.out.println(new Date().toGMTString()+":"+key+"出现了"+result); context.write(key, result); // 写入结果 } }三个文件都弄好后,在IDEA最右侧有一栏 Maven工具栏,打开它后在 Lifecycle 找到 “clean” 和 “package” 两个指令,先双击 clean 待程序完后,再双击 package 进行打包!接着就能在项目的 target 文件中看到我们打包好的 jar 包文件。 我们来到 linux 的 hadoop 主节点中,将刚刚打包的jar包和单词文本文件一同放 /home 目录下↓ 接着我们 HDFS 上创建一个 ainput 文件夹用于存放上传的文件,然后我们把单词文件上传HDFS↓ 别忘了给文件夹赋予可修改可读取可执行的权限,命令↓ hdfs dfs -mkdir /ainput hdfs dfs -put /home/wordstest.TXT /ainput hdfs dfs -chmod 777 /ainput重头戏来了!!我们利用上传的单词统计驱动jar包对单词文件进行单词统计,命令↓ hadoop jar MapReduceTest-1.0-SNAPSHOT.jar com.mapreducetest.WordMain /ainput /aoutput
格式:hadoop jar [jar文件位置] [jar主类] [HDFS输入位置] [HDFS输出位置] Tips:目前我就在jar所在目录,所以只需要填写jar包名称就好了,如果不在同目录下,记得加路径+jar包名
Tips:其中part-r-00000文件保存的是运行结果,能看到文件中的单词已从大写到小写和a到z的规律进行排序好了↓ 我们在Eclipse HDFS文件系统中,在 /user目录下新建一个文件夹 user,在 user 文件夹下,新建 wordinput 文件夹,上传 英文 文件↓ Tips:如果运行后,终端报错:java.io.IOException: (null) entry in command string: null chmod 0700 E:\tmp\hadoop\mapred\staging\te 解决方法:在C:\Windows\System32 目录下添加hadoop.dll 文件即可,hadoop.dll文件github下载地址 结果分析:我们打开 part-r-00000 这个文件,里面保存的是统计排序后的运行结果,能看到文件中的单词已从大写到小写和a到z的规律进行排序好了↓ 本次分享到此结束,谢谢大家阅读!! |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |