这里写自定义目录标题

  • 前提
  • 制作JAR包
  • 启动Hadoop
  • 将wordfile1.txt上传到HDFS
  • 重新上传文件进行词频统计和注意事项
  • HDFS常用命令

前提

    1.安装了Linux系统,并且安装了Hadoop下的两个组件HDFS和Mapreduce。2.已安装JAVA语言编译软件Eclipse3.新建一个txt文本文件用来存放单词

制作JAR包

创建一个Project name 为“WordCount”的Java Project,把mapreduce里面的jar包全部导入到里面,把common里面的jar包也全部导进去,不然执行下面的源代码会报错。创建好Project后,会看到一个名字为“WordCount”的工程,找到刚才创建好的工程名称“WordCount”,然后在该工程名称上点击鼠标右键,在弹出的菜单中选择“New–>Class”菜单。

​​

可以看出,Eclipse自动创建了一个名为“WordCount.java”的源代码文件,并且包含了代码“public class WordCount{}”,请清空该文件里面的代码,然后在该文件中输入完整的词频统计程序代码。

    编写JAVA代码
import java.io.IOException;
import java.util.Iterator;
import java.util.StringTokenizer;
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.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 {public WordCount() {}public static void main(String[] args) throws Exception {Configuration conf = new Configuration();String[] otherArgs = (new GenericOptionsParser(conf, args)).getRemainingArgs();if(otherArgs.length < 2) {System.err.println("Usage: wordcount <in> [<in>...] <out>");System.exit(2);}Job job = Job.getInstance(conf, "word count");job.setJarByClass(WordCount.class);job.setMapperClass(WordCount.TokenizerMapper.class);job.setCombinerClass(WordCount.IntSumReducer.class);job.setReducerClass(WordCount.IntSumReducer.class);job.setOutputKeyClass(Text.class);job.setOutputValueClass(IntWritable.class); for(int i = 0; i < otherArgs.length - 1; ++i) {FileInputFormat.addInputPath(job, new Path(otherArgs[i]));}FileOutputFormat.setOutputPath(job, new Path(otherArgs[otherArgs.length - 1]));System.exit(job.waitForCompletion(true)?0:1);}public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable> {private static final IntWritable one = new IntWritable(1);private Text word = new Text();public TokenizerMapper() {}public void map(Object key, Text value, Mapper<Object, Text, Text, IntWritable>.Context context) throws IOException, InterruptedException {StringTokenizer itr = new StringTokenizer(value.toString()); while(itr.hasMoreTokens()) {this.word.set(itr.nextToken());context.write(this.word, one);}}}
public static class IntSumReducer extends Reducer<Text, IntWritable, Text, IntWritable> {private IntWritable result = new IntWritable();public IntSumReducer() {}public void reduce(Text key, Iterable<IntWritable> values, Reducer<Text, IntWritable, Text, IntWritable>.Context context) throws IOException, InterruptedException {int sum = 0;IntWritable val;for(Iterator i$ = values.iterator(); i$.hasNext(); sum += val.get()) {val = (IntWritable)i$.next();}this.result.set(sum);context.write(key, this.result);}}
}

现在就可以编译上面编写的代码。可以直接点击Eclipse工作界面上部的运行程序的快捷按钮,当把鼠标移动到该按钮上时,在弹出的菜单中选择“Run as”,继续在弹出来的菜单中选择“Java Application”。

显示“Usage: wordcount […] ”,即表示运行成功

下面就可以把Java应用程序打包生成JAR包,部署到Hadoop平台上运行。现在可以把词频统计程序放在“/usr/local/hadoop/myapp”目录下。如果该目录不存在,可以使用如下命令创建:

cd /usr/local/hadoop
mkdir myapp

首先,请在Eclipse工作界面左侧的“Package Explorer”面板中,在工程名称“WordCount”上点击鼠标右键,在弹出的菜单中选择“Export”,如下图所示。

在该界面中,选择“Runnable JAR file”,然后,点击“Next>”按钮,弹出如下图所示界面。

