code: static FileSystem createProxiedFileSystemUsingKeytab(State state, URI fsURI, Configuration conf)
        throws IOException, InterruptedException {
      Preconditions.checkArgument(state.contains(ConfigurationKeys.FS_PROXY_AS_USER_NAME));
      Preconditions.checkArgument(state.contains(ConfigurationKeys.SUPER_USER_NAME_TO_PROXY_AS_OTHERS));
      Preconditions.checkArgument(state.contains(ConfigurationKeys.SUPER_USER_KEY_TAB_LOCATION));
  
      return createProxiedFileSystemUsingKeytab(state.getProp(ConfigurationKeys.FS_PROXY_AS_USER_NAME),
          state.getProp(ConfigurationKeys.SUPER_USER_NAME_TO_PROXY_AS_OTHERS),
          new Path(state.getProp(ConfigurationKeys.SUPER_USER_KEY_TAB_LOCATION)), fsURI, conf);
    }
docs: Create a {@link FileSystem} that can perform any operations allowed the by the specified userNameToProxyAs. This
  method uses the {@link #createProxiedFileSystemUsingKeytab(String, String, Path, URI, Configuration)} object to perform
  all its work. A specific set of configuration keys are required to be set in the given {@link State} object:
  
  <ul>
  <li>{@link ConfigurationKeys#FS_PROXY_AS_USER_NAME} specifies the user name to proxy as</li>
  <li>{@link ConfigurationKeys#SUPER_USER_NAME_TO_PROXY_AS_OTHERS} specifies the name of the user with secure
  impersonation priveleges</li>
  <li>{@link ConfigurationKeys#SUPER_USER_KEY_TAB_LOCATION} specifies the location of the super user's keytab file</li>
  <ul>
  
  @param state The {@link State} object that contains all the necessary key, value pairs for
  {@link #createProxiedFileSystemUsingKeytab(String, String, Path, URI, Configuration)}
  @param fsURI The {@link URI} for the {@link FileSystem} that should be created
  @param conf The {@link Configuration} for the {@link FileSystem} that should be created
  
  @return a {@link FileSystem} that can execute commands on behalf of the specified userNameToProxyAs