Apache ORC读取文件时缓冲区过小,如何修改配置调整大小?
解决ORC文件读取缓冲区大小不足的问题
你遇到的是ORC读取器的列数据缓冲区溢出问题——默认65536字节(64KB)的缓冲区无法容纳单条列数据的实际大小(1817279字节),这个参数是可以修改的,不同运行环境的配置方式如下:
1. Spark 环境
- 核心配置项:
spark.sql.orc.buffer.size(单位:字节) - 配置方式:
- 在SparkSession初始化时通过代码设置:
val spark = SparkSession.builder() .config("spark.sql.orc.buffer.size", "1817279") .appName("ORCReaderDemo") .getOrCreate() - 或者在
spark-defaults.conf中添加全局配置:spark.sql.orc.buffer.size 1817279
- 在SparkSession初始化时通过代码设置:
2. Hive 环境
- 核心配置项:
orc.reader.buffer.size(单位:字节) - 配置方式:
- 在
hive-site.xml中添加配置节点:<property> <name>orc.reader.buffer.size</name> <value>1817279</value> </property> - 或者启动Hive CLI时临时指定:
hive --hiveconf orc.reader.buffer.size=1817279
- 在
3. 原生ORC Java/Python 库
Java 端
通过ReaderOptions直接设置缓冲区大小:
import org.apache.orc.Reader; import org.apache.orc.ReaderOptions; import org.apache.orc.OrcFile; ReaderOptions options = ReaderOptions.create().setBufferSize(1817279); Reader reader = OrcFile.createReader(new Path("path/to/file.orc"), options);
Python 端(pyorc 库)
读取文件时指定buffer_size参数:
import pyorc with open("path/to/file.orc", "rb") as f: reader = pyorc.Reader(f, buffer_size=1817279)
注意事项
- 确保使用的ORC版本不低于1.5.0,该参数在更早的版本中可能未被支持;
- 设置的缓冲区大小需不小于单条列数据的最大实际长度,避免再次溢出。
内容的提问来源于stack exchange,提问作者Ruben Hartenstein
相关产品推荐
相关产品推荐

