如何执行hadoop自带的示例程序,完成单词的统计
时间: 2024-09-22 10:00:58 浏览: 65
在Hadoop中,要执行自带的示例程序(WordCount),你需要按照以下步骤进行:
1. **启动集群**:首先,确保Hadoop环境已经安装并配置好,包括Hadoop主节点(通常是 Namenode)和至少一个工作节点。启动Hadoop守护进程,如ResourceManager、NodeManager 和 DataNode。
2. **复制数据到HDFS**:将你想要分析的数据文件(如text.txt)从本地文件系统拷贝到HDFS的输入目录,通常默认为`/user/hadoop/input`。可以用`hadoop fs -put`命令来复制。
3. **编写WordCount作业**:Hadoop提供了一个名为`mapred-examples.jar`的jar包,包含WordCount程序。你可以使用`hadoop jar`命令运行它,像这样:
```
hadoop jar /path/to/mapred-examples.jar wordcount /input/path /output/path
```
其中,`/input/path`是输入文件路径,`/output/path`是结果输出路径,格式将是 `<jobname>-<partition>`。
4. **等待作业完成**:作业会在Hadoop集群上并行处理,完成后你可以在HDFS的输出目录中看到统计的结果文件。
5. **查看结果**:最后,你可以使用`hadoop fs -cat`命令来查看生成的文本文件,显示每个单词及其计数。
相关问题
在hdfs选择sub1目录下的文档,利用hadoop自带的字数统计程序,完成字数统计。
在HDFS(Hadoop Distributed File System)环境中,如果你想要从`sub1`目录下选取文件并使用Hadoop自带的`wordcount`程序进行字数统计,首先你需要按照Hadoop MapReduce的工作流程来进行:
1. **准备阶段**:
- 配置Hadoop环境,包括Hadoop bin目录在系统的PATH中,以及`conf`目录包含核心配置文件如`core-site.xml`, `hdfs-site.xml`等。
- 确保Hadoop已经安装好,包括Hadoop Distributed File System (HDFS) 和MapReduce框架。
2. **创建InputFormat**:
- 在`sub1`目录下,`wordcount`程序需要将文件作为输入。你可以创建一个自定义的InputFormat,它会指定从特定路径开始扫描。例如,使用`TextInputFormat`(如果文件都是文本格式),或者`SequenceFileInputFormat`(如果文件已经被键值对序列化)。
3. **编写Mapper**:
- 编写一个Mapper函数,该函数负责读取文件内容,将其分解成单词,然后输出到中间结果(key-value对)。Key通常是空字符串(`""`),Value是单词。
4. **编写Reducer**:
- Reducer函数接收Mapper的所有输出,累加每个单词的数量。由于默认情况下,`wordcount`程序的Reducer就是简单的计数器,所以不需要额外编写。
5. **提交Job**:
- 创建一个JobConf实例,设置Mapper和Reducer类,指定输入路径(`sub1`目录),然后使用`JobClient`提交Job到Hadoop集群进行执行。
6. **查看结果**:
- Job完成后,可以在Hadoop JobTracker的Web界面查看任务状态和结果,或者使用命令行工具`hadoop job -list`找到你的Job并检查其输出路径。
这里给出一个简化的伪代码示例:
```java
import java.io.IOException;
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;
public class Sub1WordCount {
public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable> {
@Override
protected void map(Object key, Text value, Context context) throws IOException, InterruptedException {
for (String line : value.toString().split("\\s+")) {
context.write(line, new IntWritable(1)); // 输出单词和次数
}
}
}
public static class IntSumReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
private IntWritable result = new IntWritable();
@Override
protected 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();
Job job = Job.getInstance(conf, "Sub1WordCount");
job.setJarByClass(Sub1WordCount.class);
FileInputFormat.addInputPath(job, new Path("hdfs://<your-hdfs-url>/sub1")); // 指定输入路径
FileOutputFormat.setOutputPath(job, new Path("hdfs://<your-hdfs-url>/output")); // 指定输出路径
job.setMapperClass(TokenizerMapper.class);
job.setReducerClass(IntSumReducer.class);
job.waitForCompletion(true);
}
}
```
提交hadoop自带MR实例中的词频统计任务至YARN运行,统计(2)中上传文本,输出目录为hdfs用户家目录下的目录output,在终端显示词频统计的结果
好的,让我来回答你的问题。首先,为了提交Hadoop自带MR实例中的词频统计任务至YARN运行,你需要在命令行中输入以下命令:
```
hadoop jar /path/to/hadoop-mapreduce-examples.jar wordcount /path/to/input/directory /path/to/output/directory
```
其中,`/path/to/hadoop-mapreduce-examples.jar` 是 Hadoop MapReduce 示例程序的路径,你可以在 Hadoop 安装目录下的 `share/hadoop/mapreduce` 目录中找到该文件;`wordcount` 是词频统计任务的名称;`/path/to/input/directory` 是输入目录的路径,即(2)中上传的文本所在的目录;`/path/to/output/directory` 是输出目录的路径,即 HDFS 用户家目录下的 `output` 目录。
接下来,你需要在终端中输入以下命令,以显示词频统计的结果:
```
hadoop fs -cat /path/to/output/directory/part-r-00000
```
其中,`/path/to/output/directory/part-r-00000` 是词频统计结果所在的文件路径,该文件的名称以 `part-r-00000` 结尾。这个文件包含了所有单词和它们在文本中出现的次数,你可以使用 `cat` 命令将其显示在终端中。
阅读全文