hadoopget命令(修改hadoop自带的wordcount代码,实现输出指定单词及其数量)

本文目录
- 修改hadoop自带的wordcount代码,实现输出指定单词及其数量
- hadoop中常用的命令
- 如何在Windows下面运行hadoop的MapReduce程序
- hadoop常用shell命令怎么用
- hadoop怎么保存配置文件
- 什么情况下命令 “hadoop fs
修改hadoop自带的wordcount代码,实现输出指定单词及其数量
首先你需要指定你想要的单词是什么,可以通过命令行指定,然后保存在Configuration中。然后map任务和reduce任务只需要改一处就可以了,就是在获取到key(单词作为key)时从Configuration中获取指定的单词,如果相同则使用context.write输出,不相同直接不输出即可,这样输出的就是指定的单词的数据
hadoop中常用的命令
1、查看指定目录下内容
hadoop dfs –ls
eg: hadoop dfs –ls /user/wangkai.pt
2、打开某个已存在文件
hadoop dfs –cat
eg:hadoop dfs -cat /user/wangkai.pt/data.txt
3、将本地文件存储至hadoop
hadoop fs –put
hadoop fs –put /home/t/file.txt /user/t
(file.txt是文件名)
4、将本地文件夹存储至hadoop
hadoop fs –put
hadoop fs –put /home/t/dir_name /user/t
(dir_name是文件夹名)
5、将hadoop上某个文件down至本地已有目录下
hadoop fs -get
hadoop fs –get /user/t/ok.txt /home/t
6、删除hadoop上指定文件
hadoop fs –rm
hadoop fs –rm /user/t/ok.txt
7、删除hadoop上指定文件夹(包含子目录等)
hadoop fs –rm
hadoop fs –rmr /user/t
8、在hadoop指定目录内创建新目录
hadoop fs –mkdir /user/t
9、在hadoop指定目录下新建一个空文件
使用touchz命令:
hadoop fs -touchz /user/new.txt
10、将hadoop上某个文件重命名
使用mv命令:
hadoop fs –mv /user/test.txt /user/ok.txt (将test.txt重命名为ok.txt)
11、将hadoop指定目录下所有内容保存为一个文件,同时down至本地
hadoop dfs –getmerge /user /home/t
12、将正在运行的hadoop作业kill掉
hadoop job –kill
如何在Windows下面运行hadoop的MapReduce程序
1. 首先登入hadoop 集群里面的一个节点, 创建一个java源文件, 偷懒起见, 基本盗用官方的word count (因为本文的目的是教会你如何快编写和运行一个MapReduce程序, 而不是如何写好一个功能齐全的MapReduce程序)
内容如下:
import java.io.IOException;
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 myword {
public static class TokenizerMapper
extends Mapper《Object, Text, Text, IntWritable》{
private final static IntWritable one = new IntWritable(1);
private Text word = new Text();
public void map(Object key, Text value, Context context
) throws IOException, InterruptedException {
StringTokenizer itr = new StringTokenizer(value.toString());
while (itr.hasMoreTokens()) {
word.set(itr.nextToken());
context.write(word, one);
}
}
}
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;
for (IntWritable val : values) {
sum += val.get();
}
result.set(sum);
context.write(key, result);
}
}
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》 《out》’);
System.exit(2);
}
Job job = new Job(conf, ’word count’);
job.setJarByClass(myword.class);
job.setMapperClass(TokenizerMapper.class);
job.setCombinerClass(IntSumReducer.class);
job.setReducerClass(IntSumReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
FileInputFormat.addInputPath(job, new Path(otherArgs));
FileOutputFormat.setOutputPath(job, new Path(otherArgs));
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
}
与官方版本相比, 主要做了两处修改
1) 为了简单起见,去掉了开头的 package org.apache.hadoop.examples;
2) 将类名从 WordCount 改为 myword, 以体现是我们自己的工作成果 :)
2. 拿到hadoop 运行的class path, 主要为编译所用
运行命令
hadoop classpath
保存打出的结果,本文用的hadoop 版本是Pivotal 公司的Pivotal hadoop, 例子:
/etc/gphd/hadoop/conf:/usr/lib/gphd/hadoop/lib/*:/usr/lib/gphd/hadoop/.//*:/usr/lib/gphd/hadoop-hdfs/./:/usr/lib/gphd/hadoop-hdfs/lib/*:/usr/lib/gphd/hadoop-hdfs/.//*:/usr/lib/gphd/hadoop-yarn/lib/*:/usr/lib/gphd/hadoop-yarn/.//*:/usr/lib/gphd/hadoop-mapreduce/lib/*:/usr/lib/gphd/hadoop-mapreduce/.//*::/etc/gphd/pxf/conf::/usr/lib/gphd/pxf/pxf-core.jar:/usr/lib/gphd/pxf/pxf-api.jar:/usr/lib/gphd/publicstage:/usr/lib/gphd/gfxd/lib/gemfirexd.jar::/usr/lib/gphd/zookeeper/zookeeper.jar:/usr/lib/gphd/hbase/lib/hbase-common.jar:/usr/lib/gphd/hbase/lib/hbase-protocol.jar:/usr/lib/gphd/hbase/lib/hbase-client.jar:/usr/lib/gphd/hbase/lib/hbase-thrift.jar:/usr/lib/gphd/hbase/lib/htrace-core-2.01.jar:/etc/gphd/hbase/conf::/usr/lib/gphd/hive/lib/hive-service.jar:/usr/lib/gphd/hive/lib/libthrift-0.9.0.jar:/usr/lib/gphd/hive/lib/hive-metastore.jar:/usr/lib/gphd/hive/lib/libfb303-0.9.0.jar:/usr/lib/gphd/hive/lib/hive-common.jar:/usr/lib/gphd/hive/lib/hive-exec.jar:/usr/lib/gphd/hive/lib/postgresql-jdbc.jar:/etc/gphd/hive/conf::/usr/lib/gphd/sm-plugins/*:
3. 编译
运行命令
javac -classpath xxx ./myword.java
xxx部分就是上一步里面取到的class path
运行完此命令后, 当前目录下会生成一些.class 文件, 例如:
myword.class myword$IntSumReducer.class myword$TokenizerMapper.class
4. 将class文件打包成.jar文件
运行命令
jar -cvf myword.jar ./*.class
至此, 目标jar 文件成功生成
5. 准备一些文本文件, 上传到hdfs, 以做word count的input
例子:
随意创建一些文本文件, 保存到mapred_test 文件夹
运行命令
hadoop fs -put ./mapred_test/
确保此文件夹成功上传到hdfs 当前用户根目录下
6. 运行我们的程序
运行命令
hadoop jar ./myword.jar myword mapred_test output
顺利的话, 此命令会正常进行, 一个MapReduce job 会开始工作, 输出的结果会保存在 hdfs 当前用户根目录下的output 文件夹里面。
至此大功告成!
如果还需要更多的功能, 我们可以修改前面的源文件以达到一个真正有用的MapReduce job。
但是原理大同小异, 练手的话, 基本够了。
一个抛砖引玉的简单例子, 欢迎板砖。
hadoop常用shell命令怎么用
一、常用的hadoop命令
1、hadoop的fs命令
#查看hadoop所有的fs命令
1
hadoop fs
#上传文件(put与copyFromLocal都是上传命令)
1
2
hadoop fs -put jdk-7u55-linux-i586.tar.gz hdfs://hucc01:9000/jdk
hadoop fs -copyFromLocal jdk-7u55-linux-i586.tar.gz hdfs://hucc01:9000/jdk
#下载命令(get与copyToLocal都是下载命令)
1
2
hadoop fs -get hdfs://hucc01:9000/jdk jdk1.7
hadoop fs -copyToLocal hdfs://hucc01:9000/jdk jdk1.7
#将本地一个或者多个文件追加到hdfs文件中(appendToFile)
1
hadoop fs -appendToFile install.log /words
#查询hdfs的所有文件(ls)
1
hadoop fs -ls /
#帮助命令(help)
1
hadoop fs -help fs
#查看hdfs文件的内容(cat和text)
1
2
hadoop fs -cat /words
hadoop fs -text /words
#删除hdfs文件(rm)
1
hadoop fs -rm -r /words
#统计hdfs文件和文件夹的数量(count)
1
hadoop fs -count -r /
#合并hdfs某个文件夹的文件,并且下载到本地(getmerge)
1
hadoop fs -getmerge / merge
#将本地文件剪切到hdfs,相当于对本地文件上传后再删除(moveFormLocal)
1
hadoop fs -moveFromLocal words /
#查看当前文件系统的使用状态(df)
1
hadoop fs -df
二、常用的hdfs命令(这个用的比较多)
用法跟hadoop命令一样,推荐2.0之后使用hdfs命令
1
hdfs dfs
hadoop怎么保存配置文件
从安装Hadoop 单机版的配置说起
在这里配置了Hadoop的文件目录
1. 启动Hadoop 并上传文件
上传文件命令:hadoop fs -put hadoop-2.9.2.tar.gz hdfs://hdgroup01:9000/
可以看到已经上传了文件了
2. 删除本地文件
如果删除后你在浏览器刷新页面 然后还能下载 说明 肯定存在其他地方
使用命令下载也可以:hadoop fs -get hdfs://hdgroup01:9000/hadoop-2.9.2.tar.gz
3. hdfs 文件存放的位置
通过查看 安装时配置的hadoop文件目录 上传文件后的结果
这个dfs 应该见过的 就是在格式化namenode的时候 在我们配置的文件中创建了dfs 文件夹
4. 上传一个349.5M 的文件
5. 进到hadoop 本地存储文件中查看 存储格式
上传的文件为349.47M 被切分成了 三块 因为是单机版 所以都存放到了 这台主机的文件系统中
可以看到 hadoop 块大小为128M(默认) 超过128M的文件会被切成不同的块存放
总结
1. hdfs是是通过分布式集群来存储文件,为客户端提供了一个便捷的访问方式 虚拟的目录结构
2. 文件存储到hdfs集群中的时候是被切分成block的 默认为128M
3. 文件的block 存放在若干台datanode节点中
4. hdfs文件系统中的文件与真实的block之间有映射关系,由namenode管理
5. 每个block 在集群中会存储多个副本,好处是可以提高数据的可靠性,还可以提高访问的吞吐量。
什么情况下命令 “hadoop fs
在hadoop环境下执行 hadoop fs --help ,里面有相关的命令提示,简单的有ls,du,cp,mv等
跟shell一样,只不过是查看或者操作hdfs文件
Usage: java FsShell
自己试试就可以了,不复杂

本文相关文章:
origin下载慢解决办法(origin平台下载速度慢 提高下载速度方法介绍)
2026年10月13日 11:40
花体文字转化器(帮忙把I love you forever转换成花体,,要下面这种效果~~谢谢)
2026年8月14日 18:30
ps人像磨皮插件(PS磨皮滤镜软件Portraiture3汉化安装教程及使用方法图解)
2026年8月10日 20:50
solidworks2012安装(同一台电脑怎么装两个不同的solidworks版本,比如2015和2012)
2026年7月18日 07:10
reactor core教程(认识Spring - Reactor框架)
2026年10月18日 12:20
record可数吗(“record“是可数名词 当它是“记录“的意思时是可数还是不可数)
2026年10月16日 21:30
怎么查看oracle是否安装成功(怎么判断oracle是否安装成功)
2026年10月1日 12:10
kindeditor漏洞jsp(jsp使用kindeditor上传文件)
2026年9月30日 08:20
placeholder标签(HTML里input标签里的placeholder、for属性的作用)
2026年9月26日 19:40
更多文章:
jquery动态添加表格行(如何通过jquery动态给表格添加一行)
2026年10月23日 00:30
cmake命令行参数(CMake (三)cmake 在工程中的用法)
2026年10月23日 00:00
linux数据备份命令(Linux系统下常用的数据备份方法有哪些)
2026年10月22日 23:20
executequery返回值(ExecuteQuery(sql)的返回值)
2026年10月22日 23:00
舍曲林吃了一周越来越严重(我母亲77岁,服用舍曲林一周,开始半片,4天后改为1片,第三天开始失眠,第四天出现乏力、食欲下降,)
2026年10月22日 21:00
flash player电脑版下载(FLASH PLAYER在哪下能安全的下载呢)
2026年10月22日 19:20


