alan.zhao created HBASE-27670:
---------------------------------
Summary: The FSDataOutputStream is obtained without reflection mode
Key: HBASE-27670
URL: https://issues.apache.org/jira/browse/HBASE-27670
Project: HBase
Issue Type: Improvement
Environment: HBase version: 2.2.3
Reporter: alan.zhao
hbase interacts with hdfs and obtains FSDataOutputStream to generate HFiles. In
order to support favoredNodes, reflection is used. The DistributedFileSystem
has a more direct way to get the FSDataOutputStream,for
example:dfs.createFile(path).permission(perm).create()...; this API allows you
to set various parameters, including favoredNodes. I think avoiding reflection
can improve performance, and if you agree with me, I can optimize this part of
the code;
Model:hbase-server
class:FSUtils
{code:java}
public static FSDataOutputStream create(Configuration conf, FileSystem fs, Path
path,
FsPermission perm, InetSocketAddress[] favoredNodes) throws IOException {
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));{code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)