Hadoop ORC或拼花地板格式的灵活模式是否可行?

Hadoop ORC或拼花地板格式的灵活模式是否可行?,hadoop,bigdata,parquet,orc,Hadoop,Bigdata,Parquet,Orc,我的Java应用程序使用实时数据,然后发布到S3上的ORC文件中 问题在于,我们在处理所有记录之前不知道文件的模式,而不是第一条记录 例如: 消息1具有属性A和B 消息2具有属性A、B和C 消息3具有属性A&C 因为这是一个实时应用程序,所以我不希望处理所有消息来计算模式,因为那样会非常慢 在我们处理数据时是否可以添加到模式中 我已经看了Java示例,但没有找到解决方法 这里的拼花地板更好吗 我想你可能是想把一个圆钉子装进一个方孔里。听起来好像您正在接收一个具有未知模式的事件流,并且希望将其

我的Java应用程序使用实时数据,然后发布到S3上的ORC文件中

问题在于,我们在处理所有记录之前不知道文件的模式,而不是第一条记录

例如:

  • 消息1具有属性A和B
  • 消息2具有属性A、B和C
  • 消息3具有属性A&C
因为这是一个实时应用程序,所以我不希望处理所有消息来计算模式,因为那样会非常慢

在我们处理数据时是否可以添加到模式中

我已经看了Java示例,但没有找到解决方法


这里的拼花地板更好吗

我想你可能是想把一个圆钉子装进一个方孔里。听起来好像您正在接收一个具有未知模式的事件流,并且希望将其存储为针对已知模式进行优化的格式

我假设您可以在跟踪模式的同时缓冲一定数量的事件(例如,100万个事件),然后在达到该数量后清除到一个文件,然后再次开始缓冲。缺点是每个文件都会以不同的模式结束,这使得跨多个文件处理数据变得不切实际

另一种解决方案是研究无模式的数据存储,尽管您并没有获得与S3上的ORC或Parquet相同的性价比优势


还有其他策略,但长期解决方案的最佳选择是与管理您接收的事件源的人交谈,并找到提前确定模式的方法。

谢谢,我们最终使用了固定模式,但添加了一个映射以支持更灵活的属性,这将很好地工作,即使您可能并不总是从中获得最佳性能(我在过去也做过类似的事情)。您使用的是什么存储格式?Avro用于初始存储,如果我们希望通过雅典娜查询,可能会转换为拼花地板