什么" RemoteException" HDFS一般意味着什么?

时间:2016-07-25 01:47:07

标签: hadoop hdfs terminology

1)任何人都可以帮助我关于" Remoteexception"的概念这一般意味着什么?

2)unwrapRemoteException是什么意思?不确定这意味着"如果这个远程异常包装了其中一个lookupTypes"

  /**
   * If this remote exception wraps up one of the lookupTypes
   * then return this exception.
   * <p>
   * Unwraps any IOException.
   * 
   * @param lookupTypes the desired exception class.
   * @return IOException, which is either the lookupClass exception or this.
   */
  public IOException unwrapRemoteException(Class<?>... lookupTypes) {
    if(lookupTypes == null)
      return this;
    for(Class<?> lookupClass : lookupTypes) {
      if(!lookupClass.getName().equals(getClassName()))
        continue;
      try {
        return instantiateException(lookupClass.asSubclass(IOException.class));
      } catch(Exception e) {
        // cannot instantiate lookupClass, just return this
        return this;
      }
    }
    // wrapped up exception is not in lookupTypes, just return this
    return this;
  }

(Hadoop_HDFS_Open_Source:https://github.com/apache/hadoop

提前致谢!任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

  

1)任何人都可以帮助我解决“Remoteexception”的概念吗?这一般意味着什么?

在服务器端抛出(创建)远程异常。服务器抛出此类异常,因为客户端发送了无效请求,或者服务器有内部错误或其他内容。服务器端的RPC服务器将异常序列化,并将其发送到客户端。客户端反序列化异常,并获得异常。

  

2)unwrapRemoteException是什么意思?

问题是“为什么我们需要包装异常”。首先,RemoteException是一个包装器而不是真正的异常。服务器抛出的真正异常可能是AccessControlException(用户没有普遍性),FileNotFoundException(无效请求)。我们将它们包装在RemoteException中。但为什么?因为代码更清晰,更易读。

  

不确定是否意味着“如果此远程异常包含其中一个lookupTypes”

例如,在DFSClient.java

public HdfsFileStatus getFileInfo(String src) throws IOException {
  checkOpen();
  try {
    return namenode.getFileInfo(src);
  } catch(RemoteException re) {
    throw re.unwrapRemoteException(AccessControlException.class,
                                   FileNotFoundException.class,
                                   UnresolvedPathException.class);
  }
}

如果re包裹FileNotFoundException,则getFileInfo仅返回FileNotFoundException。然后用户可以看到更短的&amp;清除异常消息。用户只需要知道找不到文件,不管它是否是远程文件。

但是如果re包含SafeModeException或某个未知异常。这可能是服务器的内部错误或配置错误。我们完全抛出re(RemoteException)。因此,即使用户不知道包装的SafeModeException(或某个未知的异常),用户也可以从远程(服务器端)知道错误。用户可以向技术支持部门寻求帮助。