mapreduce实例

MapReduce: Simplied Data Processing on Large Clusters (译)

帅比萌擦擦* 提交于 2020-02-27 18:18:03
MapReduce: Simplied Data Processing on Large Clusters (译) 摘要: MapReduce是一个编程模型以及用来处理和生成大数据集的一个相关实现。用户通过描述一个map函数,处理一组key/value对进而生成一组key/value对的中间结果,然后描述一个reduce函数,将具有相同key的中间结果进行归并。正如论文所表明的,很多现实世界中的任务都可以用这个模型来表达。 以这种函数式风格写出来的程序在一个由普通机器组成的集群上自动的进行并行化和执行。由一个运行时系统来关注输入数据的划分细节,在机器集合上的程序执行调度,处理机器失败以及管理所需要的机器间的通信。这就允许那些没有并行分布式系统编程经验的程序员很容易的使用大型分布式系统的资源。 我们的MapReduce实现运行在一个有很多普通机器组成的集群上,而且具有高扩展性:一个典型的MapReduce计算将会在一个数千台机器的集群上处理很多T的数据。对于程序员来说,这个系统很好用,目前已经有数百个MapReduce程序实现,在google的集群上每天有上千个MapReduce job在跑。 1.导引 在过去的五年来,作者和google的其他工程师已经实现了数百了用于特殊目的在大量原始数据(比如爬虫爬的文档,web访问日志等等)上进行的运算。为了计算各种类型的衍生数据:比如倒排索引

MapReduce概述

空扰寡人 提交于 2020-02-27 16:01:58
1. MapReduce定义 2. MapReduce优缺点 3. MapReduce核心思想 1)分布式的运算程序往往需要分成至少2个阶段。 2)第一个阶段的MapTask并发实例,完全并行运行,互不相干。 3)第二个阶段的ReduceTask并发实例互不相干,但是他们的数据依赖于上一个阶段的所有MapTask并发实例的输出。 4)MapReduce编程模型只能包含一个Map阶段和一个Reduce阶段,如果用户的业务逻辑非常复杂,那就只能多个MapReduce程序,串行运行。 总结:分析WordCount数据流走向深入理解MapReduce核心思想。 4. MapReduce进程 5. 常用数据序列化类型 6.MapReduce编程规范 用户编写的程序分成三个部分:Mapper、Reducer和Driver。 来源: CSDN 作者: 老菜啦 链接: https://blog.csdn.net/weixin_43497444/article/details/104535067

MapReduce编程实战(1)--实现wordcount词频统计

倾然丶 夕夏残阳落幕 提交于 2020-02-09 21:12:42
摘要: 一个WordCount单词统计程序为实例,详细演示了如何编写MapReduce程序代码以及如何打包运行程序。 参考资料: Api 文档地址: http://hadoop.apache.org/docs/current/api/index.html maven资源库: https://mvnrepository.com/repos/central 用于配置pom的时候查询资源 1.创建maven项目 创建maven项目,项目名hdfs ##这里我用的文章“java操作hdfs”的项目hdfs pom.xml文件: //与文章“java操作hdfs”的项目一样。 2.编写WordCount类 在该项目包com.scitc.hdfs中新建WordCount.java类,代码如下: package com.scitc.hdfs; import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import

Yarn资源调度系统详解

↘锁芯ラ 提交于 2020-02-08 10:14:56
1、Yarn介绍 Apache Hadoop YARN 是 apache Software Foundation Hadoop的子项目,为分离Hadoop2.0资源管理和计算组件而引入。YARN的诞生缘于存储于HDFS的数据需要更多的交互模式,不单单是MapReduce模式。Hadoop2.0 的YARN 架构提供了更多的处理框架,比如spark框架,不再强迫使用MapReduce框架。 从hadoop2.0 的架构图可以看出,YARN承担着原本由MapReduce承担的资源管理的功能,同时将这部分的功能打包使得他们可以被新的数据处理引擎使用。这也同时简化了MapReduce的流程,使得MapReduce专注的将数据处理做到最好。使用YARN,可以用共同的资源管理,在Hadoop上跑很多应用程序。目前,很多机构已经开发基于YARN的应用程序。 2、Yarn架构 YARN的架构还是经典的主从(master/slave)结构,如下图所示。大体上看,YARN服务由一个ResourceManager(RM)和多个NodeManager(NM)构成,ResourceManager为主节点(master),NodeManager为从节点(slave) 在YARN体系结构中,全局ResourceManager作为主守护程序运行,该仲裁程序在各种竞争应用程序之间仲裁可用的群集资源

