-
Notifications
You must be signed in to change notification settings - Fork 3.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
HBASE-24791 Improve HFileOutputFormat2 to avoid always call getTableRelativePath method #2167
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -222,6 +222,7 @@ static <V extends Cell> RecordWriter<ImmutableBytesWritable, V> createRecordWrit | |
private final Map<byte[], WriterLength> writers = new TreeMap<>(Bytes.BYTES_COMPARATOR); | ||
private final Map<byte[], byte[]> previousRows = new TreeMap<>(Bytes.BYTES_COMPARATOR); | ||
private final long now = EnvironmentEdgeManager.currentTime(); | ||
private byte[] tableNameBytes = Bytes.toBytes(writeTableNames);; | ||
|
||
@Override | ||
public void write(ImmutableBytesWritable row, V cell) throws IOException { | ||
|
@@ -235,7 +236,6 @@ public void write(ImmutableBytesWritable row, V cell) throws IOException { | |
byte[] rowKey = CellUtil.cloneRow(kv); | ||
int length = (PrivateCellUtil.estimatedSerializedSizeOf(kv)) - Bytes.SIZEOF_INT; | ||
byte[] family = CellUtil.cloneFamily(kv); | ||
byte[] tableNameBytes = null; | ||
if (writeMultipleTables) { | ||
tableNameBytes = MultiTableHFileOutputFormat.getTableName(row.get()); | ||
tableNameBytes = TableName.valueOf(tableNameBytes).getNameWithNamespaceInclAsString() | ||
|
@@ -244,11 +244,7 @@ public void write(ImmutableBytesWritable row, V cell) throws IOException { | |
throw new IllegalArgumentException("TableName " + Bytes.toString(tableNameBytes) + | ||
" not expected"); | ||
} | ||
} else { | ||
tableNameBytes = Bytes.toBytes(writeTableNames); | ||
} | ||
String tableName = Bytes.toString(tableNameBytes); | ||
Path tableRelPath = getTableRelativePath(tableNameBytes); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. That is a nice find. private Path getTableRelativePath(byte[] tableNameBytes) { There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. tableName split 3 times int getTableRelativePath method has fixed in this PR i will do some other fixes in next commit , the code there is a little mess |
||
byte[] tableAndFamily = getTableNameSuffixedWithFamily(tableNameBytes, family); | ||
|
||
WriterLength wl = this.writers.get(tableAndFamily); | ||
|
@@ -257,9 +253,9 @@ public void write(ImmutableBytesWritable row, V cell) throws IOException { | |
if (wl == null) { | ||
Path writerPath = null; | ||
if (writeMultipleTables) { | ||
Path tableRelPath = getTableRelativePath(tableNameBytes); | ||
writerPath = new Path(outputDir,new Path(tableRelPath, Bytes.toString(family))); | ||
} | ||
else { | ||
} else { | ||
writerPath = new Path(outputDir, Bytes.toString(family)); | ||
} | ||
fs.mkdirs(writerPath); | ||
|
@@ -274,39 +270,36 @@ public void write(ImmutableBytesWritable row, V cell) throws IOException { | |
|
||
// create a new WAL writer, if necessary | ||
if (wl == null || wl.writer == null) { | ||
InetSocketAddress[] favoredNodes = null; | ||
if (conf.getBoolean(LOCALITY_SENSITIVE_CONF_KEY, DEFAULT_LOCALITY_SENSITIVE)) { | ||
HRegionLocation loc = null; | ||
|
||
String tableName = Bytes.toString(tableNameBytes); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Looks like a format issue here? |
||
if (tableName != null) { | ||
try (Connection connection = ConnectionFactory.createConnection(conf); | ||
RegionLocator locator = | ||
connection.getRegionLocator(TableName.valueOf(tableName))) { | ||
RegionLocator locator = connection.getRegionLocator(TableName.valueOf(tableName))) { | ||
loc = locator.getRegionLocation(rowKey); | ||
} catch (Throwable e) { | ||
LOG.warn("Something wrong locating rowkey {} in {}", | ||
Bytes.toString(rowKey), tableName, e); | ||
LOG.warn("Something wrong locating rowkey {} in {}", Bytes.toString(rowKey), | ||
tableName, e); | ||
loc = null; | ||
} } | ||
|
||
} | ||
} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Here also. |
||
if (null == loc) { | ||
LOG.trace("Failed get of location, use default writer {}", Bytes.toString(rowKey)); | ||
wl = getNewWriter(tableNameBytes, family, conf, null); | ||
} else { | ||
LOG.debug("First rowkey: [{}]", Bytes.toString(rowKey)); | ||
InetSocketAddress initialIsa = | ||
new InetSocketAddress(loc.getHostname(), loc.getPort()); | ||
if (initialIsa.isUnresolved()) { | ||
LOG.trace("Failed resolve address {}, use default writer", loc.getHostnamePort()); | ||
wl = getNewWriter(tableNameBytes, family, conf, null); | ||
} else { | ||
LOG.debug("Use favored nodes writer: {}", initialIsa.getHostString()); | ||
wl = getNewWriter(tableNameBytes, family, conf, new InetSocketAddress[] { initialIsa | ||
}); | ||
favoredNodes = new InetSocketAddress[] { initialIsa}; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Does this apply when LOCALITY_SENSITIVE_CONF_KEY check on line 274 is false ? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yes, if the same logic with before , just code clean before this pr, too much |
||
} | ||
} | ||
} else { | ||
wl = getNewWriter(tableNameBytes, family, conf, null); | ||
} | ||
wl = getNewWriter(tableNameBytes, family, conf, favoredNodes); | ||
|
||
} | ||
|
||
// we now have the proper WAL writer. full steam ahead | ||
|
@@ -321,9 +314,9 @@ public void write(ImmutableBytesWritable row, V cell) throws IOException { | |
private Path getTableRelativePath(byte[] tableNameBytes) { | ||
String tableName = Bytes.toString(tableNameBytes); | ||
String[] tableNameParts = tableName.split(":"); | ||
Path tableRelPath = new Path(tableName.split(":")[0]); | ||
Path tableRelPath = new Path(tableNameParts[0]); | ||
if (tableNameParts.length > 1) { | ||
tableRelPath = new Path(tableRelPath, tableName.split(":")[1]); | ||
tableRelPath = new Path(tableRelPath, tableNameParts[1]); | ||
} | ||
return tableRelPath; | ||
} | ||
|
@@ -377,15 +370,14 @@ private WriterLength getNewWriter(byte[] tableName, byte[] family, Configuration | |
encoding = encoding == null ? datablockEncodingMap.get(tableAndFamily) : encoding; | ||
encoding = encoding == null ? DataBlockEncoding.NONE : encoding; | ||
HFileContextBuilder contextBuilder = new HFileContextBuilder() | ||
.withCompression(compression).withChecksumType(HStore.getChecksumType(conf)) | ||
.withCompression(compression).withDataBlockEncoding(encoding).withChecksumType(HStore.getChecksumType(conf)) | ||
.withBytesPerCheckSum(HStore.getBytesPerChecksum(conf)).withBlockSize(blockSize) | ||
.withColumnFamily(family).withTableName(tableName); | ||
|
||
if (HFile.getFormatVersion(conf) >= HFile.MIN_FORMAT_VERSION_WITH_TAGS) { | ||
contextBuilder.withIncludesTags(true); | ||
} | ||
|
||
contextBuilder.withDataBlockEncoding(encoding); | ||
HFileContext hFileContext = contextBuilder.build(); | ||
if (null == favoredNodes) { | ||
wl.writer = new StoreFileWriter.Builder(conf, CacheConfig.DISABLED, fs) | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Remove extra semicolon at end.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ok,thanks for ponit it
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
has finished