很少有人会这样来自问自己?只知道,以键值对的形式处理数据并输出结果,而没有解释为什么要以键值对的形式进行。

包括hadoop的mapreduce里的键值对,spark里的rdd里的map等。

  这是为什么呢?

  

1、键值对的具体含义

  首先,我们会通过强调Java标准库中的类似概念,来阐明我们所说的键值对的含义。

java.util.Map接口是常用类,如HashMap,甚至原始Hashtable的父类(通过向后重构代码库)。

  对于任何Java Map对象,其内容是从指定类型的给定键到相关值的一组映射,键与值的数据类型可能不同。例如,一个HashMap对象可以包含从人名(String)到其生日(Date)的一组映射。

  Hadoop中的数据包含与相关值关联的键。这些数据的存储方式允许对数据集的不同值根据键进行分类和重排。如果使用键值对数据,应该会有如下疑问:

  1、在数据集中,一个给定的键必然有映射值吗?

  2、给定键的关联值是什么?

  3、键的完整集合是什么?

  回忆我们很熟悉的wordcount吧。该程序的输出显然是键/值关系的组合。对于每个字(键),都有对应着它出现的次数(值)。

  键/值数据的一些重要特征就变得清晰起来,具体如下:

  1、键必须是唯一的,而值并不一定是唯一的。

  2、每个值必须与键相关联,但键可能没有值(虽然在这个特定的例子中没有出现这种情况)。

  3、对键进行明确定义非常重要。它决定了计数是否区分大小写,这将产生不同的结果。

  注意,我们需要审慎对待“键是唯一的”这一概念,这并不是说键只出现一次。在我们的数据集中,可以看到键多次出现。并且我们看到,MapReduce模型有一股将所有与特定键关联的数据汇集的步骤。键的唯一性保证了,假如我们为某一给定键汇集对应的值,结果将是从该键的实例到每个值的映射,不会忽略掉任何值。

  

2、为什么会采用键/值数据

  键/值数据作为mapreduce操作的基础,成就了一个强大的编程模型,使mapreduce获得了令人惊讶的广泛应用。hadoop和mapreduce被多种不同行业的问题领域所采用即证实了这一点。很多数据要么本身即为键/值形式,要么可以以键/值这种方式来表示。键值数据这一简单的模型具有广泛的适用性,以这种形式定义的程序可以应用于hadoop和spark框架。

  当然,数据模型本身并非是使hadoop如此强大的唯一要素,它真正的强大之处在于如何运用并行处理技术以及分而治之思想。我们可以在大量主机上存储、执行数据,甚至使用将较大任务分割成较小任务的框架,然后将所有并行结果整合成最终结论。

  但是,我们需要上述框架提供一种描述问题的方法,即便用户不懂该框架的运行机理,也能表达清楚要处理的问题。我们只需要对数据所需的转换进行描述,其余事情由该框架完成。

  mapreduce利用其键/值接口提供了这样的抽象:程序员只需指定所要求的转换,hadoop完成对任意规模数据集的复杂的数据转换处理过程。

  一些实际应用

  为了更为具体的理解键值对,可以想象一些实际应用的键值对数据:

  通讯簿将一个名字(键)和联系方法(值)关联起来;

  银行账号使用一个账号(键)关联账户明细(值);

  一本书的索引关联一个关键字(键)和其所在的页码(值);

  在计算机文件系统中,根据文件名(键)访问各类数据,如文本、图片和语音(值)。

  我这里,刻意列举了一些范围宽泛的例子,帮助你认识到,键/值数据并不是只能应用于高端数据挖掘的约束模型,其实啊,就环绕在我们身边的非常普通的类型啊!

摘自于:Hadoop基础教程   张治起译  的第44-46页

