如何做番茄炖牛腩——hadoop学习
1.背景
作为一个白的不能再白的数据分析师,在给各业务方按需求捞数据的时候,在提取数据的时候总会出现一些map、reduce巴拉巴拉一些奇怪的东西,索性大概系统粗浅的学习下。由于本人浑身带着一种文科安静祥和的气质,又爱好做饭,可能这样瞎B类比有助于自己理解(对错就不知道了)。
2.初识MapReduce
可以想象自己目标是做一份番茄牛腩,先去偌大的菜市场购买原材料(牛腩、番茄、葱姜蒜、料酒生抽老抽调味品)。几斤牛腩、几个番茄、多少调料,这些都是map阶段,也就是数据准备阶段。该洗菜洗菜、该切肉切肉。洗剥干净就开始炖,也就是reduce作为数据处理的阶段。最后出锅。接下来详细介绍如何买菜(map阶段)、如何炖(reduce阶段)
2.1 map阶段
首先copy书上的一些术语,hadoop将输入数据划分等长小数据块,每个分片构造一个map任务,并由运行用户自定义的map函数处理分片的每条记录;这也就是去菜市场肉蛋区买肉、蔬菜区买蔬菜、调料区买调料。
买菜的时候问题来了。买牛腩的时候,这家店的牛腩都被其他大佬定了,没你的份怎么办?换一家呗,实在不行换个菜市场看看。用术语来说,就是对于一个map任务的输入分片拉上,储存该分片的HDFS数据块复本的所有节点可能正在运行其他map任务,此时作业调度需要从某一数据块所在机架中的一个节点上寻找一个空闲的map槽来运行该map任务。买好菜,然后就是洗菜切肉的数据准备工作了。
2.2 reduce阶段
map任务和reduce任务之间的阶段叫做shuffle(混洗),一个reduce任务的输入可能来自于多个map任务。牛腩肯定是要凉水入锅,加料酒、姜来去腥味的。八角、桂皮、香叶需要放在一起做成香料包备用。番茄切小块备用。shuffle(混洗)之后就可以进行reduce任务了。
起炒锅放油,葱姜蒜干辣椒爆香。放番茄块煸炒,再放牛肉上色,加生抽和冰糖。加开水和香料包开始炖一个小时。出锅输出~
3.Hadoop分布式文件系统
HDFS集群里有两类节点以管理节点-工作节点模式运行,即一个namenode(管理节点)和datanode(工作节点)。(待整理)