1

我对 TEZ mapreduce 工作有奇怪的行为。

我正在尝试从 Hive 读取日志数据,按 id、日期和其他一些参数将其拆分为一些块,然后写入另一个 hive 表。

Map 阶段运行速度足够快,大约需要 20 分钟,然后 reducer 开始工作,458 个 reducer 中的 453 个在接下来的 20 分钟内处理所有数据。但最后 5 个减速器工作大约 1 小时。

发生这种情况是因为我的输入数据包含一些巨大的条目,并且处理这些条目需要大量时间。这种情况的最佳做法是什么?我是否应该进行一些 hadoop/tez/hive 调整以允许对最后一个减速器进行并行处理,或者通过其他参数拆分输入数据以避免大量条目会更聪明?

感谢您的任何建议。

4

1 回答 1

5

这种不那么奇怪的行为背后的神奇词是skew。这是一个非常普遍的问题。通常人们更喜欢忽略问题......直到他们真正感受到痛苦(就像你现在所做的那样)。

使用 TEZ,由于HIVE-7158 在 Hive 中使用 Tez 自动并行性,您可以尝试修改一些特定属性:

hive.tez.auto.reducer.parallelism
hive.tez.max.partition.factor
hive.tez.min.partition.factor

但是,当您有几个可以合并的异常小的 reduce 数据集时,“自动并行”功能似乎适用,而您的问题恰恰相反(一个异常大的 reduce dataset)。所以你也应该尝试修补

hive.exec.reducers.bytes.per.reducer
hive.exec.reducers.max 

...改变比例并使“大”成为新的“正常”(因此“正常”变为“小”)。但是,也许你会得到 3 个减速器,它们都需要 1 小时才能完成。很难说。

祝你好运。这种性能调优更像是艺术而非科学。

参考 :

~~~~~~

PS:当然,如果您可以通过更改组织输入数据集的方式来消除偏度的来源...

于 2016-02-15T22:59:29.637 回答