MapReduce——2.运行WordCount

本文详细介绍如何使用Hadoop运行WordCount程序,包括启动Hadoop、上传文件至HDFS、执行WordCount任务及查看结果的全过程。同时,针对运行过程中可能出现的错误提供了具体的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

hadoop实现了wordcount.java,并打好了jar包,在目录:

/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.2.jar

 

1.启动hadoop,start-all.sh

2.在hdfs上创建个待分析的文件

[root@master test]# hadoop fs -mkdir -p /test

[root@master test]# hadoop fs -put wordcount.txt /test

[root@master test]# hadoop fs -cat /test/wordcount.txt

3.运行wordcount

命令:hadoop jar jar包 类名 输入路径 输出路径

[root@master mapreduce]# hadoop jar hadoop-mapreduce-examples-3.1.2.jar wordcount /test/wordcount.txt /result

4.查看结果:

[root@master ~]# hadoop fs -ls /result

Found 2 items

-rw-r--r-- 1 root supergroup 0 2019-04-21 20:05 /result/_SUCCESS

-rw-r--r-- 1 root supergroup 1594 2019-04-21 20:05 /result/part-r-00000

[root@master ~]#

结果太长,截选了一些

[root@master ~]# hadoop fs -cat /result/part-r-00000

ANY 1

ASF 1

Apache 2

BASIS, 1

distributed 3

file 3

for 2

governing 1

in 2

one 1

or 3

the 9

this 3

to 3

under 4

use 1

with 2

you 2

[root@master ~]#

 

 

 

遇到错误:

1.hadoop找不到或无法加载主类

org.apache.hadoop.mapreduce.v2.app.MRAppMaster

思路:找不到class path

解决:

查看class path,把得到的结果配置到yarn-site.xml中

[root@hadoop01 ~]# hadoop classpath

yarn-site.xml

<property>

<name>yarn.application.classpath</name> <value>/export/servers/hadoop/etc/hadoop:/export/servers/hadoop/share/hadoop/common/lib/*:/export/servers/hadoop/share/hadoop/common/*:/export/servers/hadoop/share/hadoop/hdfs:/export/servers/hadoop/share/hadoop/hdfs/lib/*:/export/servers/hadoop/share/hadoop/hdfs/*:/export/servers/hadoop/share/hadoop/mapreduce/*:/export/servers/hadoop/share/hadoop/yarn:/export/servers/hadoop/share/hadoop/yarn/lib/*:/export/servers/hadoop/share/hadoop/yarn/*</value>

</property>

 

 

 

 

MapReduce是一种分布式计算模型,用于大规模数据集的并行处理。在C++中,虽然不是直接支持MapReduce的官方库,但我们可以通过Hadoop或Apache Spark等框架提供的API来实现类似的功能。WordCount是一个经典的MapReduce示例,它的目的是统计文本文件中每个单词出现的次数。 以下是简单的WordCount C++实现步骤: 1. **Mapper阶段**(Map函数): - 读取输入的一行文本(如"Hello World Hello") - 分割成单词数组,例如`{"Hello", "World", "Hello"}` - 对每个单词执行map操作,生成键值对`(word, 1)`,表示单词第一次出现。 ```cpp void map(std::string line, std::pair<std::string, int>& output) { std::istringstream iss(line); std::string word; while (iss >> word) { output.first = word; // 键 output.second = 1; // 值 emit(output); // 发送结果到中间件 } } ``` 2. **Reducer阶段**(Reduce函数): - 接收来自Mapper的所有相同键的值(在这里就是所有相同的单词),累加它们。 - 输出最终的键值对`(word, count)`。 ```cpp void reduce(const std::string& key, const std::vector<int>& values, std::pair<std::string, int>& output) { int sum = 0; for (int value : values) { sum += value; } output.first = key; output.second = sum; emit(output); // 发送到输出 } ``` 3. **使用框架提供的工具(如Hadoop Streaming)**将上述mapper和reducer程序连接起来,它会自动处理数据分发、排序、合并等工作。 4. **最后**,从reduce任务的输出中获取结果,即每个单词及其对应的出现次数。 请注意,这只是一个简化版本的解释,并未涉及所有细节,实际实现可能会涉及到序列化和反序列化、错误处理以及与Hadoop API的交互。此外,C++并不是首选的MapReduce语言,Python的PigLatin或Hadoop Streaming更适合这个场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值