糸パラメータの最適化(フェアスケジューラバージョン)

hadoop2.0以降、apacheyarnを使用してクラスターリソースを管理できます。Yarnは、リソース(メモリ、CPU)をコンテナの形式で分割および分離できます。YARNは、クラスター内のすべてのマシンで使用可能なコンピューティングリソースを管理します。これらのリソースに基づいて、YARNはアプリケーション(MapReduceなど)からのリソース要求をスケジュールし、次にYARNはコンテナーを割り当てて各アプリケーションに処理機能を提供します。コンテナーはYARNです。処理能力の基本単位は、メモリやCPUなどのパッケージ(コンテナ)です。

ResourceManager:以下RMと呼びます。YARNの中央制御モジュールは、リソースの使用の統一された計画を担当します。
NodeManager:以下NMと呼びます。YARNのリソースノードモジュールは、管理コンテナの起動を担当します。
ApplicationMaster:以下AMと呼びます。YARNの各アプリケーションはAMを開始します。これは、RMからのリソースの申請、NMへのコンテナーの開始の要求、およびコンテナーへの処理の指示を担当します。
コンテナ:リソースコンテナ。YARNのすべてのアプリケーションはコンテナ上で実行されます。AMもコンテナー上で実行されますが、AMコンテナーはRMによって申請されます。

上記の基本概念を理解した後、クラスターの構成の最適化を開始できます

NMの登録済みリソースを構成する

<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>30</value>
<discription>每个nodemanager可分配的cpu总核数</discription>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>122880</value>
<discription>每个nodemanager可分配的内存总量</discription>
</property>

最適化の提案:
1。CPUコアの数=論理コアの数-他のアプリケーションの数(データノード?作業?zk?など)

cat /proc/cpuinfo | grep "processor" | wc -l

クラスタ内の論理コアの数を確認できます
。2。メモリはCPUの整数倍にすることをお勧めします。また、システム用に十分なメモリが予約されています。

ApplicationMaster構成

<property>
<name>yarn.app.mapreduce.am.resource.cpu-vcores</name>
<value>1</value>
</property>
<property>
<name>yarn.app.mapreduce.am.resource.mb</name>
<value>4096</value>
<discription>ApplicationMaster的占用的内存大小</discription>
</property>


最適化の提案
1.CPUとメモリの比率はnmの割り当て比率と一致しています

コンテナ構成の最適化

<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>16384</value>
<discription>单个任务可申请最大内存,默认8192MB</discription>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-vcores</name>
<value>4</value>
<discription>单个任务可申请的最多虚拟CPU个数</discription>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-vcores</name>
<value>1</value>
<discription>单个任务可申请的最小虚拟CPU个数</discription>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>4096</value>
<discription>container最小可申请的内存</discription>
</property>

最適化の提案
1.スケジューラーでは、多くのリソース計算部分が計算の最小値のN倍に変換されます。したがって、割り当て可能なメモリやその他のリソースを設定するときは、この最小値の倍数にするのが最適です
。2。CPU /メモリの比率は同じまま
です。3。YARNはスレッド監視を使用して、タスクがメモリを使いすぎているかどうかを判断します。 、直接殺します。Cgroupsによるメモリ制御の柔軟性が不足しているため(つまり、タスクはいつでもメモリの上限を超えることはできません。超えた場合、タスクは直接強制終了されるか、OOMとして報告されます)、Javaプロセスは2倍になります。この場合、スレッドの監視方法はより柔軟になります(プロセスツリーのメモリが即座に2倍になり、設定値を超えることがわかった場合は、次のようになります。正常な現象と見なされ、タスクは強制終了されません)。したがって、YARNは、コンテナを制御するためのCgroupsメモリ分離メカニズムを提供しません。

mapreduceパラメーター設定

<property>
<name>mapreduce.map.memory.mb</name>
<value>4096</value>
<discription>map的内存大小</discription>
</property>
<property>
<name>mapreduce.map.java.opts</name>
<value>-Xmx3072M</value>
<discription>用户设定的map/reduce阶段申请的container的JVM参数。最大堆设定要比申请的内存少一些,用于JVM的非堆部分使用0.80-0.85建议</discription>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>8192</value>
</property>
<property>
<name>mapreduce.reduce.java.opts</name>
<value>-Xmx6144M</value>
</property>


最適化リファレンス
1.クラスターが主にmrを計算に使用する場合は、マップのメモリーと、CPUとコンテナーの最小値を等しくすることをお勧めします。
2.コンテナ内で実行できるマップの数は最大でいくつですか?糸.scheduler.maximum-allocation-mb / mapreduce.map.memory.mb = 4

問題は
、ノードマネージャのコンテナの数をどのように制御するかです。

<property>
<name>yarn.scheduler.fair.assignmultiple</name>
<value>true</value>
<discription>是否允许NodeManager一次分配多个容器</discription>
</property>
<property>
<name>yarn.scheduler.fair.max.assign</name>
<value>20</value>
<discription>如果允许一次分配多个,一次最多可分配多少个,这里按照一个最小分配yarn.scheduler.minimum-allocation-mb4gb来计算总共内存120/4=30给20即可</discription>
</property>

ファリスケジューラの設定例

24ノード、ノードあたり120GBのメモリ、30個の論理CPU

<?xml version="1.0"?>
<allocations>
<queue name="mapreduce">
<minResources>368640 mb,90 vcores</minResources><!--3 nodes-->
<maxResources>2334720 mb,570 vcores</maxResources><!--19 nodes-->
<maxRunningApps>70</maxRunningApps>
<weight>5</weight>
<queue name="vipquery">
<minResources>122880 mb,30 vcores</minResources><!--1 nodes-->
<maxResources>1966080 mb,480 vcores</maxResources><!--16 nodes-->
<maxRunningApps>20</maxRunningApps>
<weight>8</weight>
</queue>
<queue name="hive">
<minResources>122880 mb,30 vcores</minResources><!--1 nodes-->
<maxResources>1966080 mb,480 vcores</maxResources><!--16 nodes-->
<maxRunningApps>20</maxRunningApps>
<weight>7</weight>
</queue>
<queue name="hadoop">
<minResources>122880 mb,30 vcores</minResources><!--1 nodes-->
<maxResources>1966080 mb,480 vcores</maxResources><!--16 nodes-->
<maxRunningApps>30</maxRunningApps>
<weight>6</weight>
</queue>
</queue>
<queue name="default">
<minResources>122880 mb,30 vcores</minResources><!--1 nodes-->
<maxResources>614400 mb,150 vcores</maxResources><!--5 nodes-->
<maxRunningApps>20</maxRunningApps>
<weight>1</weight>
</queue>
</allocations>

総括する

ヤーンは、合理的な構成、リソースのプリエンプション、およびピーク時の同時実行性の問題を通じて効果的に制御できます。

おすすめ

転載: blog.csdn.net/qq_32445015/article/details/109894650