Hadoop(MapReduce)知识点总结

这一生的挚爱 提交于 2020-02-07 20:55:47
第1章 MapReduce概论 1.1 MapReduce定义 MapReduce是一个分布式运算程序的编程框架,是用户开发“基于Hadoop的数据分析应用”的核心框架 MapReduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个Hadoop集群上 1.2 MapReduce优缺点 1.2.1 优点 A.MapReduce易于编程 B.良好的扩展性 C.高容错性 D.适合PB级以上海量数据的离线处理 1.2.2 缺点 A.不擅长实时计算 B.不擅长流式计算 C.不擅长DAG(有向图)计算 1.3 MapReduce核心思想 总结:分析WordCount数据流走向深入理解MapReduce核心思想 1.4 MapReduce进程 一个完整的MapReduce程序在分布式运行时有三类实例进程 A.MrAppMaster:负责整个程序的过程调度及状态协调 B.MapTask:负责Map阶段的整个数据处理流程 C.ReduceTask:负责Reduce阶段的整个数据处理流程 1.5 官方WordCount源码 采用反编译工具反编译源码,发现WordCount案例有Map类、Reduce类和驱动类。且数据的类型是Hadoop自身封装的序列化类型 1.6 常用数据序列化类型 Java类型 Hadoop Writable类型 Boolean

【MapReduce】二、MapReduce编程模型

隐身守侯 提交于 2020-01-30 17:59:03
  通过前面的实例,可以基本了解MapReduce对于少量输入数据是如何工作的,但是MapReduce主要用于面向大规模数据集的并行计算。所以,还需要重点了解MapReduce的并行编程模型和运行机制。   我们知道, MapReduce计算模型主要由三个阶段构成:Map、shuffle、Reduce 。Map和Reduce操作需要我们自己定义相应Map类和Reduce类。而 shuffle则是系统自动帮我们实现的,是MapReduce的“心脏”,是奇迹发生的地方。 是其主要流程基本如下图所示: 1、数据的输入   首先,对于MapReduce所要处理的数据,应当存储在分布式文件系统(如HDFS)中,通过使用Hadoop资源管理系统YARN,将MapReduce计算转移到存储有部分数据的机器上。   对于输入数据,首先要对其进行输入分片,Hadoop为 每个输入分片构建一个map任务 ,在该任务中调用map函数对分片中的每条数据记录进行处理。处理每个分片的时间小于处理整个数据所花的时间,因此, 只要合理分片,整个处理过程就能获得很好的负载均衡 。   而关于合理分片,我们不难想到:如果分片数据太大,那么处理所花的时间比较长,整体性能提升不多;反之,如果分片数据切分的太小,那么管理分片的时间和构建map任务的时间又会加大。因此分片要合理,一般情况下,

Hadoop之MapReduce的计数器

ぐ巨炮叔叔 提交于 2020-01-30 17:09:01
代码存于github: https://github.com/zuodaoyong/Hadoop Hadoop作业在运行时维护了若干个内置计数器,方便用户监控已处理数据量和已产生的输出数据量 1、采用枚举的方式统计计数 Counter getCounter(Enum<?> var1); enum CustomCounter{ normal,abnormal } context.getCounter(CustomCounter.normal).increment(1); 2、采用计数器组,计数器名称的方式统计 Counter getCounter(String var1, String var2); context.getCounter("logMapper","parseLog_true").increment(1); 3、实例 public class LogMapper extends Mapper<LongWritable,Text,Text,NullWritable>{ String[] splits=null; Text k=new Text(); @Override protected void map(LongWritable key, Text value, Context context) throws IOException,