会弹出两个警告窗口,可以忽略该界面的信息,直接点击界面右下角的“OK”按钮。至此,已经顺利把WordCount工程打包生成了WordCount.jar。可以到Linux系统中查看一下生成的WordCount.jar文件,可以在Linux的终端中执行如下命令:


cd /usr/local/hadoop/myapp
ls

可以看到,“/usr/local/hadoop/myapp”目录下已经存在一个WordCount.jar文件。

启动Hadoop

在运行程序之前,需要启动Hadoop,命令如下:

cd /usr/local/hadoop
./sbin/start-dfs.sh

将wordfile1.txt上传到HDFS

在启动Hadoop之后,需要首先删除HDFS中与当前Linux用户hadoop对应的input和output目录(即HDFS中的“/user/hadoop/input”和“/user/hadoop/output”目录),这样确保后面程序运行不会出现问题,具体命令如下:

cd /usr/local/hadoop
./bin/hdfs dfs -rm -r input
./bin/hdfs dfs -rm -r output

把之前新建的txt文件移动到hadoop目录下,可以使用mv命令,也可以直接在hadoop路径下直接使用vim命令创建一个新的txt文件,把需要统计词频的例子放进txt文件里面。这里txt命名为“wordfile1.txt”。在/usr/local/hadoop路径下执行以下命令,把wordfile1.txt文件放到hdfs上面去。

./bin/hdfs dfs -put ./wordfile1.txt input
现在,就可以在Linux系统中,使用hadoop jar命令运行程序,命令如下:
./bin/hadoop jar ./myapp/WordCount.jar input output

上面命令执行以后,当运行顺利结束时,屏幕上会显示类似如下的信息:

#查看词频统计结果
可以看出词频统计结果已经被写入了HDFS的“/user/hadoop/output”目录中,可以执行如下命令查看词频统计结果:

