hadoop:数据流转图(基于hadoop 0.18.3):通过一个最简单的例子来说明hadoop中的数据流转。

hadoop:数据流转图(基于hadoop 0.18.3):
这里使用一个例子说明hadoop中的数据流转过程,这个例子是统计一些文章中词汇的总数。首先files表示这些需要统计词汇的文章。
 
首先,hadoop会把初始数据分配到各个机器的mapper任务中,图中的数字表示数据的依次流向步骤。
 
1.格式化输入,默认情况下,hadoop会使用 TextInputFormate,也就是按照行号作为key,行的字符串作为value.map函数的输入形式是<K1,V1>。
 
 
2.map函数如下。例如统计词汇,我们可以这么写。
public void map(LongWritable key,Text Value,OutputCollector<Text,Inwritable> output,Reporter reporter){//output为map函数的输出。
String line = value.toString();//每行的值
StringTokenizer itr = new StringTokenizer(line);//根据空格分词
while(itr.hasMoreTokens()){
output.collect( new Text().set(itr.nextToken()),new IntWritable(1));//输出 ,key为单词,value为1.
}
}

  

3.map函数的输出的形式是List<k2,v2>,如上面的output参数。把每个词记录下来,并且设置value为1.表示这个词出现过一次,后面统计的时候再把相同的key的value的总数计算出来。
 
 
4.combiner过程(非必要),可以理解为本地Reduce,在本地先进行一次计算,把相同key的键对汇总一下,例如‘ac’这个词汇一共出现了两次,这里输出就是<“ac”,2>。
 
 
5.partitioner主要是把map输出的结果进行分配,分配到不同机器的reduce中,让reduce处理。那么根据什么来分配呢?hadoop中默认是根据key的hash值进行分配。这个过程叫做洗牌过程。
 
 
6.reduce函数,入参为<k2,List<v2>>,在map中的output的格式是List<k2,v2>,经过shuffling过程之后,经过分区再组合,就成了<k2,List<v2>>。对应分词统计的例子,key2对应的就是某个词,List<v2>对应的就是不同机器的map函数得出的某个词汇的总数的集合。输出的形式为<k3,v3>。词汇统计的reduce方法如下:
 
public void reduce(Text key,Interator<InWritable> 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));//输出
}
 
 
7.输出的格式为<k3,v3>这里可以作为下一个map函数的入参。
 
 
 
inputFormat:默认情况hadoop会使用TextInputFormat来作为输入的格式化工具,key会是行号,这个行号一般来说对我们没有什么用。当我们需要根据行的分隔符来区分key和value的时候,例如有这样格式的数据,”班级    姓名“(班级姓名之间使用制表符),我们需要使用班级作为key,姓名作为value,我们就可以使用KeyValueTextInputFormat ,默认分隔符为制表符(\t),我们可以通过key.value.separator.in.input.line来设定分隔符。根据其他需求还可能用到SquenceFileInputFormat<K,V>,NLineInputFormat。
 
 
partitioning:hadoop中默认的HashJPartitioner有时候可以不符合我们的需求,就可以实现Partioner<K,V>,来自己实现Partioner。Partioner接口需要实现两个方法,configure() 和 getPartition()。configure()方法将作业的配置应用在partitioner上,而后者返回一个介于0和reduce任务之间的整数。
 
 

