我对tez mapreduce的工作有奇怪的行为。
我尝试从配置单元读取日志数据,按id、日期和其他一些参数将其分成若干块,然后写入另一个配置单元表。
map阶段的工作速度足够快,大约需要20分钟,然后reducer开始工作,458个reducer中的453个在接下来的20分钟内处理所有数据。但最后5个减速器的工作时间约为1小时。
发生这种情况是因为我的输入数据包含一些巨大的条目,而处理这些条目需要很多时间。这类案件的最佳做法是什么?我应该做一些hadoop/tez/hive调优以允许对最后一个reducer进行某种并行处理,还是用其他参数分割输入数据以避免大量条目更明智?
谢谢你的建议。
1条答案
按热度按时间tyky79it1#
这种不那么奇怪的行为背后的神奇词汇是歪斜。这是一个非常普遍的问题。通常人们喜欢忽略问题。。。直到他们真正感受到痛苦(就像你现在所做的那样)。
使用tez,由于hive-7158在hive中使用了tez自动并行,因此您可以尝试修补一些特定属性:
但是,当您有几个异常小的reduce数据集可以合并时,“自动并行”功能似乎适用,而您的问题恰恰相反(一个异常大的reduce数据集)。所以你也应该尝试修补
…改变尺度,使“大”成为新的“正常”(因此“正常”变成“小”)。不过,也许你会得到3个减速机都需要1个小时才能完成。很难说。
祝你好运。这种性能调整与其说是科学,不如说是艺术。
参考文献:
https://cwiki.apache.org/confluence/display/hive/configuration+properties#configurationproperties-配置单元.tez.auto.reducer.parallelism
https://www.mail-archive.com/user@tez.apache.org/msg00641.html
http://fr.slideshare.net/t3rmin4t0r/hivetez-a-performance-deep-dive/25
http://fr.slideshare.net/hortonworks/discoverhdp22faster-sql-queries-with-hive/28