1. 程式人生 > >Yarn中的Map和Reduce的優化

Yarn中的Map和Reduce的優化

科技;大數據;yarn

通過Hive執行的批次任務處理失敗,Spark中報的錯誤日誌如下:

[plain] view plain copy
ERROR : Failed to monitor Job[ 3] with exception ‘java.lang.IllegalStateException(RPC channel is closed.)‘
java.lang.IllegalStateException: RPC channel is closed.
at com.google.common.base.Preconditions.checkState(Preconditions.java:145)
at org.apache.hive.spark.client.rpc.Rpc.call(Rpc.java:277)

at org.apache.hive.spark.client.SparkClientImpl$ClientProtocol.run(SparkClientImpl.java:584)
at org.apache.hive.spark.client.SparkClientImpl.run(SparkClientImpl.java:151)
at org.apache.hadoop.hive.ql.exec.spark.status.impl.RemoteSparkJobStatus.getSparkJobInfo(RemoteSparkJobStatus.java:147)
通過Yarn的ResourceManager可以看到錯誤日誌如下:

[plain] view plain copy
Diagnostics: Container [pid=31880,containerID=container_1528360247633_0013_01_000001] is running beyond physical memory limits.
Current usage: 1.0 GB of 1 GB physical memory used; 2.8 GB of 2.1 GB virtual memory used. Killing container.
其中提示“1.0 GB of 1 GB physical memory used; 2.8 GB of 2.1 GB virtual memory used”,說明是由於內存不足導致了問題的發生,因而需要針對Yarn的容器的內存做優化。

1.調整每個容器節點的最大可用內存

這個根據當前所使用服務器的實際情況決定,另外還需要考慮給操作系統預留可使用的內存,如當前的服務器的內存為16G,可以配置為12G,其余4G留給操作系統:

[html] view plain copy
<name>yarn.nodemanager.resource.memory-mb</name>
<value>12000</value>
註:配置在yarn-site.xml中

2.調整單個容器可申請的最小內存

調整參數為yarn.scheduler.minimum-allocation-mb,該值和第1點談到的單個容器的最大可存,可用於測算單臺服務器可運行的最多的容器數,現將其值調為2G:

[html] view plain copy
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>2048</value>
註:配置在yarn-site.xml中

3.提升Map和Reduce可使用的內存

在當前示例中,給每個容器設置了2G的內存(通過參數yarn.scheduler.minimum-allocation-mb=2048),因此我們給Map任務容器分配了4G的內存,給Reduce任務容器分配了8G的內存:

[html] view plain copy
<name>mapreduce.map.memory.mb</name>
<value>4096</value>
<name>mapreduce.reduce.memory.mb</name>
<value>8192</value>
註:配置在mapred-site.xml中
4.優化Map和Reduce任務的JVM內存

每個Container都會運行Map和Reduce任務運行,因而JVM堆大小應設置為低於上面定義的Map和Reduce內存,以便它們位於由YARN分配的Container內存的範圍內。

[html] view plain copy
<name>mapreduce.map.java.opts</name>
<value>-Xmx3072m</value>
<name>mapreduce.reduce.java.opts</name>
<value>-Xmx6144m</value>
註:配置在mapred-site.xml中

5、優化虛擬內存的占比

每個Map和Reduce任務的虛擬內存(物理+分頁內存)上限由每個允許YARN容器的虛擬內存比決定。 這由以下配置設置,默認值為2.1:
[html] view plain copy
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>2.1</value>
註:配置在yarn-site.xml中
如果你想了解大數據的學習路線,想學習大數據知識以及需要免費的學習資料可以加群:784789432.歡迎你的加入。每天下午三點開直播分享基礎知識,晚上20:00都會開直播給大家分享大數據項目實戰。

Yarn中的Map和Reduce的優化