如何在Windows下面运行hadoop的MapReduce程序

如何在Windows下面运行hadoop的MapReduce程序,第1张

1 首先登入hadoop 集群里面的一个节点, 创建一个java源文件, 偷懒起见, 基本盗用官方的word count (因为本文的目的是教会你如何快编写和运行一个MapReduce程序, 而不是如何写好一个功能齐全的MapReduce程序)

内容如下:

import javaioIOException;

import javautilStringTokenizer;

import orgapachehadoopconfConfiguration;

import orgapachehadoopfsPath;

import orgapachehadoopioIntWritable;

import orgapachehadoopioText;

import orgapachehadoopmapreduceJob;

import orgapachehadoopmapreduceMapper;

import orgapachehadoopmapreduceReducer;

import orgapachehadoopmapreducelibinputFileInputFormat;

import orgapachehadoopmapreduceliboutputFileOutputFormat;

import orgapachehadooputilGenericOptionsParser;

public class myword {

public static class TokenizerMapper

extends Mapper<Object, Text, Text, IntWritable>{

private final static IntWritable one = new IntWritable(1);

private Text word = new Text();

public void map(Object key, Text value, Context context

) throws IOException, InterruptedException {

StringTokenizer itr = new StringTokenizer(valuetoString());

while (itrhasMoreTokens()) {

wordset(itrnextToken());

contextwrite(word, one);

}

}

}

public static class IntSumReducer

extends Reducer<Text,IntWritable,Text,IntWritable> {

private IntWritable result = new IntWritable();

public void reduce(Text key, Iterable<IntWritable> values,

Context context

) throws IOException, InterruptedException {

int sum = 0;

for (IntWritable val : values) {

sum += valget();

}

resultset(sum);

contextwrite(key, result);

}

}

public static void main(String[] args) throws Exception {

Configuration conf = new Configuration();

String[] otherArgs = new GenericOptionsParser(conf, args)getRemainingArgs();

if (otherArgslength != 2) {

Systemerrprintln('Usage: wordcount <in> <out>');

Systemexit(2);

}

Job job = new Job(conf, 'word count');

jobsetJarByClass(mywordclass);

jobsetMapperClass(TokenizerMapperclass);

jobsetCombinerClass(IntSumReducerclass);

jobsetReducerClass(IntSumReducerclass);

jobsetOutputKeyClass(Textclass);

jobsetOutputValueClass(IntWritableclass);

FileInputFormataddInputPath(job, new Path(otherArgs[0]));

FileOutputFormatsetOutputPath(job, new Path(otherArgs[1]));

Systemexit(jobwaitForCompletion(true) 0 : 1);

}

}

与官方版本相比, 主要做了两处修改

1) 为了简单起见,去掉了开头的 package orgapachehadoopexamples;

2) 将类名从 WordCount 改为 myword, 以体现是我们自己的工作成果 :)

2 拿到hadoop 运行的class path, 主要为编译所用

运行命令

hadoop classpath

保存打出的结果,本文用的hadoop 版本是Pivotal 公司的Pivotal hadoop, 例子:

/etc/gphd/hadoop/conf:/usr/lib/gphd/hadoop/lib/:/usr/lib/gphd/hadoop///:/usr/lib/gphd/hadoop-hdfs//:/usr/lib/gphd/hadoop-hdfs/lib/:/usr/lib/gphd/hadoop-hdfs///:/usr/lib/gphd/hadoop-yarn/lib/:/usr/lib/gphd/hadoop-yarn///:/usr/lib/gphd/hadoop-mapreduce/lib/:/usr/lib/gphd/hadoop-mapreduce///::/etc/gphd/pxf/conf::/usr/lib/gphd/pxf/pxf-corejar:/usr/lib/gphd/pxf/pxf-apijar:/usr/lib/gphd/publicstage:/usr/lib/gphd/gfxd/lib/gemfirexdjar::/usr/lib/gphd/zookeeper/zookeeperjar:/usr/lib/gphd/hbase/lib/hbase-commonjar:/usr/lib/gphd/hbase/lib/hbase-protocoljar:/usr/lib/gphd/hbase/lib/hbase-clientjar:/usr/lib/gphd/hbase/lib/hbase-thriftjar:/usr/lib/gphd/hbase/lib/htrace-core-201jar:/etc/gphd/hbase/conf::/usr/lib/gphd/hive/lib/hive-servicejar:/usr/lib/gphd/hive/lib/libthrift-090jar:/usr/lib/gphd/hive/lib/hive-metastorejar:/usr/lib/gphd/hive/lib/libfb303-090jar:/usr/lib/gphd/hive/lib/hive-commonjar:/usr/lib/gphd/hive/lib/hive-execjar:/usr/lib/gphd/hive/lib/postgresql-jdbcjar:/etc/gphd/hive/conf::/usr/lib/gphd/sm-plugins/:

3 编译

运行命令

javac -classpath xxx /mywordjava

xxx部分就是上一步里面取到的class path

运行完此命令后, 当前目录下会生成一些class 文件, 例如:

mywordclass myword$IntSumReducerclass myword$TokenizerMapperclass

4 将class文件打包成jar文件

运行命令

jar -cvf mywordjar /class

至此, 目标jar 文件成功生成

5 准备一些文本文件, 上传到hdfs, 以做word count的input

例子:

随意创建一些文本文件, 保存到mapred_test 文件夹

运行命令

hadoop fs -put /mapred_test/

确保此文件夹成功上传到hdfs 当前用户根目录下

6 运行我们的程序

运行命令

hadoop jar /mywordjar myword mapred_test output

顺利的话, 此命令会正常进行, 一个MapReduce job 会开始工作, 输出的结果会保存在 hdfs 当前用户根目录下的output 文件夹里面。

至此大功告成!

如果还需要更多的功能, 我们可以修改前面的源文件以达到一个真正有用的MapReduce job。

但是原理大同小异, 练手的话, 基本够了。

一个抛砖引玉的简单例子, 欢迎板砖。

mapreduce工作原理为:MapReduce是一种编程模型,用于大规模数据集的并行运算。

mapreduce工作原理为:MapReduce是一种编程模型,用于大规模数据集的并行运算。MapReduce采用”分而治之”的思想,把对大规模数据集的 *** 作,分发给一个主节点管理下的各个分节点共同完成,然后通过整合各个节点的中间结果,得到最终结果。

Mapreduce是什么?

MapReduce就是“任务的分解与结果的汇总”,它极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。

MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。概念"Map(映射)"和"Reduce(归约)",是它们的主要思想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。它极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。

使用eclipse编写mapreduce程序的步骤:

一安装hadoop for eclipse的插件,注意:插件版本要和hadoop版本一致。

下载:hadoop-eclipse-plugin-252jar

>

本文主要讲解三个问题:

1

使用Java编写

MapReduce

程序时,如何向map、reduce函数传递参数。

2

使用Streaming编写MapReduce程序(C/C++,

Shell,

Python)时,如何向map、reduce脚本传递参数。

3

使用Streaming编写MapReduce程序(C/C++,

Shell,

Python)时,如何向map、reduce脚本传递文件或文件夹。

(1)

streaming

加载本地单个文件

(2)

streaming

加载本地多个文件

(3)

streaming

加载本地目录

(4)

streaming编程时在mapreduce脚本中读

hdfs

文件

(5)

streaming编程时在mapreduce脚本中读

hdfs

目录

以上就是关于如何在Windows下面运行hadoop的MapReduce程序全部的内容,包括:如何在Windows下面运行hadoop的MapReduce程序、mapreduce工作原理、如何使用eclipse编写mapreduce程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9873985.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存