为什么使用 ORC 的 MapReduce 进程需要一个 HIVE class?

Why MapReduce process with ORC needs a HIVE class?

我正在实施一个 mapreduce 进程,其中读取、处理和写入 orc 文件,问题是当我尝试使用 map 任务读取时它会产生一个错误,要求 org.apache.hadoop.hive.common.io.DiskRange Class ,当我导入 hive-exec.3.1 时。1.jar 它可以工作,但集群使用另一个配置单元版本及其旧的依赖项,这是一个错误的解决方案。

java.lang.Exception: java.lang.NoClassDefFoundError: org/apache/hadoop/hive/common/io/DiskRange
    at org.apache.hadoop.mapred.LocalJobRunner$Job.runTasks(LocalJobRunner.java:462)
    at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:522)
Caused by: java.lang.NoClassDefFoundError: org/apache/hadoop/hive/common/io/DiskRange
    at org.apache.orc.OrcFile.createReader(OrcFile.java:342)
    at org.apache.orc.mapreduce.OrcInputFormat.createRecordReader(OrcInputFormat.java:68)
    at org.apache.hadoop.mapreduce.lib.input.DelegatingRecordReader.<init>(DelegatingRecordReader.java:57)
    at org.apache.hadoop.mapreduce.lib.input.DelegatingInputFormat.createRecordReader(DelegatingInputFormat.java:129)
    at org.apache.hadoop.mapred.MapTask$NewTrackingRecordReader.<init>(MapTask.java:512)
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:755)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341)
    at org.apache.hadoop.mapred.LocalJobRunner$Job$MapTaskRunnable.run(LocalJobRunner.java:243)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)

我正在为 OrcStruct 和 hive.ql.io.orc.OrcSerde 使用本机 orc 库,这导致了异常。现在我正在使用 hive.ql.io.orc.

中的所有库