【发布时间】:2019-08-10 10:33:21
【问题描述】:
使用 Google Dataflow 服务将来自 Kafka 的相同 10k json 记录批量加载到 Google 云存储中。 以下是分别使用 Apache Beam 的 AvroIO、ParquetIO、TextIO 库生成的文件的分解。
我们假设 parquet 文件大小在数据占用量方面会比 GCP 的 avro 更小,因为 HDP (Hortonworks) 和 CDH (Cloudera) 显示了上述类似的研究。 https://stackoverflow.com/a/31093105/4250322
但是,这 10k 记录的结果表明 GCS 上的 Avro 大小较小。可以假设选择数据格式。除了这里提到的优势之外,还有哪些其他因素需要考虑:https://cloud.google.com/blog/products/gcp/improve-bigquery-ingestion-times-10x-by-using-avro-source-format
我们希望选择最佳格式并将总成本保持在最低水平,从而将 GCS 成本保持在最低水平。
// using ParquetIO write as parquet output file
pCollectionGenericRecords.apply ("ParquetToGCS",FileIO.<GenericRecord>write().via(ParquetIO.sink(AVRO_SCHEMA))
// Using TextIO write as text output file
collection.apply(TextIO.write().to(stagingLocation));
// Using AvroIO write as avro output file
pCollectionGenericRecords.apply("AvroToGCS", AvroIO.writeGenericRecords(AVRO_SCHEMA)
更新根据建议。
使用 Dataflow 服务处理 60 万条 259.48 MB 的 json 记录以生成以下 avro vs parquet 格式:
Avro 输出大小 = 52.8 MB
Parquet 输出大小 = 199.2 MB
为了使用 Dataflow 服务进行更大规模的测试,是否有可用的研究可供利用。
【问题讨论】:
标签: google-cloud-storage google-cloud-dataflow avro apache-beam parquet