Hadoop Streaming是一个非常有用的工具,它能够使得任何用编程语言实现的程序能够在Hadoop MapReduce框架中运行。Hadoop Streaming利用标准输入和标准输出来实现程序与MapReduce框架之间的通信。这个特性使得已经存在的程序,比如用C++、PHP或Python等语言编写的程序,可以更容易地迁移到Hadoop平台上,从而提高了Hadoop的扩展性。接下来,我将详细介绍如何使用C++、PHP和Python语言实现Hadoop的WordCount实例。 以C++语言实现WordCount为例: 1. 在C++中实现WordCount的Mapper程序(mapper.cpp): ```cpp #include <iostream> #include <string> using namespace std; int main() { string key; string value = "1"; while (cin >> key) { cout << key << "\t" << value << endl; } return 0; } ``` Mapper的职责是读取文本输入,并输出每行的第一个单词和数字1,表明这个单词出现了一次。 2. 接下来,实现WordCount的Reducer程序(reducer.cpp): ```cpp #include <iostream> #include <string> #include <map> #include <iterator> using namespace std; int main() { string key; string value; map<string, int> word2count; map<string, int>::iterator it; while (cin >> key) { cin >> value; it = word2count.find(key); if (it != word2count.end()) { (it->second)++; } else { word2count.insert(make_pair(key, 1)); } } for (it = word2count.begin(); it != word2count.end(); ++it) { cout << it->first << "\t" << it->second << endl; } return 0; } ``` Reducer程序接收Mapper的输出,并对所有相同的单词进行汇总,最终输出单词及其出现的次数。 为了在Linux环境下运行C++编写的WordCount程序,需要先在线安装C++环境(例如使用gcc-c++),然后编译C++源文件生成可执行文件。之后,可以进行本地测试。如果本地测试没有问题,程序就可以在Hadoop集群上运行了。 3. 本地测试C++实现的WordCount: ```bash cat djt.txt | ./mapper | sort | ./reducer ``` 4. 集群运行: ```bash hadoop jar /usr/java/hadoop/share/hadoop/tools/lib/hadoop-streaming-2.2.0.jar \ -D mapred.reduce.tasks=2 \ -mapper "./mapper" \ -reducer "./reducer" \ -file mapper -file reducer \ -input /dajiangtai/djt.txt \ -output /dajiangtai/out ``` 如果出现预期的结果,说明C++语言成功实现了WordCount。 下面,让我们看看PHP语言实现WordCount的实例: 1. PHP实现WordCount的Mapper(wc_mapper.php): ```php #!/usr/bin/php error_reporting(E_ALL ^ E_NOTICE); $word2count = array(); while (($line = fgets(STDIN)) !== false) { $line = trim($line); foreach ($words as $word) { echo $word . "\t" . "1" . PHP_EOL; } } ``` Mapper程序负责读取输入文本,并将每行文本分割成单词,然后输出单词和计数1。 2. PHP实现WordCount的Reducer(wc_reducer.php): ```php #!/usr/bin/php error_reporting(E_ALL ^ E_NOTICE); $word2count = array(); while (($line = fgets(STDIN)) !== false) { $line = trim($line); $value = 1; if (isset($word2count[$line])) { $word2count[$line]++; } else { $word2count[$line] = $value; } } foreach ($word2count as $word => $count) { echo $word . "\t" . $count . PHP_EOL; } ``` Reducer程序用于对Mapper的输出进行汇总,计算每个单词出现的总次数,并输出结果。 这些代码示例演示了如何使用不同的编程语言在Hadoop Streaming框架中实现基本的MapReduce程序。需要注意的是,这些示例假设读者已经熟悉了Hadoop的基本操作和MapReduce编程模型,而且在执行集群运行之前,必须先在本地进行充分的测试,以保证程序能够在分布式环境中正确地执行。
剩余9页未读,继续阅读
- sen331232018-04-16就10页,每个语言一个demo
- 粉丝: 46
- 资源: 82
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 【全年行事历】5团建医药箱常备药清单.docx
- 【全年行事历】4团建活动物料清单.xlsx
- 【全年行事历】7团建活动策划书.docx
- 【全年行事历】ZOL团建活动策划方案.pptx
- 【全年行事历】XXX团建活动计划.pptx
- 【全年行事历】86团建活动培训PPT完.pptx
- 【全年行事历】公司年度活动计划.xls
- 【全年行事历】大型企业公司活动进度表.xlsx
- 【全年行事历】公司户外团建活动方案-某公司.pptx
- 【全年行事历】公司团建费用统计表.xlsx
- 【全年行事历】公司团建拓展行程方案-模版.docx
- 【全年行事历】公司全年团建活动方案.xls
- 【全年行事历】公司员工一年度关怀方案预算.xls
- 【全年行事历】公司团建活动项目介绍.pptx
- 【全年行事历】行政部年度活动策划及经费预算.xlsx
- 【全年行事历】行政全年活动筹备规划.xlsx