我正在解决一个问题,我们有很多来自不同来源的不同事件,这些事件有 60% 的字段是通用的。因此,话虽如此,我最初从为每个事件创建单独的表开始,现在看到可以有很多事件,并且这些事件中几乎 60% 的数据字段是相同的,我正在考虑创建一个包含所有列的事件表事件,我将在此表中添加一个类型列,这将使我的 spark 作业选择与它们相关的事件。该表是一个 Hive 外部表,spark 作业将通过处理一个 staging json 表将数据加载到其中。
我正在寻求专家的意见,看看这种单 table 设计是否可行?
我的集群有 6 个 DN,每个 32Gig RAM 和 5TB 磁盘空间。由于 spark 是我们的核心处理框架,我担心所有将要运行的作业的资源消耗?如果分区变得太大怎么办?我也在考虑性能和速度?
任何输入表示赞赏。
最佳答案
在决定如何存储数据之前,需要考虑一些事项。
我希望它有助于一些决定。
编辑:回答一些问题
当您修改 parquet 表的列结构时,Hive 似乎有一些限制。例如,要修改表定义中的列名,您必须使用标志 parquet.column.index.access 才能使这项工作正常进行,这意味着您需要的所有数据都包含相同的模式。 Hive 中添加全新定义的替换列在 Hive 版本 1.3 中不起作用,由于某种原因,我无法读取新列,不确定这是否在其他版本中得到修复。
此外,spark 中的模式演变已关闭,因为它更昂贵,本质上您必须读取所有文件并整合模式才能以这种方式工作,并且取决于您的文件数量,这可能会影响性能
http://spark.apache.org/docs/latest/sql-programming-guide.html#schema-merging
关于hadoop - 一个基于大型事件的表或多个表? Hive 表设计注意事项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42286307/