diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/FSUtils.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/util/FSUtils.java index a3b1e375fbbf..e84e9bf3a81f 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/FSUtils.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/util/FSUtils.java @@ -85,7 +85,6 @@ import org.apache.hadoop.hdfs.protocol.LocatedBlock; import org.apache.hadoop.io.IOUtils; import org.apache.hadoop.ipc.RemoteException; -import org.apache.hadoop.util.Progressable; import org.apache.yetus.audience.InterfaceAudience; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -198,27 +197,20 @@ public static FSDataOutputStream create(Configuration conf, FileSystem fs, Path if (fs instanceof HFileSystem) { FileSystem backingFs = ((HFileSystem) fs).getBackingFs(); if (backingFs instanceof DistributedFileSystem) { - // Try to use the favoredNodes version via reflection to allow backwards- - // compatibility. short replication = Short.parseShort(conf.get(ColumnFamilyDescriptorBuilder.DFS_REPLICATION, String.valueOf(ColumnFamilyDescriptorBuilder.DEFAULT_DFS_REPLICATION))); - try { - return (FSDataOutputStream) (DistributedFileSystem.class - .getDeclaredMethod("create", Path.class, FsPermission.class, boolean.class, int.class, - short.class, long.class, Progressable.class, InetSocketAddress[].class) - .invoke(backingFs, path, perm, true, CommonFSUtils.getDefaultBufferSize(backingFs), - replication > 0 ? replication : CommonFSUtils.getDefaultReplication(backingFs, path), - CommonFSUtils.getDefaultBlockSize(backingFs, path), null, favoredNodes)); - } catch (InvocationTargetException ite) { - // Function was properly called, but threw it's own exception. - throw new IOException(ite.getCause()); - } catch (NoSuchMethodException e) { - LOG.debug("DFS Client does not support most favored nodes create; using default create"); - LOG.trace("Ignoring; use default create", e); - } catch (IllegalArgumentException | SecurityException | IllegalAccessException e) { - LOG.debug("Ignoring (most likely Reflection related exception) " + e); + DistributedFileSystem.HdfsDataOutputStreamBuilder builder = + ((DistributedFileSystem) backingFs).createFile(path).recursive().permission(perm) + .create(); + if (favoredNodes != null) { + builder.favoredNodes(favoredNodes); + } + if (replication > 0) { + builder.replication(replication); } + return builder.build(); } + } return CommonFSUtils.create(fs, path, perm, true); }