我正在使用DynamicDestinations(来自BigQueryIO)将数据从一个Cassandra表导出到多个Google BigQuery表。该过程包括几个步骤,包括将准备好的数据写入Google云端存储(作为JSON格式的文件),然后通过加载作业将文件加载到BQ。
问题是导出过程已在最后一步因内存不足错误而结束(将文件从Google Storage加载到BQ)。但是有准备好的文件,其中包含GCS中的所有数据。 BigQueryWriteTemp位置有3个目录:
还有很多名字不明显的文件:
问题是文件的存储结构是什么?如何将文件与他们准备的表(表名)进行匹配?如何使用这些文件从加载作业步骤继续导出过程?我可以使用一些Beam代码吗?
答案 0 :(得分:2)
如果您使用Beam 2.3.0或更早版本,这些文件包含要使用其加载作业API导入BigQuery的JSON数据。但是:
基本上,您需要重新运行管道并修复OOM问题才能成功。
为了调试OOM问题,我建议使用堆转储。 Dataflow可以使用--dumpHeapOnOOM --saveHeapDumpsToGcsPath=gs://my_bucket/
将堆转储写入GCS。您可以使用任何Java内存分析器(例如Eclipse MAT或YourKit)检查这些转储。您也可以将您的代码作为单独的SO问题发布,并请求减少其内存使用量的建议。