我对TEZ mapreduce有奇怪的行为。
我试图从Hive读取日志数据,将其按id、日期和其他参数分成若干块,然后写入另一个单元表。
Map阶段的工作速度足够快,大约需要20分钟,比减速机开始工作要快得多,458台减速器中的453台在接下来的20分钟内处理所有数据。但是最后5个减速器工作了大约一个小时。
这是因为我的输入数据包含了一些巨大的条目,处理这些条目需要花费大量的时间。这类案件的最佳做法是什么?我应该对hadoop/tez/hive进行一些调优,以允许对最后一个还原器进行类似的并行处理,还是将输入数据拆分到其他参数以避免巨大的条目会更明智?
谢谢你的建议。
发布于 2016-02-15 22:59:29
这种不那么奇怪的行为背后的神奇词汇是偏斜。这是一个非常普遍的问题。通常人们更喜欢忽略这个问题..。直到他们真正感受到疼痛(就像你现在一样)。
使用TEZ,因为https://issues.apache.org/jira/browse/HIVE-7158可以尝试修改一些特定的属性:
hive.tez.auto.reducer.parallelism
hive.tez.max.partition.factor
hive.tez.min.partition.factor但是,当您有几个可以合并的异常小的减少数据集时,这个“自动并行”功能似乎适用,而您的问题正好相反(一个异常大的精简数据集)。所以你也应该试着修补一下
hive.exec.reducers.bytes.per.reducer
hive.exec.reducers.max ...to改变规模,使“大”成为新的“正常”(因此“正常”变成“小”)。但是,也许你能得到的只有3台减速机,它们都需要1小时才能完成。很难说。
祝好运。这种性能调优更像是艺术而不是科学。
参考资料:
PS:当然,如果您可以通过改变组织输入数据集的方式来消除偏斜的来源.
https://stackoverflow.com/questions/35414830
复制相似问题