知识点
相关文章
更多最近更新
更多【Hadoop学习】在伪分布式Hadoop上实践word count程序——C/C++ Pipes版本
2019-03-28 13:21|来源: 网络
就像上一篇文章(http://www.linuxidc.com/Linux/2012-10/72857.htm )中说的,其实最大的障碍在于Hadoop自带的pipes静态库和动态库都是为linux平台的,而不是为MacOS平台的。在MacOS下,想要使用pipes,需要重新编译库文件。编译过程和方法见上一篇博文。
其他的,似乎没有太多好说的。我就列出代码吧。
hadoopWordCountPipe.cpp的内容如下:
- // the header files of haddop
- #include "hadoop/Pipes.hh"
- #include "hadoop/TemplateFactory.hh"
- #include "hadoop/StringUtils.hh"
- #include <string>
- #include <vector>
- using namespace std;
- const string WORDCOUNT = "WORDCOUNT";
- const string INPUT_WORDS = "INPUT_WORDS";
- const string OUTPUT_WORDS = "OUTPUT_WORDS";
- class WordCountMap: public HadoopPipes::Mapper
- {
- public:
- HadoopPipes::TaskContext::Counter * inputWords;
- WordCountMap (HadoopPipes::TaskContext & context)
- {
- inputWords = context.getCounter(WORDCOUNT, INPUT_WORDS);
- }
- void map (HadoopPipes::MapContext & context)
- {
- vector<string> WordVec = HadoopUtils::splitString (context.getInputValue(), " ");
- for (int i=0; i<(int)WordVec.size(); i++)
- context.emit (WordVec.at(i), "1");
- context.incrementCounter (inputWords, WordVec.size());
- }
- };
- class WordCountReduce: public HadoopPipes::Reducer
- {
- public:
- HadoopPipes::TaskContext::Counter * outputWords;
- WordCountReduce (HadoopPipes::TaskContext & context)
- {
- outputWords = context.getCounter (WORDCOUNT, OUTPUT_WORDS);
- }
- void reduce (HadoopPipes::ReduceContext & context)
- {
- int sum = 0;
- while (context.nextValue())
- {
- sum += HadoopUtils::toInt (context.getInputValue());
- }
- context.emit (context.getInputKey(), HadoopUtils::toString(sum));
- context.incrementCounter (outputWords, 1);
- }
- };
- int main (int argc, char * argv[])
- {
- return HadoopPipes::runTask (HadoopPipes::TemplateFactory<WordCountMap, WordCountReduce>());
- }
Makefile的内容如下:
- HADOOP_INSTALL="/Volumes/Data/Works/Hadoop/hadoop-0.20.2"
- PLATFORM=Mac_OS_X-x86_64-64
- CC = g++
- CPPFLAGS = -m64 -I$(HADOOP_INSTALL)/c++/$(PLATFORM)/include
- hadoopWordCountPipe: hadoopWordCountPipe.cpp
- $(CC) $(CPPFLAGS) $< -Wall -L$(HADOOP_INSTALL)/c++/$(PLATFORM)/lib -lhadooppipes -lhadooputils -lpthread -g -O2 -o $@
相关问答
更多-
关于分布式Hadoop在WINDOWS上操作问题[2023-09-09]
若在windows的Eclipse工程中直接启动mapreduc程序,需要先把hadoop集群的配置目录下的xml都拷贝到src目录下,让程序自动读取集群的地址后去进行分布式运行(您也可以自己写java代码去设置job的configuration属性)。 若不拷贝,工程中bin目录没有完整的xml配置文件,则windows执行的mapreduce程序全部通过本机的jvm执行,作业名也是带有“local"字眼的作业,如 job_local2062122004_0001。 这不是真正的分布式运行mapred ... -
hadoop搭建完全分布式完成,可是不会用[2022-04-01]
搭建的文本,很久了,现在更新的最新版本搭建更加简单,建议你去看看黑马里边的教程,免费的 -
hadoop完全分布式jdk要什么版本[2023-06-22]
配置hosts文件,将主机名和对应IP地址... 1 配置SSH的无密码登录:可新建专用用户h... 2 hadoop配置过程:要实现分布式环境,配... 3 配置文件1:hadoop-env.sh该文件是hado -
菜鸟求助阿!快疯了!Hadoop分布式系统下文件路径的问题[2023-10-09]
这个很简单啊,你在写路径的时候必须是绝对路径 所有前面肯定有"/home"的啊, 所以你在使用路径前先拼接个workDir Path workDir = h.getWorkingDirectory();// h是你得到的hdfs文件系统的句柄 -
是否可以在没有HDFS的情况下以伪分布式操作运行Hadoop?(Is it possible to run Hadoop in Pseudo-Distributed operation without HDFS?)[2022-09-21]
是的,这是可能的,虽然我使用0.19.2。 我对0.18.3不太熟悉,但我确信它不应该有所作为。 只要确保将fs.default.name设置为默认值(这是file:/// ),并将mapred.job.tracker设置为指向托管jobtracker的位置。 然后使用bin / start-mapred.sh启动守护进程。 您不需要启动namenode或datanode。 在这一点上,你应该能够使用bin/hadoop jar ...来运行你的map / reduce作业bin/hadoop jar .. ... -
修改/etc/hosts以包含主机名环回映射: 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 127.0.1.1 is-joshbloom-hadoop ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 您的问题是您的机器不知道如何解析主机名is-joshbloom-hadoop到特定 ...
-
使用Oozie工作流程。 它允许您使用Pipes以及常用的MapReduce作业。 I finally manage to make Hadoop Pipes works. Here some steps to make works the wordcount examples available in src/examples/pipes/impl/. I have a working Hadoop 1.0.4 cluster, configured following the steps describ ...
-
Hadoop -pseudo分布式模式:输入路径不存在(Hadoop -pseudo distributed mode : Input path does not exist)[2023-11-19]
该文件是否存在于HDFS中? 看起来您已经提供了文件的本地路径(HDFS中的用户目录通常以/ user而不是/ home为根。 您可以通过键入以下内容来检查HDFS中是否存在该文件 #> hadoop fs -ls hdfs://localhost/home/vissu/Raveesh/Hadoop/hadoop-0.20.2/sample.txt_modf 如果没有返回任何内容,即文件不在HDFS中,则可以使用hadoop fs命令再次复制到HDFS: #> hadoop fs -put /home/v ...