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任务之间的整数。
 
 

转载于:https://www.cnblogs.com/niurougan/p/4324455.html

hadoop数据流转过程分析相关推荐

  1. 基于星环TDH数据仓库典型总和场景数据流转设计

    典型综合场景数据流转设计 综合场景一 T+1数据加工 图 4 T+1方式数据流转 T+1是数据仓库领域最为常见的数据集成模式,T+1模式下数据仓库会在每天固定时间点采集当天或者前一天交易系统数据. 根 ...

  2. Hadoop数据收集与入库系统Flume与Sqoop

    之前说了,大数据平台技术栈 (可点击查看),今天就来说说其中的采集层Sqoop和Flume! Hadoop数据收集与入库系统Flume与Sqoop 背景知识 ·简单介绍· 1. Hadoop提供了一个 ...

  3. hive sqoop导出 postgresql精度丢失_Mysql 与 hadoop 数据同步(迁移),你需要知道 Sqoop...

    上篇文章 Mysql 到 Hbase 数据如何实时同步,强大的 Streamsets 告诉你 我们说到了如何使用 Streamsets 来进行 mysql 到 hbase 的数据实时同步(迁移).使用 ...

  4. python替代hadoop_Python连接Hadoop数据中遇到的各种坑(汇总)

    最近准备使用Python+Hadoop+Pandas进行一些深度的分析与机器学习相关工作.(当然随着学习过程的进展,现在准备使用Python+Spark+Hadoop这样一套体系来搭建后续的工作环境) ...

  5. goim 中的 data flow 数据流转及思考

    goim 文章系列(共5篇): goim 架构与定制 从goim定制, 浅谈 golang 的 interface 解耦合与gRPC goim中的 bilibili/discovery (eureka ...

  6. 服务器关于数据流转方式

    在做数据产品设计时,整个关注两个重点,数据的流转,业务逻辑: 数据怎么流转,数据流转方法,可以根据数据量的大小和使用时效性要求,有三种数据流转的方案: 1.实时大数据量.秒级.可异步: 业务要求:峰值 ...

  7. springboot 物联网_【阿里云生活物联网架构师专题】基于在 SpringBoot Java私有云上对接阿里云物联网,实现M2M设备数据流转。...

    - 近处是人生,远处是风景 - 今天与老同学小聚一餐,君子之交淡如水,忆当年青春岁月.年龄越大,志同道合的朋友越来越少了,一声朋友,足以抵过无限岁月! 在儿时,总喜欢做一些天马行空的美梦,想象着可以仗 ...

  8. 阿里云物联网Iot设备上下线状态数据流转的设置

    要想通过物联网平台实现远程监控设备,那么就要建立监控端设备(比如手机)和被监控端设备的数据交互,在阿里云物联网平台完成这个交互功能的方法就是建立两个设备之间的数据流转,对于设备要流转的物模型数据,阿里 ...

  9. Hadoop数据本地化

    首先需要知道,hadoop数据本地化是指的map任务,reduce任务并不具备数据本地化特征.            通常输入的数据首先将会分片split,每个分片上构建一个map任务,由该任务执行执 ...

最新文章

  1. Oracle嵌套表实例说明
  2. 在Eclipse中导入Java程序
  3. 用python画玫瑰花教程-使用Python画一朵玫瑰花
  4. 【Groovy】闭包 Closure ( 闭包定义 | 闭包类型 | 查看编译后的字节码文件中的闭包类型变量 )
  5. binwalk -e mysql_Binwalk的安装和使用
  6. mysql5.7.23版本环境配置
  7. 记某CMS漏洞getshell
  8. 风暴事件处理器–每个工作者的GC日志文件
  9. 【数据挖掘】数据挖掘和数据分析基础
  10. zabbixdocker里的mysql_docker zabbix安装部署(数据库和web及zabbix服务都用docker版)
  11. SLAM Cartographer(14)Global SLAM的主线业务
  12. 基于机器视觉的电阻焊接质量检测
  13. nekohtml 用法
  14. java实现dex转jar_dex转jar工具
  15. 【凡是过去 皆为序章】 回顾一年前的学习心得记录
  16. 颈椎前路caspar撑开器_Caspar撑开器和颈椎带锁钢板治疗下颈椎骨折脱位
  17. Windows VM虚拟机安装苹果雪豹操作系统
  18. android的keystore多个别名,关于android:KeyStore找不到我的别名的密钥
  19. Can‘t open /dev/sdb1 exclusively. Mounted filesystem?
  20. Bmob后端云的基本使用

热门文章

  1. wattosR6中文化步骤
  2. WCF中的序列化[上篇]
  3. 使用C#调用外部Ping命令获取网络连接情况
  4. jinchuang正文 nginx配置limit_conn_zone来限制并发连接数以及下载带宽
  5. 从虚拟化、统一映射和自动化看09年法规遵从趋势
  6. Platform Builder和Embedded visual C++简介
  7. Xamarin.Forms探索--使用 Xamarin.Forms 来创建跨平台的用户界面
  8. C#速成之一(Quick C#)
  9. 2.2栈的另一个应用:括号匹配
  10. Maven 项目模板