C Code
Map: Mapper.c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define BUF_SIZE 2048
#define DELIM "\n"
int
main(
int
argc,
char
*argv[]){
char
buffer[BUF_SIZE];
while
(
fgets
(buffer, BUF_SIZE - 1, stdin)){
int
len =
strlen
(buffer);
if
(buffer[len-1] ==
'\n'
)
buffer[len-1] = 0;
char
*querys = index(buffer,
' '
);
char
*query = NULL;
if
(querys == NULL)
continue
;
querys += 1;
/* not to include '\t' */
query =
strtok
(buffer,
" "
);
while
(query){
printf
(
"%s\t1\n"
, query);
query =
strtok
(NULL,
" "
);
}
}
return
0;
}
Reduce: Reducer.c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define BUFFER_SIZE 1024
#define DELIM "\t"
int
main(
int
argc,
char
*argv[]){
char
strLastKey[BUFFER_SIZE];
char
strLine[BUFFER_SIZE];
int
count = 0;
*strLastKey =
'\0'
;
*strLine =
'\0'
;
while
(
fgets
(strLine, BUFFER_SIZE - 1, stdin) ){
char
*strCurrKey = NULL;
char
*strCurrNum = NULL;
strCurrKey =
strtok
(strLine, DELIM);
strCurrNum =
strtok
(NULL, DELIM);
/* necessary to check error but.... */
if
( strLastKey[0] ==
'\0'
){
strcpy
(strLastKey, strCurrKey);
}
if
(
strcmp
(strCurrKey, strLastKey)){
printf
(
"%s\t%d\n"
, strLastKey, count);
count =
atoi
(strCurrNum);
}
else
{
count +=
atoi
(strCurrNum);
}
strcpy
(strLastKey, strCurrKey);
}
printf
(
"%s\t%d\n"
, strLastKey, count);
/* flush the count */
return
0;
}
首先编译 C code:
$gcc /home/user/mapred/Mapper.c -o mapper.o
$gcc /home/user/mapred/Reducer.c -o reducer.o
在 hdfs上创建 input目录
$HADOOP_HOME/bin/hadoop fs -mkdir input
然后在本地创建一个文件 /home/user/input/input.txt并上传到 hdfs
$HADOOP_HOME/bin/hadoop fs -put /home/user/input/input.txt input
此时准备工作完成,接着执行 hadoop-streaming命令
$HADOOP_HOME/bin/hadoop jar HADOOP_HOME/hadoop-streaming.jar -input input/* -output output -mapper "/home/user/mapred/mapper .o" -reducer "/home/hadoop/mapred/reducer .o"
运行成功的日志如下:
packageJobJar: [/tmp/hadoop-cp/hadoop-unjar2910356701799592623/] [] /tmp/streamjob4550176904973722526.jar tmpDir=null
11/12/15 19:27:23 INFO mapred.FileInputFormat: Total input paths to process : 1
11/12/15 19:27:23 INFO streaming.StreamJob: getLocalDirs(): [/tmp/hadoop-cp/mapred/local]
11/12/15 19:27:23 INFO streaming.StreamJob: Running job: job_201112151707_0019
11/12/15 19:27:23 INFO streaming.StreamJob: To kill this job, run:
11/12/15 19:27:23 INFO streaming.StreamJob: /home//hadoop/bin/../bin/hadoop job -Dmapred.job.tracker=localhost:9001 -kill job_201112151707_0019
11/12/15 19:27:23 INFO streaming.StreamJob: Tracking URL: http://localhost:50030/jobdetails.jsp?jobid=job_201112151707_0019
11/12/15 19:27:24 INFO streaming.StreamJob: map 0% reduce 0%
11/12/15 19:27:34 INFO streaming.StreamJob: map 100% reduce 0%
11/12/15 19:27:46 INFO streaming.StreamJob: map 100% reduce 100%
11/12/15 19:27:49 INFO streaming.StreamJob: Job complete: job_201112151707_0019
11/12/15 19:27:49 INFO streaming.StreamJob: Output: output
相关推荐
Hadoop Streaming是一个强大的工具,它允许用户使用任何可执行文件(如Python脚本、Perl或Bash shell命令)作为MapReduce任务的Mapper和Reducer。这个技术使得非Java开发者也能利用Hadoop的大数据处理能力。在本文中...
总的来说,"spark--bin-hadoop3-without-hive.tgz"提供了一个在CentOS 8和Hadoop 3.1.3环境下运行的Spark实例,不包含Hive支持,适合那些需要高效大数据处理而不依赖Hive功能的用户。要充分利用这个版本,理解Spark...
这些代码示例演示了如何使用不同的编程语言在Hadoop Streaming框架中实现基本的MapReduce程序。需要注意的是,这些示例假设读者已经熟悉了Hadoop的基本操作和MapReduce编程模型,而且在执行集群运行之前,必须先在...
.NET API 有点尴尬:- 需要从抽象类继承不纯的风格使代码更难测试HadoopFs 让想要开发 map/reduce 作业的 F# 开发人员的生活更轻松:- 您的 map/reduce 函数没有要遵守的基类层次结构支持可选的单实例输出和输出集合...
这个压缩包“Hadoop大数据开发实战-代码.rar”包含了与书中的实例和练习相关的源代码,旨在帮助读者更好地理解和掌握Hadoop在实际项目中的运用。 Hadoop作为开源的大数据处理框架,由Apache基金会维护,它由两个...
5. **Hadoop Streaming**:允许使用任何可执行程序(如Python、Perl)作为Mapper和Reducer,扩展了Hadoop的使用范围。示例可能包括非Java语言实现MapReduce任务。 6. **Oozie**:是Hadoop的工作流调度器,用于管理...
Hadoop提供了丰富的API和开发工具,如Hadoop Streaming、Hadoop Pipes、Java API等。源代码分析可以帮助我们掌握如何使用这些工具编写MapReduce作业。 10. **性能调优**: 优化Hadoop集群的性能是实践中不可或缺...
《大数据分析:Spark与Hadoop实战》是Packt Publishing在2016年出版的一本专业书籍,专注于探讨如何利用Apache Spark和Hadoop进行高效的数据分析。这本书详细讲解了这两个重要工具的核心概念、架构以及实际应用,...
7. **编程接口**:Hadoop提供了Java API来编写MapReduce程序,但也有如Hadoop Streaming这样的接口,允许使用其他语言(如Python、Perl)编写Mapper和Reducer。 8. **数据处理范式**:MapReduce遵循“批处理”处理...
Java是常见的编程语言,但也有如Hadoop Streaming和Pig、Hive等高级工具,它们允许使用Python、Perl等其他语言或SQL语法进行编程,简化开发过程。 5. **实战详解与源代码**:"深入云计算:Hadoop应用开发实战详解 ...
-SparkStreaming原理介绍.pdf7.SparkStreaming(下)--SparkStreaming实战.pdf8.SparkMLlib(上)--机器学习及SparkMLlib简介.pdf8.SparkMLlib(下)--SparkMLlib实战.pdf9.SparkGraphX介绍及实例.pdf10.分布式内存...
对于脚本语言的使用者,书中的案例将涵盖如何使用Python的Pydoop库,Perl的Hadoop Streaming,以及Groovy的Hadoop集成。这些示例将帮助开发者了解如何利用脚本语言的灵活性来处理Hadoop任务。 总的来说,《Hadoop-...
2.Spark编译与部署(中)--Hadoop编译安装.pdf 3.Spark编程模型(上)--概念及SparkShell实战.pdf 3.Spark编程模型(下)--IDEA搭建及实战.pdf 4.Spark运行架构.pdf 5.Hive(上)--Hive介绍及部署.pdf 5.Hive(下)-...
5. listing-4-1至listing-4-11:这部分源代码可能涉及到更复杂的数据处理任务,如数据清洗、数据聚合、流处理等,可能使用了Hadoop的Streaming或Spark等工具,展现了Hadoop生态系统的多样性。 通过研究这些源代码,...
2.Spark编译与部署(中)--Hadoop编译安装.pdf 3.Spark编程模型(上)--概念及SparkShell实战.pdf 3.Spark编程模型(下)--IDEA搭建及实战.pdf 4.Spark运行架构.pdf 5.Hive(上)--Hive介绍及部署.pdf 5.Hive(下)-...
避免流式传输前言:使用scala和java混编完成,其中也涉及到python脚本来自动生成日志,linux crontab调度工具来定时执行脚本生成实时日志。生成的数据主要是模拟某学习网站学习视频课程的访问量(其中*以“ / class...
3. 增加一个新的存储节点:在新的节点上执行 Hadoop daemon.sh start datanode,然后在主节点执行 hadoop dfsadmin -refreshnodes。 删除一个节点:在主节点执行 hadoop mradmin -refreshnodes。 四、Hadoop 的调度...
- **性能提升**:2.1.1版在代码优化和任务调度上做了大量工作,如Tungsten项目的全内存计算优化,降低了数据序列化开销,提高了执行效率。 - **SQL增强**:Spark SQL引入了DataFrame/Dataset API,提供了更强大的...