• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
导航菜单
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • windows
  • 服务器硬件
  • 服务器运维
  • 云计算
  • 虚拟化
  • IIS教程
  • Linux
  • Apache
  • Ftp
  • DNS
  • Nginx
您的位置:首页 > 服务器 >云计算 > 一步一步跟我学习hadoop(4)----hadoop Map/Reduce教程(1),hadoop----hadoop

一步一步跟我学习hadoop(4)----hadoop Map/Reduce教程(1),hadoop----hadoop

作者:网友 字体:[增加 减小] 来源:互联网

本文主要包含一步一步跟我学习hadoop(4)----hadoop Map/Reduce教程(1),hadoop----hadoop等服务器相关知识,网友希望可以进行参考

一步一步跟我学习hadoop(4)----hadoop Map/Reduce教程(1),hadoop----hadoop


Hadoop Map/Reduce说明

    hadoop Map/Reduce是一个使用简易的软件框架,基于它写出来的应用程序能够运行在由上千个商用机器组成的大型集群上,并以一种可靠容错的方式并行处理上T级别的数据集。

    一个Map/Reduce作业经常讲数据集切分成独立的块,这些块通过map任务并行处理,框架对map的输出进行排序,排序结果会被reduce以输入参数进行接收。通常作业的输入和输出均存储在文件系统。框架会负责任务的调度和监控,同时也会对失败的任务重新执行。

    通常,计算节点和存储节点是相同的。也就是说,Map/Reduce框架和hadoop分布式系统运行在相同的节点上。这种配置允许框架在已有数据的节点上调度任务,使集群中的网络带宽有效的利用。

    Map/Reduce框架由一个单独的master节点上的JobTracker和对应的每个slave节点上的taskTracker组成,master负责对slave节点上的任务进行调度,监控他们,并且对失败的任务进行重新执行。slave负责执行master分配的任务。

    应用最起码需要指明输入或者输出的路径,并且通过实现合适的接口或抽象类来提供map或reduce函数,再加上其他job执行的参数,这些合起来构成了作业的配置。接着hadoop的job client提交作业(jar或者其他可执行程序)和配置信息给jobTracker,此jobTracker负责对软件或配置分发给slave,调度和监控人物,提供状态和诊断信息给job-client。

    尽管Hadoop框架是由Java实现的,Map/Reduce应用程序却并不需要用Java来编写。

  • Hadoop Streaming是一个运行作业的工具集,它允许用户创建并运行所有可执行的程序(如shell)来作为mapper和reducer。
  • Hadoop Pipes是一个与SWIG兼容的C++的Map/Reduce实现(没有给予JNDI)

输入与输出

    Map/Reduce框架的执行需要<key, value>对,也就是说,框架把作业的输入看做是<key, value>键值对的集合,同样地作业的输出也是如此,唯一的区别是两个键值对的类型可能有所出入。

    框架中的Key和Value类必须是Writable接口的实现;此外,为了方便排序,key类还需要实现WritableComparable接口。

    一个Map/Reduce 作业的输入和输出类型如下所示:

    (input) <k1, v1>->         map->        <k2, v2>->        combine->            <k2, v2>->        reduce->        <k3, v3> (output)

代码示例:WordCount v1.0

    在深入的了解map/reduce之前,我们先了解下wordCount的示例(此示例在源码包里),以便了解map/reduce的运行过程。

    wordcount是一个简单的用于统计输入文件中的单词个数的应用。

    这个应用适用于单机模式、伪分布式和完全分布式三种应用模式。

    wordcount代码如下:

package org.myorg;

import java.io.IOException;

import java.util.*;

import org.apache.hadoop.fs.Path;

import org.apache.hadoop.conf.*;

import org.apache.hadoop.io.*;

import org.apache.hadoop.mapred.*;

import org.apache.hadoop.util.*;

public class WordCount {

	public static class Map extends MapReduceBase implements
			Mapper<LongWritable, Text, Text, IntWritable> {

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

		private Text word = new Text();

		public void map(LongWritable key, Text value,
				OutputCollector<Text, IntWritable> output, Reporter reporter)
				throws IOException {

			String line = value.toString();

			StringTokenizer tokenizer = new StringTokenizer(line);

			while (tokenizer.hasMoreTokens()) {

				word.set(tokenizer.nextToken());

				output.collect(word, one);

			}

		}

	}

