Apache Kylin这个项目介绍下,第一个国人主导的Apache顶级项目,2015至2016连续两年最佳开源大数据工具奖,首个基于Hadoop生态的OLAP项目,底层可拓展支持Hive、Kafka、MR、Spark和Flink等存储计算框架,将传统SQL查询性能提升一千倍以上,随着业务数据指数级增长查询速度几乎不变,这些都是真的。
那么原理是什么呢?文档中也介绍到就是空间换时间,原理上就是用户计划在Hive或者HDFS parquet中执行的SQL查询,提前把结果预计算并存到HBase,如果有数据更新就把新的结果也存到HBase上,用户的SQL查询最后转成HBase的get或scan,性能自然提上去了。那么用户的SQL会有很多种,而且不会从一个纬度查,Kylin会把所有可能查询的结果都预计算存下来吗?额,是的都会存在来,例如数据可查询的字段就是20个,而且可能组合多个字段来查询,那么HBase中将要缓存的结果就有2的20次方组(1048576),每一组可能就几十几百万个。以Kylin官方的demo为例,输入表只有1.46MB的数据,预计算后数据增长64倍(图一),如果是原始数据就有10G,那么Kylin缓存的数据就要640G,而且HBase依赖底层HDFS一般是3备份,那么将近要2T的磁盘空间。
当然预计算带来的收益也是巨大的,预计算后这个数据集的几乎所有组合查询都可以达到秒级甚至毫秒级,因为已经转化成NoSQL的在线查询了,但为了10G的数据就要准备2T的数据缓存,而且数据是要更新的,后台还要有一个Spark或者MapReduce一直占用资源跑批任务。Kylin官方也提到很多优化方案,但都不能解决查询纬度爆炸的问题,只能让用户缩窄查询的范围,如果可以避免多种纬度的查询就可以减少这些纬度预计算的计算和存储开销。
随着Spark、Flink的流行,用户自己实现一个预计算框架的成本已经非常低了,Kylin从性能上并不能带来额外的价值,用户可以通过自定义HBase rowkey、自定义缓存数据甚至不要求数据以星模型关联,自定义需要预计算的组合查询在性能和存储成本上也可以很好地平衡,因此从我个人的角度对于大型系统来说Kylin本身带来的价值几乎没有。Kylin本身拓展性也很难满足更灵活的需求,例如Kylin有对Flink执行引擎的支持,但其实只是支持batch mode,对于流式数据但支持还是自己读kafka,然后自己用crontab定期跑,首先支持的流式source就少,而且Flink stream mode有更多高级的goupby window聚合功能在Kylin上也是用不了的,只对接Flink batch mode从功能上和对接Spark没什么差异,而且性能上可能还不如Spark。
由于Kylin的存储、计算都是基于其他大数据框架实现的,从功能和性能上没什么优势,亮点是简化了用户要自己实现预计算的开发过程,改为在Web页面上的配置,但如果从性能考虑还得自己思考那些组合查询可以去掉、HBase rowkey怎么设计,同时绑定了源是Kafka或者Hive而存储是HBase,如果维表数据量爆炸或者查询纬度组合爆炸的话一样无法用。
项目是好项目,但应用并没有其他顶级Apache项目那么广,希望大家看完也能更好了解项目的定位和优劣势。
那么原理是什么呢?文档中也介绍到就是空间换时间,原理上就是用户计划在Hive或者HDFS parquet中执行的SQL查询,提前把结果预计算并存到HBase,如果有数据更新就把新的结果也存到HBase上,用户的SQL查询最后转成HBase的get或scan,性能自然提上去了。那么用户的SQL会有很多种,而且不会从一个纬度查,Kylin会把所有可能查询的结果都预计算存下来吗?额,是的都会存在来,例如数据可查询的字段就是20个,而且可能组合多个字段来查询,那么HBase中将要缓存的结果就有2的20次方组(1048576),每一组可能就几十几百万个。以Kylin官方的demo为例,输入表只有1.46MB的数据,预计算后数据增长64倍(图一),如果是原始数据就有10G,那么Kylin缓存的数据就要640G,而且HBase依赖底层HDFS一般是3备份,那么将近要2T的磁盘空间。
当然预计算带来的收益也是巨大的,预计算后这个数据集的几乎所有组合查询都可以达到秒级甚至毫秒级,因为已经转化成NoSQL的在线查询了,但为了10G的数据就要准备2T的数据缓存,而且数据是要更新的,后台还要有一个Spark或者MapReduce一直占用资源跑批任务。Kylin官方也提到很多优化方案,但都不能解决查询纬度爆炸的问题,只能让用户缩窄查询的范围,如果可以避免多种纬度的查询就可以减少这些纬度预计算的计算和存储开销。
随着Spark、Flink的流行,用户自己实现一个预计算框架的成本已经非常低了,Kylin从性能上并不能带来额外的价值,用户可以通过自定义HBase rowkey、自定义缓存数据甚至不要求数据以星模型关联,自定义需要预计算的组合查询在性能和存储成本上也可以很好地平衡,因此从我个人的角度对于大型系统来说Kylin本身带来的价值几乎没有。Kylin本身拓展性也很难满足更灵活的需求,例如Kylin有对Flink执行引擎的支持,但其实只是支持batch mode,对于流式数据但支持还是自己读kafka,然后自己用crontab定期跑,首先支持的流式source就少,而且Flink stream mode有更多高级的goupby window聚合功能在Kylin上也是用不了的,只对接Flink batch mode从功能上和对接Spark没什么差异,而且性能上可能还不如Spark。
由于Kylin的存储、计算都是基于其他大数据框架实现的,从功能和性能上没什么优势,亮点是简化了用户要自己实现预计算的开发过程,改为在Web页面上的配置,但如果从性能考虑还得自己思考那些组合查询可以去掉、HBase rowkey怎么设计,同时绑定了源是Kafka或者Hive而存储是HBase,如果维表数据量爆炸或者查询纬度组合爆炸的话一样无法用。
项目是好项目,但应用并没有其他顶级Apache项目那么广,希望大家看完也能更好了解项目的定位和优劣势。
凡事预则立,不预则废。如果不管做什么事情都能够提前十分钟,去应对可能出现的小意外,那我们的生活便可以过得更加从容。提前做好准备的人,不仅是对他人的尊重,更是对自己的负责,也往往更能得到命运的青睐。不要小看那几分钟,它不仅代表了一个人的时间观念,更体现了一个人的人生态度。每天提前十分钟,很可能让我们的人生大不同。
#陈庆华大夫[超话]#
到了预产期就可以打催产素吗?
如果没有特殊情况,就算是已经过了预产期,催产素也不是随便可以打的。 一般比预产期提前或者延后两周都属于正常的范围,但是要做B超检查看看胎盘和羊水的情况,如果胎盘没有老化,羊水没有浑浊可以顺其自然的等待自然分娩。 你最好和主治医生沟通一下,看一看是否适合打催产素,如果适合的话可以在医生的指导下静脉滴注小剂量催产素试试催生。 如果条件不成熟,宫颈评分没有达到6分以上,即使用了催产素也不一定有效果的。 https://t.cn/R2WxOni
到了预产期就可以打催产素吗?
如果没有特殊情况,就算是已经过了预产期,催产素也不是随便可以打的。 一般比预产期提前或者延后两周都属于正常的范围,但是要做B超检查看看胎盘和羊水的情况,如果胎盘没有老化,羊水没有浑浊可以顺其自然的等待自然分娩。 你最好和主治医生沟通一下,看一看是否适合打催产素,如果适合的话可以在医生的指导下静脉滴注小剂量催产素试试催生。 如果条件不成熟,宫颈评分没有达到6分以上,即使用了催产素也不一定有效果的。 https://t.cn/R2WxOni
✋热门推荐