我目前正在构建一个系统,在集群上使用hadoop生态系统来存储我们的数据,并使其易于访问和查询。我有几个关于如何存储输入数据的问题,我们想通过hive访问这些数据。
我们的数据如下:
异构传感器的传感器数据
数据按时间顺序保存。
数据大小:几百gb到TB,每个文件大小约为20-40 gb
当前数据格式:专有数据格式
存储c结构数据的二进制文件
每个结构都有一个时间戳,每个传感器消息都有几个不同的字段(有些字段也是嵌套的)
我已经编写了一个数据解析器,能够将任何数据文件转换为新的输出格式。我们考虑过在hdfs上以csv或json数据格式存储数据,然后将数据与hive一起使用。
我的问题:
在使用hive时csv比json更适合吗?
我们担心在选择json时性能会变差。还应考虑json的文件大小开销。在json上使用csv还有其他好处吗?
如果我们选择json,我们的文件中不应该有嵌套对象吗?
因为我们还没有构建json文件的结构,所以我们仍然可以选择不使用这些嵌套对象,而是在根对象中使用所有字段,并将嵌套对象的名称附加到字段名称中。示例:字段 nestedObjectName.nestedField1
而不是真正的嵌套对象。我知道Hive不喜欢域名中的点。
如果我们选择json,我们应该使用哪个json serde?
我读过rcongiu的hivejson-serde可能是最好的。这篇博文很老(2013年7月),事情可能已经改变了。
如果我们选择csv,我们应该创建一个大表还是几个“小”表来允许对数据有不同的视图?
我的意思是我们有自己的c结构。这些结构目前有大约200个唯一的字段名。我不认为有一个大的“复合”表是一个好主意。我们是否应该将二进制数据文件拆分为多个csv文件,每个csv文件对应一个逻辑数据组(即一种传感器类型的所有数据,例如雨强传感器)?我可以想到一个可能的缺点:这可能会使查询时间范围内的“所有”(如所有传感器类型表中的)数据变得更加复杂。
关于我们的集群设置的更多信息:我们运行一个hortonworks hdp集群,hdfs 2.7.3,hive 1.2.1000,spark 2.0.0,zeppelin notebook 0.6.0。我们计划保持堆栈的更新。
如果有人认为有一种比csv和json更好的数据格式,也请提一下你的想法。充其量,数据格式应该具有一定的存储效率、成熟度,并且具有多种编程语言(至少是c++、java、python)的api。我们对输入持开放态度,因为我们仍然可以决定使用哪种数据格式。谢谢!
暂无答案!
目前还没有任何答案,快来回答吧!