このドキュメントでは、YARNにデプロイするサービスを設定する方法について説明します。
主に3種類の設定があります。
Service#configuration
)とコンポーネントレベル(`Component#configuration`)の両方で指定できます。Configuration#properties
)。以下では、各設定タイプの詳細について説明します。
以下は、設定オブジェクトの一般的な例です。
"configuration" : { "properties" : { "yarn.service.am-restart.max-attempts" : 10 // config for the service AM }, "env" : { // The environment variables to be exported when container gets launched "env1" : "val1" }, "files" : [ // The list of configuration files to be mounted for the container { "type": "HADOOP_XML", // The format of the config file into which the "properties" are dumped "dest_file": "/etc/hadoop/conf/core-site.xml", // The location where the config file is mounted inside the container "properties" : { // The list of key/value pairs to be dumped into the config file "fs.defaultFS" : "hdfs://myhdfs" // This property will be written into core-site.xml } }, { "type": "HADOOP_XML", // The format of the config file. "src_file" : ""hdfs://mycluster/tmp/conf/yarn-site.xml"" // The location of the source config file to be downloaded "dest_file": "/etc/hadoop/conf/yarn-site.xml", // The location where the config file will be mounted inside the container/ "properties" : { "yarn.resourcemanager.webapp.address" : "${COMPONENT_INSTANCE_NAME}.${SERVICE_NAME}.${USER}.${DOMAIN}" // Merge into (or override existing property in) yarn-site.xml } } ] }
{ "type": "TEMPLATE" "dest_file": "/etc/conf/hello" "properties" : { "content" : "Hello world" } }
文字列 `Hello world` は、コンテナ内の `/etc/conf/hello` にあるファイルに書き込まれます。
このセクションでは、YARNサービスAMを設定するための設定について説明します。
システム全体のサービスAMプロパティは、クラスタの `yarn-site.xml` ファイルでのみ設定できます。
システムレベル設定名 | 説明 |
---|---|
yarn.service.framework.path | サービスAM依存関係tarballのHDFSパス。この場所にファイルが存在しない場合、サービスが初めて開始または起動されたときにAMの依存関係がRMによってアップロードされます。RMユーザーがこの場所にファイルをアップロードする権限を持っていない場合、または場所がワールド読み取り可能でない場合、サービスが開始または起動されるたびにAM依存関係jarがアップロードされます。指定しない場合、値は/yarn-services/${hadoop.version}/service-dep.tar.gzと想定されます。 |
yarn.service.base.path | サービスアーティファクトが格納されるHDFS親ディレクトリ(デフォルト ${user_home_dir}/.yarn/)。 |
yarn.service.client-am.retry.max-wait-ms | サービスクライアントがサービスAMと通信するための最大再試行時間(ミリ秒)(デフォルト900000、つまり15分)。 |
yarn.service.client-am.retry-interval-ms | サービスクライアントがサービスAMと通信するための再試行間隔(ミリ秒)(デフォルト2000、つまり2秒)。 |
yarn.service.queue | サービスが送信されるデフォルトキュー(デフォルトでは `default` キューに送信されます)。キューは、サービスレベルの設定プロパティではなく、`queue` フィールドを介してサービスごとに指定できることに注意してください。 |
サービスレベルのサービスAM設定プロパティは、クラスタの `yarn-site.xml` でグローバルレベルで指定するか(事実上、システム全体のデフォルト値をオーバーライドします)、または以下の例のように `Configuration` オブジェクトの `properties` フィールドでサービスごとに指定できます。
{ "configuration" : { "properties" : { "yarn.service.am-restart.max-attempts" : 10 } } }
上記の設定では、サービスAMを最大10回再試行できます。
サービスレベル設定名 | 説明 |
---|---|
yarn.service.am-restart.max-attempts | サービスAMを開始する最大回数。この回数を超えると、サービスは強制終了されます(デフォルト20)。 |
yarn.service.am-resource.memory | サービスAMのメモリサイズ(MB)(デフォルト1024)。 |
yarn.service.am.java.opts | サービスAMの追加JVMオプション(デフォルト " -Xmx768m" は、-Xmxを指定しないJVMオプションに追加されます)。 |
yarn.service.container-recovery.timeout.ms | 新しく開始されたサービスAMが、RMからまだリカバリされていない以前のAM試行のすべてのコンテナを解放するまでのタイムアウト(ミリ秒)(デフォルト120000、つまり2分)。 |
yarn.service.failure-count-reset.window | コンポーネントごとの `yarn.service.container-failure-per-component.threshold` および `yarn.service.node-blacklist.threshold` の評価対象となるコンテナ障害カウントがリセットされる間隔(秒)(デフォルト21600、つまり6時間)。 |
yarn.service.readiness-check-interval.seconds | 準備チェックの間隔(秒)(デフォルト30秒)。 |
yarn.service.log.include-pattern | アプリケーションの完了後にログを集約するときに、名前でログファイルを含めるための正規表現(デフォルトではすべてのファイルを含みます)。 |
yarn.service.log.exclude-pattern | アプリケーションの完了後にログを集約するときに、名前でログファイルを除外するための正規表現。ログファイル名がincludeパターンとexcludeパターンの両方に一致する場合、このファイルは除外されます(デフォルトではファイルを除外しません)。 |
yarn.service.rolling-log.include-pattern | アプリの実行中にログを集約するときに、名前でログファイルを含めるための正規表現。 |
yarn.service.rolling-log.exclude-pattern | アプリの実行中にログを集約するときに、名前でログファイルを除外するための正規表現。ログファイル名がincludeパターンとexcludeパターンの両方に一致する場合、このファイルは除外されます。 |
yarn.service.classpath | yarnサービスAMのコンマ区切りの追加クラスパスパラメータ。これらのパス要素は、YARNサービスAMクラスパスの最後に追加されます。 |
yarn.service.am.client.port-range | Yarn Service AMがバインド時に使用できるポートの範囲。すべてのポートを使用する場合は空白のままにします。例:50000-50050,50100-50200。 |
コンポーネントレベルのサービスAM設定プロパティは、クラスタのyarn-site.xml
でグローバルレベル(事実上、システム全体でデフォルト値をオーバーライド)で指定するか、Configuration
オブジェクトのproperties
フィールドでサービスごとに指定するか、コンポーネントのConfiguration
オブジェクトのproperties
フィールドでコンポーネントごとに指定できます。
コンポーネントレベルの設定名 | 説明 |
---|---|
yarn.service.container-failure.retry.max | コンテナが失敗した場合に自動的に再起動される最大試行回数(デフォルトは-1で、永久に再試行されます)。 |
yarn.service.container-failure.retry-interval-ms | コンテナを再起動する再試行間隔(ミリ秒)(デフォルトは30000、つまり30秒)。 |
yarn.service.container-failure.validity-interval-ms | 障害有効間隔(ミリ秒)。0より大きい値に設定すると、コンテナの再試行ポリシーは、この間隔外で発生した障害を障害カウントに含めません(デフォルトは-1で、これまでのすべての障害が障害カウントに含まれます)。 |
yarn.service.container-failure-per-component.threshold | AMがサービスを停止する前に、特定のコンポーネントで許容されるコンテナ障害の最大絶対数(再試行は含まない)(デフォルトは10)。 |
yarn.service.node-blacklist.threshold | ノードがAMによってブラックリストに登録される前に、ノードで許容されるコンテナ障害の最大数(再試行は含まない)(デフォルトは3)。 |
yarn.service.default-readiness-check.enabled | デフォルトのレディネスチェックが有効かどうか(デフォルトはtrue)。 |
yarn.service.container-health-threshold.percent | 特定のコンポーネント、またはすべてのコンポーネントに対してグローバルに明示的に設定されている場合、コンテナのヘルスしきい値の割合は、正常なコンテナの割合を定期的にチェックするヘルスチェックモニターをスケジュールします。コンテナは、READY状態であれば正常です。指定された/デフォルトのポーリング頻度でチェックを実行します。コンポーネントが指定された/デフォルトのウィンドウの間、ヘルスしきい値を下回ることを許可し、その後、サービスが異常であると見なし、サービスの停止をトリガーします。ヘルスしきい値の割合が有効になっている場合、yarn.service.container-failure-per-component.thresholdは無視されます。 |
yarn.service.container-health-threshold.poll-frequency-secs | ヘルスチェックモニターのポーリング頻度。これは高度な設定であり、サービス所有者がその意味を理解しておらず、デフォルトを望まない場合を除いて、設定する必要はありません。デフォルトは10秒です。 |
yarn.service.container-health-threshold.window-secs | ヘルスチェックモニターが、特定のコンポーネントがヘルスしきい値を下回ることを許容する時間の長さで、その後、サービスが異常であると見なします。デフォルトは600秒(10分)です。 |
yarn.service.container-health-threshold.init-delay-secs | ヘルスチェックモニターが最初のチェックを開始する前に待機する初期時間の長さ。サービスコンテナが初めて起動するためのリードタイムを提供します。デフォルトは600秒(10分)です。 |
yarn.service.container-state-report-as-service-state | このコンポーネントが終了した場合、サービスも終了することを示すブール値フラグ。デフォルトはfalseです。 |
yarn-site.xml
ファイルでは、サービス仕様とは異なる方法で設定されるコンポーネントレベルの設定プロパティが1つあります。Dockerコンテナに使用されるDockerネットワークタイプを選択するには、サービスConfiguration
のproperties
またはコンポーネントConfiguration
のproperties
でdocker.network
を設定できます。YARNサービスコンテナと他のすべてのアプリケーションコンテナの両方のDockerネットワークタイプのシステム全体のデフォルトは、yarn-site.xml
ファイルのyarn.nodemanager.runtime.linux.docker.default-container-network
プロパティによって設定されます。
AMは、Component
フィールドのreadiness_check
を介して、コンテナのレディネスチェックを実行するように構成できます。コンテナは、レディネスチェックが成功するまでREADY
状態になりません。レディネスチェックが指定されていない場合、yarn.service.default-readiness-check.enabled
コンポーネントレベルの設定プロパティによって無効にされない限り、デフォルトのレディネスチェックが実行されます。
デフォルトのレディネスチェックは、コンテナのIPが使用可能になると成功します。IPチェックに加えて、DNSチェックを構成するオプションのプロパティもあります。DNSチェックにより、コンテナがレディと見なされる前に、コンテナホスト名のDNSルックアップが成功することが保証されます。たとえば、デフォルトのレディネスチェックのDNSチェックは、次のように有効にできます。
"readiness_check": { "type": "DEFAULT", "properties": { "dns.check.enabled": "true" } },
AMが実行できるレディネスチェックの構成可能なプロパティの完全なリストを以下に示します。
レディネスチェック | 構成可能なプロパティ | 説明 |
---|---|---|
DEFAULT、HTTP、PORT | dns.check.enabled | DNSチェックを実行する必要がある場合はtrue(デフォルトはfalse) |
DEFAULT、HTTP、PORT | dns.address | DNSチェックに使用するDNSサーバーのオプションのIP:ポートアドレス |
HTTP | url | HTTPレスポンスチェックに必要なURL。例:http://${THIS_HOST}:8080 |
HTTP | timeout | 接続タイムアウト(デフォルトは1000) |
HTTP | min.success | 成功と見なされる最小レスポンスコード(デフォルトは200) |
HTTP | max.success | 成功と見なされる最大レスポンスコード(デフォルトは299) |
PORT | port | ソケット接続に必要なポート |
PORT | timeout | ソケット接続タイムアウト(デフォルトは1000) |
HTTPレディネスチェックの例
"readiness_check": { "type": "HTTP", "properties": { "url": "http://${THIS_HOST}:8080" } },
PORTレディネスチェックの例
"readiness_check": { "type": "PORT", "properties": { "port": "8080" } },
host
ネットワークでレディネスチェックを構成する場合の警告複数のコンテナを持つコンポーネントにhost
Dockerネットワークが構成されており、コンテナが特定のポートにバインドされている場合、コンテナが同じホストに割り当てられるとポートの競合が発生します。この状況では、HTTPおよびPORTレディネスチェックは無効になります。特に、チェックが同じIP(ホストのIP)に対して実行されているため、両方のコンテナ(ポートへのバインドに成功したコンテナとそうでないコンテナ)でHTTPまたはPORTレディネスチェックが成功する可能性があります。このようなサービスの有効な構成では、アンチアフィニティ配置ポリシーを使用して、コンテナが異なるホストに割り当てられ、ポートの競合が発生しないようにすることができます。
サービスフレームワークは、ユーザーがサービスを構成するための定数変数をいくつか提供します。これらの変数は、システムによって動的に生成されるか、ユーザーが定義したサービス名などの静的な変数です。ユーザーは、設定でこれらの定数を使用して、サービスAMによって動的に置換できます。例:
{ "type" : "HADOOP_XML", "dest_file" : "/etc/hadoop/hbase-site.xml", "properties" : { "hbase.regionserver.hostname": "${COMPONENT_INSTANCE_NAME}.${SERVICE_NAME}.${USER}.${DOMAIN}" } }
ここで、COMPONENT_INSTANCE_NAME
とSERVICE_NAME
は、システムによって置換される定数です。
COMPONENT_INSTANCE_NAME
がregionserver-0
で、SERVICE_NAME
がユーザーによってhbase
として定義され、ユーザー名がdevuser
で、ドメイン名がdev.test
であるとします。次に、設定はサービスAMによって置換され、コンテナ内の設定ファイル/etc/hadoop/hbase-site.xml
に次のように書き込まれます。
<property> <name>hbase.regionserver.hostname</name> <value>regionserver-0.hbase.devuser.dev.test</value> </property>
ここで、regionserver-0
は、システムによってこのコンテナに割り当てられた実際のコンポーネントインスタンス名です。
名前 | 説明 |
---|---|
SERVICE_NAME | ユーザーが定義したサービスの名前 |
USER | サービスを送信したユーザー。「_」を含むユーザー名は、DNSホスト名RFC形式(「_」は許可されない)に準拠するために「-」を使用して変換され、すべての文字は小文字になります。例:「Bob_dev」は「bob-dev」に変換されます |
DOMAIN | クラスタのドメイン名 |
COMPONENT_NAME | 特定のコンポーネントの名前 |
COMPONENT_INSTANCE_NAME | 特定のコンポーネントインスタンス(つまり、コンテナ)の名前 |
COMPONENT_ID | 特定のコンポーネントの単調増加整数 |
CONTAINER_ID | 特定のコンテナのYARNコンテナID |
${COMPONENT_INSTANCE_NAME}_HOST | コンポーネントインスタンス(つまり、コンテナ)のホスト名。例:REGIONSERVER-0_HOSTは、コンポーネントインスタンスの実際のホスト名に置き換えられます。すべての文字は大文字である必要があります。 |
${COMPONENT_INSTANCE_NAME}_IP | コンポーネントインスタンス(つまり、コンテナ)のIP。例:REGIONSERVER-0_IPは、コンポーネントインスタンスの実際のIPアドレスに置き換えられます。すべての文字は大文字である必要があります。 |
CLUSTER_FS_URI | クラスタhdfsのURI |