Hadoop 生态之 MapReduce 及 Hive 简介
还拿上面例子来说:统计相同单词在所有输入数据中出现的次数,一个 Map 只能处理一部分数据,而热点单词就很可能会出现在所有 Map 中了,意味着同一单词必须要合并到一起统计才能得到正确结果。这种数据关联几乎在所有的大数据计算场景都需要处理,如果是例子这种的当然只对 Key 合并就OK了,但类似数据库 join 操作这种较复杂的,就需对两种类型(或更多)的数据依据 Key 关联。 这个数据关联操作在 MapReduce中的叫做:shuffle。 2.4 shuffle shuffle 从字面意思来看,洗牌。下面是一个完整的MR过程,看一看如何洗牌。 ![]() 先看左半边 1. 从 HDFS 中读取数据,输入数据块到一个个的 map,其中 map 完成计算时,计算结果会存储到本地文件系统。而当 map 快要进行完时,就会启动 shuffle 过程。 2. 如图,shuffle 也可分为两种,在Map端的是 Map shuffle。大致过程为:Map 任务进程会调用一个 Partitioner 接口,对 Map 产生的每个 这里就实现了对 Map 结果的分区、排序、分割,以及将同一分区的输出合并写入磁盘,得到一个分区有序的文件。这样不管 Map 在哪个服务器节点,相同的 Key 一定会被发送给相同 Reduce 进程。Reduce 进程对收到的 再看右半边 1. Reduce shuffle,又可分为复制 Map 输出、排序合并两阶段。
2. 经过上一步Reduce shuffle后,reduce进行最后的计算,将输出写入HDFS中。 以上便是 shuffle 大致四个步骤,关键是 map 输出的 shuffle 到哪个 Reduce 进程,它由 Partitioner 来实现,MapReduce 框架默认的 Partitioner 用 Key 哈希值对 Reduce 任务数量取模,相同 Key 会落在相同的 Reduce 任务 ID 上。
如果对 Shuffle 总结一句话: 分布式计算将不同服务器中的数据合并到一起进行后续计算的过程。 shuffle 是大数据计算过程中神奇的地方,不管是 MapReduce 还是 Spark,只要是大数据批处理计算,一定会有 shuffle 过程,只有让数据关联起来,它的内在关系和价值才会呈现。 3. Hive 上一部分介绍了 MapReduce,接下来简单谈谈 Hive . 我觉得任何一项技术的出现都是为了解决某类问题, MapReduce 毫无疑问简化了大数据开发的编程难度。但实际上进行数据计算更常用的手段可能是 SQL,那么有没有办法直接运行 SQL ? 3.1 Hive是什么 基于Hadoop的一个数据仓库系统,定义了一种类SQL查询语言:Hive SQL。 这里有一个名词 数据仓库,数据仓库是指:面向主题(Subject Oriented)、集成(Integrated)、相对稳定(Non-Volatile)、反应历史变化(Time Variant)的数据集合,用于支持管理决策。 (编辑:西安站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |