了解HIVE数据库中的映射器和reducer

时间:2015-04-30 05:41:57

标签: database hadoop hive bigdata

我正在课堂上学习大数据,现在我们正在学习HIVE。我们今天了解了地图绘制器和减速器,但老实说它已经超越了我的脑海。有人可以向我解释映射器和减速器在每一步中的作用吗?或者至少指出一些好的读数?提前致谢

1 个答案:

答案 0 :(得分:5)

enter image description here

让我们尝试从上面从互联网上下载的图表中了解map-reduce流程。

我们将讨论hadoop中的字数统计问题,在Hadoop中也称为hello world。

字数是一个程序,我们从文件中找到每个单词的出现。

让我们试着理解

第1步)

输入文件:我们需要一些我们将运行word count program的数据,在集群上运行这个程序,第一步应该是把这个文件放在hadoop上,这可以做到通过各种方式最简单的方法是使用hadoop shell命令: 喜欢put或copyFromLocal可以使用:

第2步)

映射减少关键值对的谈话,这意味着映射器将以键和值对的形式获得输入,它们将执行所需的处理然后它们将以键值对的形式产生中间结果,这将输入reducer以进一步处理它,最后reducer也会将它们的输出写入键值对。

但是我们知道映射器在主驱动程序之后执行,所以谁以键值对的形式向映射器提供输入,输入格式为你做这件事。

InputFormat是一个完成两件大事的类:

1)输入拆分(由此输入拆分驱动的映射器实例数或映射器数由输入拆分驱动,默认情况下,如果你去,你的一个拆分大小相当于一个块默认配置,但您可以根据需要更改分割大小。

所以,如果您正在玩,假设512 MB的数据,并且您的块大小为64 MB,那么将使用大约8个输入分割大小,将运行8个映射器实例或将使用8个映射器)

2)打破键值对中的数据(记录阅读器是在后端执行此操作的类)

现在,映射器的关键和价值将由您使用的文件输入格式驱动,例如TextInputFormat,它是最常用的输入格式。它将longWritable(相当于long)作为键发送,将Text(字符串)作为值发送给mapper

你的mapper类可以在1个分割上工作,在类中你有一个map函数,它一次只能在一行上工作,所以我们可以从上面的图中看到单行将是map函数

例如它发送:" Apple orange Mango"映射功能

3)Mapper

在mapper中我们得到一行作为输入,所以现在我们需要编写逻辑。

我们将这条线分成基于分隔的单词,所以现在我们在一行中有单个单词 我们知道地图适用于键值对。 我们可以将这项工作作为关键和价值作为1

为什么我们把关键词当作关键而不是反过来,因为下一阶段是

混洗和排序阶段:在此阶段,框架将使组基于相似的键,或者所有不同的键将在混洗阶段聚集在一起,它们将根据键进行排序。

现在让我们再次修改

最初我们有一个文件根据输入拆分发送到不同的不同映射器,然后在map函数的mapper类中我们得到一行作为输入,所以构建我们的逻辑相对于一行,所有行都可以工作对于一个实例以类似的方式,最后所有实例都能够以这样的方式并行工作。

现在假设你有10个映射器在运行,现在在map中减少你的reducer数量总是小于mapper。

因此,如果我们使用了10个映射器,那么最有可能使用2-3个降低器。

洗牌和分拣阶段,我们已经看到所有类似的钥匙都会聚在一起。

首先,在哪个基础上决定哪个映射器数据将转到哪个reducer。 在情况下,10个映射器数据必须分成2个减速器,因此它将根据它来决定。

有一个名为 Partitioner 的组件,它将决定哪个mapper输出将基于散列分区转到哪个reducer,并使用模运算符。

所以如果我们使用散列,那么这是100%确保所有相同的密钥都会转到同一个reducer。

我们不必为任何事情而烦恼,因为框架已被设计为有效地进行,但是因为它是用java编写的,所以我们可以根据需要灵活地使用不同的组件来定制键,自定义分区器,自定义比较器等。

4) Reducer :现在reducer将在其输入中获取键及其值列表

苹果,< 1,1,1,1)>

现在在reducer中我们编写逻辑我们想要做什么,对于我们的情况,我们想要进行字数统计,所以我们只需要计算值。

这也是我们最初在Map阶段将1作为值的原因,因为我们只需要计算。

输出:最终输出将由reducer再次写入hdfs。再次在键值对中。