You are viewing a plain text version of this content. The canonical link for it is here.
Posted to yarn-issues@hadoop.apache.org by "Steve Suh (Jira)" <ji...@apache.org> on 2021/07/20 17:53:00 UTC
[jira] [Commented] (YARN-10857) YarnClient Caching Addresses
[ https://issues.apache.org/jira/browse/YARN-10857?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17384426#comment-17384426 ]
Steve Suh commented on YARN-10857:
----------------------------------
An unresolved InetSocketAddress object is created during the initialization of the YarnClient. This InetSocketAddress object is passed around and reused by the IPC [Client.java|https://github.com/apache/hadoop/blob/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/Client.java]
Here the InetSocketAddress is only checked if it's an unresolved address. It does not attempt to re-resolve the cached address and throws and error.
https://github.com/apache/hadoop/blob/de41ce8a16434aee13f705a9e3666f29e8ec8cb3/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/Client.java#L1602-L1608
{code:java}
if (address.isUnresolved()) {
throw NetUtils.wrapException(address.getHostName(),
address.getPort(),
null,
0,
new UnknownHostException());
}
{code}
A possible fix would be to change this check and include the following: _if (address.isUnresolved() *{color:#4C9AFF}&& !updateAddress(){color}*)_
{code:java}
if (address.isUnresolved() && !updateAddress()) {
throw NetUtils.wrapException(address.getHostName(),
address.getPort(),
null,
0,
new UnknownHostException());
}
{code}
> YarnClient Caching Addresses
> ----------------------------
>
> Key: YARN-10857
> URL: https://issues.apache.org/jira/browse/YARN-10857
> Project: Hadoop YARN
> Issue Type: Improvement
> Components: client, yarn
> Reporter: Steve Suh
> Assignee: Prabhu Joseph
> Priority: Minor
>
> We have noticed that when the YarnClient is initialized and used, it is not very resilient when dns or /etc/hosts is modified in the following scenario:
> Take for instance the following (and reproducable) sequence of events that can occur on a service that instantiates and uses YarnClient.
> - Yarn has rm HA enabled (*yarn.resourcemanager.ha.enabled* is *true*) and there are two rms (rm1 and rm2).
> - *yarn.client.failover-proxy-provider* is set to *org.apache.hadoop.yarn.client.RequestHedgingRMFailoverProxyProvider*
> 1) rm2 is currently the active rm
> 2) /etc/hosts (or dns) is missing host information for rm2
> 3) A service is started and it initializes the YarnClient at startup.
> 4) At some point in time after YarnClient is done initializing, /etc/hosts is updated and contains host information for rm2
> 5) Yarn is queried, for instance calling *yarnclient.getApplications()*
> 6) All YarnClient attempts to communicate with rm2 fail with UnknownHostExceptions, even though /etc/hosts now contains host information for it.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)
---------------------------------------------------------------------
To unsubscribe, e-mail: yarn-issues-unsubscribe@hadoop.apache.org
For additional commands, e-mail: yarn-issues-help@hadoop.apache.org