hadoop数据流转过程分析的更多相关文章

  1. hadoop数据[Hadoop] 实际应用场景之 - 阿里

    上班之余抽点时间出来写写博文,希望对新接触的朋友有帮助.明天在这里和大家一起学习一下hadoop数据 Hadoop在淘宝和支付宝的应用从09年开始,用于对海量数据的离线处置,例如对日志的分析,也涉及内 ...

  2. Struts2(三)——数据在框架中的数据流转问题

    一款软件,无在乎对数据的处理.而B/S软件,一般都是用户通过浏览器客户端输入数据,传递到服务器,服务器进行相关处理,然后返回到指定的页面,进行相关显示,完成相关功能.这篇博客重点简述一下Struts2 ...

  3. 面向UI编程:ui.js 1.1 使用观察者模式完成组件之间数据流转,彻底分离组件之间的耦合,完成组件的高内聚

    开头想明确一些概念,因为有些概念不明确会导致很多问题,比如你写这个框架为什么不去解决啥啥啥的问题,哎,心累. 什么是框架? 百度的解释:框架(Framework)是整个或部分系统的可重用设计,表现为一 ...

  4. 关系数据库数据与hadoop数据进行转换的工具 - Sqoop

    Sqoop 本文所使用的Sqoop版本为1.4.6 1.官网 http://sqoop.apache.org 2.作用 A:可以把hadoop数据导入到关系数据库里面(e.g. Hive -> ...

  5. Hadoop数据读写原理

    数据流 MapReduce作业(job)是客户端执行的单位:它包括输入数据.MapReduce程序和配置信息.Hadoop把输入数据划分成等长的小数据发送到MapReduce,称之为输入分片.Hado ...

  6. hadoop数据容易出现错误的地方

    最近在搞关于数据分析的项目,做了一点总结. 下图是系统的数据流向.容易出现错误的地方.1.数据进入hadoop仓库有四种来源,这四种是最基本的数据,简称ods,original data source ...

  7. hadoop 数据采样

    http://www.cnblogs.com/xuxm2007/archive/2012/03/04/2379143.html 原文地址如上: 关于Hadoop中的采样器 .为什么要使用采样器 在这个 ...

  8. Hadoop数据操作系统YARN全解析

    “ Hadoop 2.0引入YARN,大大提高了集群的资源利用率并降低了集群管理成本.其在异构集群中是怎样应用的?Hulu又有哪些成功实践可以分享? 为了能够对集群中的资源进行统一管理和调度,Hado ...

  9. Hadoop 数据排序(一)

    1.概述 1TB排序通常用于衡量分布式数据处理框架的数据处理能力.Terasort是Hadoop中的的一个排序作业.那么Terasort在Hadoop中是怎样实现的呢?本文主要从算法设计角度分析Ter ...

随机推荐

  1. JavaScript随机数

    function random(start,end){ var total=start+end; return Manth.floor(Manth.random()+total-start); }

  2. Remoting

    一.      Remoting基础 什么是Remoting,简而言之,我们可以将其看作是一种分布式处理方式.从微软的产品角度来看,可以说Remoting就是DCOM的一种升级,它改善了很多功能,并极 ...

  3. UITableView  折叠效果

    1:创建一个model数据模型 #import <Foundation/Foundation.h> @interface DataModel : NSObject //保存section中 ...

  4. javascript 特性

    作用域: javascript的作用域称为静态作用域,在定义语法上就能确认了,而不是运行时. if (true) { var i = 'moersing' } console.log(i); //可以 ...

  5. CF Sea and Islands

    Sea and Islands time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...

  6. js实现shell排序

    //shell排序配插入排序function shell_insert_sort(arr){ var gap = arr.length; do{ gap = parseInt(gap/3) + 1; ...

  7. jQuery图片提示和文字提示

    图片提示: 效果如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:/ ...

  8. sql 了解

    char,varchar,nvarchar区别 类型 长度 使用说明 长度说明 char(n)  固定长度 索引效率高 程序里面使用trim去除多余的空白 n 必须是一个介于 1 和 8,000 之间 ...

  9. Android Studio使用OpenCV后,使APP不安装OpenCV Manager即可运行

    转载自http://www.cnblogs.com/tail/p/4618790.html 采用静态初始化的方法,可以戳下边的链接查看官方的文档介绍 http://docs.opencv.org/do ...

  10. SQLite&&SharedPreferences&&IO读写Sdcard学习笔记

    SQLite 轻量级的.嵌入式的.关系型数据库 Android.IOS等广泛使用的的数据库系统 SQLite数据库之中可以方便的使用SQL语句,实现数据的增加.修改.删除.查询等操作 SQLiteOp ...