HIVE shuffle階段的oom處理方法

2021-09-12 02:29:18 字數 1083 閱讀 3603

工作中碰到的問題,現在記下來以後好找。

1.增加reduce數(set mapreduce.job.reduces=***)或者

set hive.exec.reducers.bytes.per.reducer=150000000;預設是1g

2.或調整放在記憶體裡的最大片段所佔百分比

set mapreduce.reduce.shuffle.memory.limit.percent=0.15)。

這麼設定的原因是因為缺省會產生5個fetcher執行緒。

shuffle_input_buffer_percent = 「mapreduce.reduce.shuffle.input.buffer.percent」; shuffle使用的記憶體比例,預設是0.7。shuffle記憶體為總記憶體 * 0.7。

shuffle_memory_limit_percent = 「mapreduce.reduce.shuffle.memory.limit.percent」; 單個shuffle任務能使用的記憶體限額,預設是0.25,即為 shuffle記憶體 * 0.25。

shuffle_merge_percent = 「mapreduce.reduce.shuffle.merge.percent」; 預設0.66 shuffle的資料量到shuffle記憶體 * 0.66的時候,啟動合併。

shuffle階段的fetcher過程**現記憶體溢位。shuffle_input_buffer_percent是指在總的heapsize中 shuffle占得記憶體百分比我們總的heapsize假設是1.5g,那大概fetcher就是1.0g。 shuffle_memory_limit_percent是指的map copy過來的資料是放記憶體中還是直接寫磁碟。 超過1.5gx0.7x0.25=250m的都放在磁碟中,其它開闢記憶體空間,放在記憶體中。 shuffle_merge_percent是指merge的百分比,超過這個百分比後停止fetcher,進行merge,merge到磁碟中。

一般用第二種方法就可以解決了,但是因為寫的記憶體從0.25變成0.15,速度會變慢。

參考了:博文,如果想深究原因的話可以看看

社交O2O的進化

人們對以興趣為目的的社交有著強烈的需求,而移動終端的lbs功能使得o2o式興趣社交愈加便捷。未來o2o式的興趣社交應會成為乙個新的發展方向。以基於lbs功能的興趣社交為代表的社交2.0時代之所以來臨,一方面是使用者對o2o興趣社交的強烈需求 興趣很難改變,並且人們對分享興趣有很強的意願,同時興趣社交...

社交O2O的進化

人們對以興趣為目的的社交有著強烈的需求。而移動終端的lbs功能使得o2o式興趣社交愈加便捷。未來o2o式的興趣社交應會成為乙個新的發展方向。以基於lbs功能的興趣社交為代表的社交2.0時代之所以來臨,一方面是使用者對o2o興趣社交的強烈需求 興趣非常難改變。而且人們對分享興趣有非常強的意願,同一時候...

社交O2O的進化

人們對以興趣為目的的社交有著強烈的需求。而移動終端的lbs功能使得o2o式興趣社交愈加便捷。未來o2o式的興趣社交應會成為乙個新的發展方向。以基於lbs功能的興趣社交為代表的社交2.0時代之所以來臨,一方面是使用者對o2o興趣社交的強烈需求 興趣非常難改變。而且人們對分享興趣有非常強的意願,同一時候...