Hadoop概念学习系列之谈hadoop/spark里为什么都有,键值对呢?(四十)的更多相关文章

  1. Hadoop概念学习系列之谈hadoop/spark里为什么都有,YARN呢?(四十一)

    在Hadoop集群里,有三种模式: 1.本地模式 2.伪分布模式 3.全分布模式 在Spark集群里,有四种模式: 1.local单机模式 结果xshell可见: ./bin/spark-submit ...

  2. Hadoop概念学习系列之谈hadoop/spark里分别是如何实现容错性?(四十二)

    Hadoop使用数据复制来实现容错性(I/O高) Spark使用RDD数据存储模型来实现容错性.  RDD是只读的.分区记录的集合.如果一个RDD的一个分区丢失,RDD含有如何重建这个分区的相关信息. ...

  3. Hadoop概念学习系列之为什么hadoop/spark执行作业时,输出路径必须要不存在?(三十九)

    很多人只会,但没深入体会和想为什么要这样? 拿Hadoop来说,当然,spark也一样的道理. 输出路径由Hadoop自己创建,实际的结果文件遵守part-nnnn的约定. 如何指定一个已有目录作为H ...

  4. Hadoop概念学习系列之Hadoop新手学习指导之入门需知(二十)

    不多说,直接上干货! 零基础学习hadoop,没有想象的那么困难,也没有想象的那么容易.从一开始什么都不懂,到能够搭建集群,开发.整个过程,只要有Linux基础,虚拟机化和java基础,其实hadoo ...

  5. Hadoop概念学习系列之Java调用Shell命令和脚本,致力于hadoop/spark集群(三十六)

    前言 说明的是,本博文,是在以下的博文基础上,立足于它们,致力于我的大数据领域! http://kongcodecenter.iteye.com/blog/1231177 http://blog.cs ...

  6. Hadoop概念学习系列之Hadoop、Spark学习路线(很值得推荐)(十八)

    不多说,直接上干货! 说在前面的话 此笔,对于仅对于Hadoop和Spark初中学者.高手请忽略! 1 Java基础: 视频方面:          推荐<毕向东JAVA基础视频教程>.学 ...

  7. Hadoop概念学习系列之Hadoop、Spark学习路线(很值得推荐)

    说在前面的话 此笔,对于仅对于Hadoop和Spark初中学者.高手请忽略! 1 Java基础: 视频方面:          推荐<毕向东JAVA基础视频教程>.学习hadoop不需要过 ...

  8. Hadoop概念学习系列之Hadoop、Spark学习路线

    1 Java基础: 视频方面:          推荐<毕向东JAVA基础视频教程>.学习hadoop不需要过度的深入,java学习到javase,在Java虚拟机的内存管理.以及多线程. ...

  9. Hadoop概念学习系列之如何去找到历史版本的Hadoop发行包(三十四)

    如何去找到历史版本的Hadoop发行包 找到Hadoop历史版本 这里我需要的Hadoop版本是2.0.3.打开hadoop的下载页面 http://www.apache.org/dyn/closer ...

随机推荐

  1. hdoj 2159 (带限制的完全背包)

    #include <iostream> #include <algorithm> #include <cstring> using namespace std; ] ...

  2. root/base/stem概念

    The verb root (or base form): 1.is the same as the infinitive不定式 (e.g., to dive, to jump, to wonder) ...

  3. acm 2072

    ////////////////////////////////////////////////////////////////////////////////#include<iostream ...

  4. 流程控制之if

    流程控制 假如把写程序比做走路,那我们到现在为止,一直走的都是直路,还没遇到过分叉口,想象现实中,你遇到了分叉口,然后你决定往哪拐必然是有所动机的.你要判断那条岔路是你真正要走的路,如果我们想让程序也 ...

  5. Apache Kafka 源码剖析

    Getting Start 下载 http://kafka.apache.org/ 优点和应用场景 Kafka消息驱动,符合发布-订阅模式,优点和应用范围都共通 发布-订阅模式优点 解耦合 : 两个应 ...

  6. OSX11.12安装任何来源的软件,在终端中输入

    sudo spctl --master-disable

  7. servlet创建项目过程中,servlet内容重写的两种搭建,tomcat的配置,class的存放位置,web.xml的搭建等注意事项与易错点

    运行一个servlet项目:需要做这些前提工作: 1.配置tomcat,在server选项卡的设置也就基本的设置,HTTP port与JMX port等端口号:基本都是默认的.这里需要注意的是,有的教 ...

  8. gitingore && opensource license 自动生成的网站

    老外就是爱搞事情,总有一些方便我们开发的小工具出来,比如gitignore以及开源软件许可协议的 gitingore 生成的 地址 https://www.gitignore.io/ 使用 搜索的地方 ...

  9. linux下PHP手动添加扩展库

    1.进入php源程序目录中的ext目录中,这里存放着各个扩展模块的源代码,选择你需要的模块,比如curl模块: cd curl 执行phpize生成编译文件,phpize在PHP安装目录的bin目录下 ...

  10. 【HI3520DV200】sample

    1.vdec不支持1280x720,支持640x480及以下