./bin/hdfs dfs -cat output/*

执行结果如图所示:

至此,Hadoop词频统计结果的步骤结束。

重新上传文件进行词频统计和注意事项

若需要更改例子,需要先执行一下命令进行删除

cd /usr/local/hadoop
./bin/hdfs dfs -rm -r input
./bin/hdfs dfs -rm -r output

然后在/usr/local/hadoop路径下

vim wordfile1.txt

修改完毕重新执行

./bin/hdfs dfs -put ./wordfile1.txt input
./bin/hadoop jar ./myapp/WordCount.jar input output
./bin/hdfs dfs -cat output/*

即可完成更新例子后的词频统计。

下面讨论一下将词频统计的结果导出到本地文件

./bin/hadoop jar ./myapp/WordCount.jar input output

执行完以上这句代码后表示词频统计结果已经被写入了HDFS的“/user/hadoop/output”目录中,可以使用HDFS的get命令将文件或目录从HDFS中的路径拷贝到本地文件路径。当前路径是/usr/local/hadooop.

./bin/hdfs dfs -get output/ ~/下载

注意output前不可加 “/” 。即“./bin/hdfs dfs -get /output/ ~/下载”是错误的。

这条命令表示把hdfs下的“output”文件夹复制到了“下载”的路径下面。如图所示:

打开output文件,里面的“part-r-00000”就是词频统计的结果,如图所示:

VirtualBox可通过安装增强功能把txt文件拖出来

HDFS常用命令

1 -mkdir
创建目录

Usage:hdfs dfs -mkdir [-p] < paths>

选项:-p
很像Unix mkdir -p,沿路径创建父目录。

2 -ls
查看目录下内容,包括文件名,权限,所有者,大小和修改时间
Usage:hdfs dfs -ls [-R] < args>
选项:-R
递归地显示子目录下的内容

3 -put
将本地文件或目录上传到HDFS中的路径
Usage:hdfs dfs -put < localsrc> … < dst>

4 -get
将文件或目录从HDFS中的路径拷贝到本地文件路径
Usage:hdfs dfs -get [-ignoreCrc] [-crc] < src> < localdst>
选项:
-ignorecrc选项复制CRC校验失败的文件。
-crc选项复制文件和CRC。

5 -du
显示给定目录中包含的文件和目录的大小或文件的长度,用字节大小表示,文件名用完整的HDFS协议前缀表示,以防它只是一个文件。
Usage:hdfs dfs -du [-s] [-h] URI [URI …]
选项:
-s选项将显示文件长度的汇总摘要,而不是单个文件。
-h选项将以“人类可读”的方式格式化文件大小(例如64.0m而不是67108864)

6 -dus
显示文件长度的摘要。
Usage:hdfs dfs -dus < args>
注意:不推荐使用此命令。而是使用hdfs dfs -du -s。

7 -mv
在HDFS文件系统中,将文件或目录从HDFS的源路径移动到目标路径。不允许跨文件系统移动文件。
Usage: hdfs dfs -mv URI [URI …] < dest>

8 -cp
在HDFS文件系统中,将文件或目录复制到目标路径下
Usage:hdfs dfs -cp [-f] [-p | -p [topax] ] URI [ URI …] < dest>
选项:
-f选项覆盖已经存在的目标。
-p选项将保留文件属性[topx](时间戳,所有权,权限,ACL,XAttr)。如果指定了-p且没有arg,则保留时间戳,所有权和权限。如果指定了-pa,则还保留权限,因为ACL是一组超级权限。确定是否保留原始命名空间扩展属性与-p标志无关。

9 -copyFromLocal
从本地复制文件到hdfs文件系统(与-put命令相似)
Usage: hdfs dfs -copyFromLocal < localsrc> URI
选项:
如果目标已存在,则-f选项将覆盖目标。

10 -copyToLocal
复制hdfs文件系统中的文件到本地 (与-get命令相似)
Usage: hdfs dfs -copyToLocal [-ignorecrc] [-crc] URI < localdst>

11 -rm
删除一个文件或目录
Usage:hdfs dfs -rm [-f] [-r|-R] [-skipTrash] URI [URI …]
选项:
如果文件不存在,-f选项将不显示诊断消息或修改退出状态以反映错误。
-R选项以递归方式删除目录及其下的任何内容。
-r选项等效于-R。
-skipTrash选项将绕过垃圾桶(如果已启用),并立即删除指定的文件。当需要从超配额目录中删除文件时,这非常有用。

12 -cat
显示文件内容到标准输出上。
Usage:hdfs dfs -cat URI [URI …]

13 -text
Usage: hdfs dfs -text
获取源文件并以文本格式输出文件。允许的格式为zip和TextRecordInputStream。

14 -touchz
创建一个零长度的文件。
Usage:hdfs dfs -touchz URI [URI …]

15 -stat
显示文件所占块数(%b),文件名(%n),块大小(%n),复制数(%r),修改时间(%y%Y)。
Usage:hdfs dfs -stat URI [URI …]

16 -tail
显示文件的最后1kb内容到标准输出
Usage:hdfs dfs -tail [-f] URI
选项:
-f选项将在文件增长时输出附加数据,如在Unix中一样。

17 -count
统计与指定文件模式匹配的路径下的目录,文件和字节数
Usage: hdfs dfs -count [-q] [-h] < paths>

18 -getmerge
将源目录和目标文件作为输入,并将src中的文件连接到目标本地文件(把两个文件的内容合并起来)
Usage:hdfs dfs -getmerge < src> < localdst> [addnl]
注:合并后的文件位于当前目录,不在hdfs中,是本地文件

19 -grep
从hdfs上过滤包含某个字符的行内容
Usage:hdfs dfs -cat < srcpath> | grep 过滤字段

Hadoop词频统计相关推荐

  1. Hadoop的改进实验(中文分词词频统计及英文词频统计)(1/4)

    声明: 1)本文由我bitpeach原创撰写,转载时请注明出处,侵权必究. 2)本小实验工作环境为Windows系统下的百度云(联网),和Ubuntu系统的hadoop1-2-1(自己提前配好).如不 ...

  2. Hadoop的改进实验(中文分词词频统计及英文词频统计)(4/4)

    声明: 1)本文由我bitpeach原创撰写,转载时请注明出处,侵权必究. 2)本小实验工作环境为Windows系统下的百度云(联网),和Ubuntu系统的hadoop1-2-1(自己提前配好).如不 ...

  3. 使用Hadoop自带的例子wordcount实现词频统计

    Hadoop中自带的hadoop-mapreduce-examples-2.7.6.jar含有一些事例,本文将用wordcount实现词频统计.具体步骤如下: 1. 启动Hadoop 切换到Hadoo ...

  4. hadoop使用mapreduce统计词频_hadoop利用mapreduce运行词频统计(非例程)

    1.运行环境 1.Ubuntu16.04单系统 2.hadoop-3.2.1 2.操作步骤 1.使用eclipse编写map reduce run 函数 2.导出jar包 3.将需要进行词频统计的文件 ...

  5. 云计算课程设计基于hadoop的词频统计设计

    云计算课程设计基于hadoop的词频统计设计实验报告 http://链接:https://pan.baidu.com/s/1ujUAg4q1sZZwmyeeKrNirg 提取码:maq7

  6. HADOOP集群大数据词频统计及设计比较(完整教程)

    ###如若发现错误,或代码敲错,望能评论指正!!! 通过百度网盘分享的文件:Hadoop相关需要的软件 链接:https://pan.baidu.com/s/1XzDvyhP4_LQzAM1auQCS ...

  7. Hadoop | MapReduce之 WordCount词频统计

    WordCount词频统计 词频统计 WordCountMap.java // Map类,继承于org.apache.hadoop.mapreduce.Mapper; public class Wor ...

  8. Hadoop的环境配置——搭建一个主机hadoop102,两个从机hadoop103,hadoop104,并运行分布式词频统计

    本文是跟着B站上的视频实现的,链接如下: https://www.bilibili.com/video/BV1Qp4y1n7EN?p=18 Hadoop运行环境搭建 重来3遍是正常的,这篇针对的是怎么 ...

  9. hadoop入门程序:词频统计

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qq_42437577/article/ ...

最新文章

  1. Navicat使用教程:使用Navicat Query Analyzer优化查询性能(第1部分)
  2. 大型系统OA--技术
  3. PyTorch Upsample() 函数实现上采样
  4. 【已解决】FileNotFoundError: [Errno 2] No such file or directory:_Python系列学习笔记
  5. 如何配置Filter过滤器处理JSP中文乱码
  6. js实现数组降维算法[不准用Array.prototype.flat的api]
  7. c语言拔河分组回溯算法,【阅读下面的文字,完成10—12题。文明的共相回溯我们历史演-查字典问答网...
  8. linux 6.4 能挂载最大多大硬盘,CentOS6.4的ext4文件系统如何实现挂载大于16TB的磁盘分区...
  9. 芯片短缺蔓延至手机市场:骁龙888短缺 三星中低端机型生产受阻
  10. oracle常用系统变量,Oracle环境变量
  11. zabbix-server无法启动
  12. 把DataTable转换为泛型ListT或是JSON
  13. 怎么用EasyRecovery恢复sd卡中的数据
  14. tomcat 日志catalina.out 按天自动分割 设定时任务定时清除
  15. 用傅里叶分析得到频域信息 MATLAB,信号分析实验_傅里叶matlab实现.doc
  16. 电力监控系统的研究与应用
  17. 远程访问centos系统
  18. uml 流程图符号 含义
  19. 创业一年半项目经验分享
  20. SSH框架搭建和整合(struts2、spring4、hibernate5)

热门文章

  1. JS逗号运算符的用法详解
  2. 黑莓能否挑iphone下马,制造电信神话?
  3. 深度学习网络评价指标——IoU、Precision、Recall,mIoU、mPA、Accuracy和f-score的定义,区别和联系
  4. 超声波换能器产品选用说明
  5. ansible(1)---师傅领进门
  6. iOS - App Extension 整体总结
  7. 系统的可靠度计算公式
  8. location 定位
  9. Hadoop集群搭建教程(详细)
  10. 体验管理|关于客户旅程编排(CJO),你不知道的事!