我正在使用该类编写 Parquet 文件ParquetDatasetStoreWriter
,但我得到的性能非常糟糕。通常遵循的流程是这样的:
// First write
dataStoreWriter.write(entity #1);
dataStoreWriter.write(entity #2);
...
dataStoreWriter.write(entity #N);
// Then close
dataStoreWriter.close()
如您所知,问题在于 mydataStoreWriter
是一个门面,而真正的写作工作是由 ataskExecutor
和 a完成的taskScheduler
。通过这些提示到标准输出的消息可以看出这项工作:
INFO: parquet.hadoop.ColumnChunkPageWriteStore: written 685B for [localId] BINARY: 300,000 values, ...
INFO: parquet.hadoop.ColumnChunkPageWriteStore: written 75B for [factTime] INT64: 300,000 values, ...
INFO: parquet.hadoop.ColumnChunkPageWriteStore: written 50B for [period] INT32: 300,000 values, ...
INFO: parquet.hadoop.ColumnChunkPageWriteStore: written 6,304B for [objectType] BINARY: 300,000 values, ...
如您所见,我为每个 Parquet 文件写入 300K 个对象,这导致磁盘中的文件大约为 700K。没什么大不了的......但是,在一两次写入之后,我收到的消息越来越少,并且进程停止了......
对可能发生的事情有任何想法吗?Cloudera 中的一切都是绿色的……
使用的版本:
- Cloudera 5.11
- 爪哇 8
- Spring 集成 4.3.12.RELEASE
- Spring Data Hadoop 2.2.0.RELEASE
编辑:实际上,我使用 Kite Dataset CLI 工具隔离了 Parquet 文件的编写,问题在于 SKD 本身的性能。使用该csv-import
命令并从 CSV 加载数据,我看到我们正在以每分钟 400.000 条记录的速度写入,这远低于我们正在写入的每分钟 15.0000.000 条记录,因此停滞不前......
你能推荐任何提高写作速度的方法吗?谢谢!