Apache Kylin看起来像一个很棒的工具,可以满足很多数据科学家的需求。它也是一个非常复杂的系统。我们正在开发一个内部解决方案,其目标完全相同,多维OLAP多维数据集具有低查询延迟。 在众多问题中,我现在最关心的问题是容错。 对于大量传入的事务数据,必须逐步更新多维数据集,并且一些长方体会在很长一段时间内更新,例如具有年份规模的时间维度值的那些。在这么长的时期内,复杂系统的某些部分会被保证失败,系统如何确保所有原始事务记录只被一次性聚合到长方体中,而不是更少?即使每个部件都有自己的容错机制,但这并不意味着它们会自动一起运行。 为简单起见,我们可以假设所有输入数据都由另一个进程保存在HDFS中,并且可以以任何方式“回放”,以便从任何中断,自愿或强制中恢复。什么是麒麟的容错考虑因素,还是不是真正的问题?
答案 0 :(得分:2)
存在数据故障和系统故障。
数据容错:Kylin将多维数据集分区为多个段,并允许重建单个段而不会影响整个多维数据集。例如,假设每天建立一个新的每日细分,并在周末合并为每周细分;每周细分合并为月度细分,依此类推。如果一周内出现数据错误(或任何更改),则只需要重建一天的细分。进一步的数据更改将需要重建每周或每月的细分。
细分策略是完全可自定义的,因此您可以平衡数据容错和查询性能。更多的段意味着对数据更改更容忍,但对每个查询执行的扫描也更多。 Kylin提供RESTful API,外部调度系统可以调用API来触发段构建和合并。
多维数据集仍处于联机状态,可以在某些细分受到重建时提供查询。
系统容错:Kylin依赖Hadoop和HBase来实现大多数系统冗余和容错。除此之外,Kylin的每个构建步骤都是幂等的。这意味着您可以安全地重试失败的步骤而没有任何副作用。这确保了最终的正确性,无论有多少失败并重建构建过程。
(我也是Apache Kylin的共同创作者和提交者。: - )
答案 1 :(得分:1)
注意:我是Apache Kylin的共同创建者和提交者。
容错点非常好,我们实际上会从某些情况下询问它们,因为它们具有极大的数据集。从start开始再次计算将需要巨大的计算资源,网络流量和时间。
但从产品角度来看,问题是:精确结果与资源之间哪一个更重要?对于交易数据,我认为确切数字更重要,但对于行为数据,它应该没问题,例如,不同的计数值现在是Kylin的近似结果。这取决于您将利用Kylin满足业务需求的情况。
如果我们稍后有更明确的线索,将把这个想法放到我们的积压中并更新到Kylin dev邮件列表。
感谢。