This is an automated email from the ASF dual-hosted git repository.
dongjoon pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/orc.git
The following commit(s) were added to refs/heads/main by this push:
new 68f4a8bb9 ORC-1570: Add `supportVectoredIO` API to
`HadoopShimsCurrent` and use it
68f4a8bb9 is described below
commit 68f4a8bb970cb370faba6b907ae93164e3243042
Author: Dongjoon Hyun <[email protected]>
AuthorDate: Thu Jan 4 00:23:10 2024 -0800
ORC-1570: Add `supportVectoredIO` API to `HadoopShimsCurrent` and use it
### What changes were proposed in this pull request?
This PR aims to improve `HadoopShimsCurrent` by adding `supportVectoredIO`.
### Why are the changes needed?
Hadoop Vectored IO exists at Apache Hadoop 3.3.5+ via HADOOP-18103.
### How was this patch tested?
Pass the CIs.
Closes #1725 from dongjoon-hyun/ORC-1570.
Authored-by: Dongjoon Hyun <[email protected]>
Signed-off-by: Dongjoon Hyun <[email protected]>
---
java/core/src/java/org/apache/orc/impl/RecordReaderUtils.java | 3 ++-
java/shims/src/java/org/apache/orc/impl/HadoopShims.java | 10 ++++++++++
2 files changed, 12 insertions(+), 1 deletion(-)
diff --git a/java/core/src/java/org/apache/orc/impl/RecordReaderUtils.java
b/java/core/src/java/org/apache/orc/impl/RecordReaderUtils.java
index 717e49737..0eabb421e 100644
--- a/java/core/src/java/org/apache/orc/impl/RecordReaderUtils.java
+++ b/java/core/src/java/org/apache/orc/impl/RecordReaderUtils.java
@@ -48,6 +48,7 @@ import java.util.function.Supplier;
*/
public class RecordReaderUtils {
private static final HadoopShims SHIMS = HadoopShimsFactory.get();
+ private static final boolean supportVectoredIO = SHIMS.supportVectoredIO();
private static final Logger LOG =
LoggerFactory.getLogger(RecordReaderUtils.class);
private static class DefaultDataReader implements DataReader {
@@ -107,7 +108,7 @@ public class RecordReaderUtils {
public BufferChunkList readFileData(BufferChunkList range,
boolean doForceDirect
) throws IOException {
- if (zcr == null) {
+ if (supportVectoredIO && zcr == null) {
RecordReaderUtils.readDiskRangesVectored(file, range, doForceDirect);
} else {
RecordReaderUtils.readDiskRanges(file, zcr, range, doForceDirect,
diff --git a/java/shims/src/java/org/apache/orc/impl/HadoopShims.java
b/java/shims/src/java/org/apache/orc/impl/HadoopShims.java
index d15768de8..2ae0364f2 100644
--- a/java/shims/src/java/org/apache/orc/impl/HadoopShims.java
+++ b/java/shims/src/java/org/apache/orc/impl/HadoopShims.java
@@ -20,6 +20,7 @@ package org.apache.orc.impl;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
+import org.apache.hadoop.util.VersionInfo;
import org.apache.orc.EncryptionAlgorithm;
import java.io.Closeable;
@@ -131,6 +132,15 @@ public interface HadoopShims {
*/
boolean endVariableLengthBlock(OutputStream output) throws IOException;
+ default boolean supportVectoredIO() {
+ // HADOOP-18103 is available since Apache Hadoop 3.3.5+
+ String[] versionParts = VersionInfo.getVersion().split("[.]");
+ int major = Integer.parseInt(versionParts[0]);
+ int minor = Integer.parseInt(versionParts[1]);
+ int patch = Integer.parseInt(versionParts[2]);
+ return major == 3 && (minor > 3 || (minor == 3 && patch > 4));
+ }
+
/**
* The known KeyProviders for column encryption.
* These are identical to OrcProto.KeyProviderKind.