Hadoop集群大数据解决方案之核心组件MapReduce(四)

时光总嘲笑我的痴心妄想 提交于 2020-01-30 08:26:08
前言    当今天下,大数据组件百花齐放,满足不同应用场景的计算框架层出不穷,mapreduce似乎早已很难有一席之地,但是天下武功,殊途同归,不管怎么变化,都离不开mapreduce的基础,今天,就一起揭开下最原始的计算框架mapreduce的面纱。 核心设计理念    分布式计算,即移动计算 而不移动数据。 原理剖析    如图1,官方给出的mapreduce剑谱,一招一式,尽显奥妙无穷,整体个人觉得分为4部分,split阶段,map阶段,shuffle阶段,reduce阶段,具体如下: 图1 官方mapreduce原理图谱 Split阶段    Map阶段之前还有个准备,就是split,中文意思就是分片,顾名思义就是当一个大文件要进行mapreduce计算时,假设2T,不可能把2T文件全部加载到内存,先要对文件进行切割,就是对应的split操作,那切割成多大才合理呢?split有个原理公式: long minSize = Math . max ( getFormatMinSplitSize ( ) , getMinSplitSize ( job ) ) ; long maxSize = getMaxSplitSize ( job ) ; long blockSize = file . getBlockSize ( ) ; long splitSize =

2.3 MapReduce源码分析01

夙愿已清 提交于 2020-01-27 08:13:16
Map源码-Split 以下代码为了思路通顺进行过拆分整理 ---- 重在理解 //提交任务,等待任务完成并返回任务状态 job . waitForCompletion ( true ) ; //判断当前的状态 if ( state == JobState . DEFINE ) { //提交任务 submit ( ) ; } //监控任务的运行状态 if ( verbose ) { monitorAndPrintJob ( ) ; } //返回任务状态 return isSuccessful ( ) ; //-----------------------------submit(); //确认当前任务的状态 ensureState ( JobState . DEFINE ) ; //mapreduce1.x和2.x,但是2的时候将1的好多方法进行了优化 setUseNewAPI ( ) ; //获取当前任务所运行的集群 connect ( ) ; //Provides a way to access information about the map/reduce cluster. cluster = new Cluster ( getConfiguration ( ) ) ; //创建Job的提交器 final JobSubmitter submitter =

大数据之Hadoop环境搭建

好久不见. 提交于 2020-01-26 03:38:41
Hadoop由GNU / Linux平台及其版本支持。因此,我们必须安装一个Linux操作系统来设置Hadoop环境。如果您有除Linux以外的操作系统,您可以在其中安装Virtualbox软件,并在Virtualbox内部安装Linux。 安装前设置 在将Hadoop安装到Linux环境之前,我们需要使用ssh(Secure Shell)来设置Linux。按照以下步骤设置Linux环境。 创建用户 在开始时,建议为Hadoop创建一个单独的用户,以便将Hadoop文件系统与Unix文件系统隔离。按照以下步骤创建用户: 使用命令“su”打开根。 使用命令“useradd username”从root帐户创建用户。 现在您可以使用命令“su username”打开现有的用户帐户。 打开Linux终端并键入以下命令以创建用户。 $ su password: # useradd hadoop # passwd hadoop New passwd: Retype new passwd SSH设置和密钥生成 需要SSH设置在集群上执行不同的操作,如启动,停止,分布式守护程序shell操作。要对Hadoop的不同用户进行身份验证,需要为Hadoop用户提供公钥/私钥对,并与不同的用户共享。 以下命令用于使用SSH生成键值对。将公共密钥表单id_rsa.pub复制到authorized_keys