	public static class Reduce extends MapReduceBase implements
			Reducer<Text, IntWritable, Text, IntWritable> {

		public void reduce(Text key, Iterator<IntWritable> values,
				OutputCollector<Text, IntWritable> output, Reporter reporter)
				throws IOException {

			int sum = 0;

			while (values.hasNext()) {

				sum += values.next().get();

			}

			output.collect(key, new IntWritable(sum));

		}

	}

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

		JobConf conf = new JobConf(WordCount.class);

		conf.setJobName("wordcount");

		conf.setOutputKeyClass(Text.class);

		conf.setOutputValueClass(IntWritable.class);

		conf.setMapperClass(Map.class);

		conf.setCombinerClass(Reduce.class);

		conf.setReducerClass(Reduce.class);

		conf.setInputFormat(TextInputFormat.class);

		conf.setOutputFormat(TextOutputFormat.class);

		FileInputFormat.setInputPaths(conf, new Path(args[0]));

		FileOutputFormat.setOutputPath(conf, new Path(args[1]));

		JobClient.runJob(conf);

	}

}

 

用法

假设环境变量HADOOP_HOME对应安装时的根目录,HADOOP_VERSION对应Hadoop的当前安装版本,编译WordCount.java来创建jar包,可如下操作:

$ mkdir wordcount_classes
$ javac -classpath ${HADOOP_HOME}/hadoop-${HADOOP_VERSION}-core.jar               -d wordcount_classes WordCount.java         
$ jar -cvf /usr/joe/wordcount.jar -C wordcount_classes/ .

假设:

  • /usr/joe/wordcount/input- 是HDFS中的输入路径         
  • /usr/joe/wordcount/output - 是HDFS中的输出路径         

用示例文本文件做为输入:

$ bin/hadoop dfs -ls /usr/joe/wordcount/input/
/usr/joe/wordcount/input/file01
/usr/joe/wordcount/input/file02

$ bin/hadoop dfs -cat /usr/joe/wordcount/input/file01
Hello World Bye World

$ bin/hadoop dfs -cat /usr/joe/wordcount/input/file02
Hello Hadoop Goodbye Hadoop

运行应用程序:

$ bin/hadoop jar /usr/joe/wordcount.jar org.myorg.WordCount               /usr/joe/wordcount/input /usr/joe/wordcount/output          

输出是:

$ bin/hadoop dfs -cat /usr/joe/wordcount/output/part-00000         
Bye    1
Goodbye    1
Hadoop    2
Hello    2
World    2

应用程序能够使用-files选项来指定一个由逗号分隔的路径列表,这些路径是task的当前工作目录。使用选项-libjars可以向map和reduce的classpath中添加jar包。使用-archives选项程序可以传递档案文件做为参数,这些档案文件会被解压并且在task的当前工作目录下会创建一个指向解压生成的目录的符号链接(以压缩包的名字命名)。        有关命令行选项的更多细节请参考http://hadoop.apache.org/docs/r1.0.4/cn/commands_manual.html 

使用-libjars和-files

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 一步一步跟我学习hadoop(4)----hadoop Map/Reduce教程(1),hadoop----hadoop

相关文章

  • hdfs一致性模型,hdfs一致性
  • hive启动报错 java.net.URISyntaxException: Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7B,relativeabsolute
  • hive如何应对数据倾斜,hive应对数据倾斜
  • Build Spark1.3.1 with CDH HADOOP,spark1.3.1cdh
  • kafka集群搭建,kafka集群
  • Nodejs课堂笔记-第四课 Dynamodb为何物,nodejsdynamodb
  • hive sql,hive
  • HDFS学习笔记(1)初探HDFS,hdfs学习笔记初探
  • inet_ntoa issue,inet_ntoa
  • Spark jar包找不到解决方法,sparkjar

文章分类

  • windows
  • 服务器硬件
  • 服务器运维
  • 云计算
  • 虚拟化
  • IIS教程
  • Linux
  • Apache
  • Ftp
  • DNS
  • Nginx

最近更新的内容

    • Hadoop Installation on Linux,hadoopinstallation
    • 家,我日夜思念的名字,我回来了,
    • inet_ntoa issue,inet_ntoa
    • HBase常用操作之namespace,hbasenamespace
    • Hadoop之—— Linux搭建hadoop环境(简化篇),linuxhadoop
    • win系统下启动linux上的kafka集群及使用,linuxkafka
    • hive优化-----控制hive任务的reduce数,hivereduce
    • 基于反射实现自动化restful开发,自动化restful开发
    • 系统监控软件Ganglia的安装,监控软件ganglia
    • Hbase Client Test Case,hbasecase

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有