我们正在使用Kafka队列来收集来自不同设备的json格式的点击流数据。我们需要通过Hive(或者Spark)来分析这些数据。我们考虑使用每小时分区,我们将在每小时调用我们的hive / spark作业。 我阅读了有关不同文件格式的信息,但我无法确定最佳文件格式以获得更好的查询性能。我们试图在s3中以avro格式保存json数据,但查询速度很慢。
我们可以将json数据作为柱状格式插入到s3中。 (相反,如果插入一个包含整个json记录的列)你怎么看待s3中不同列中的每个json属性? (我们的模式很少变化)
我们将运行每小时的蜂巢/火花工作。所以我们需要在每小时分区中检索所有记录。但是我会在不同的查询中查询不同的列。哪种文件格式更适合我们的情况? (avro,镶木地板,兽人等)
答案 0 :(得分:1)
首先,Hive和Spark在S3数据上的速度非常快。 Presto / Athena纯粹基于S3上的adhoc SQL查询更快。请记住,如果您使用这些选项,则需要一种更新Hive Metastore的方法......只需将文件登陆到S3中的新的每小时文件路径是不够的。
ORC或Parquet比Avro更具性能。 Avro比JSON或纯文本更具性能(加上适应模式演变)。 Netflix has done performance testing on ORC and Parquet on S3 using Presto
不确定你的意思是“我们试图以avro格式保存json数据”...如果您使用的是Kafka S3 Connector by Confluent,并且使用了转换器,那么此时它不会提供Hive集成。但是如果你以某种方式添加了Hive,并且你的查询速度很慢,那么你需要增加文件的刷新大小。它也不支持除JSON或Avro之外的有用查询格式。
如果您正在使用Secor by Pinterest,则可提供Parquet&来自Kafka的ORC支持和Hive集成,所以我会推荐它。
如果您想在流式传输框架而不是批处理中处理每小时记录,您也可以使用它们,并且比等待S3结果更快。