写在前面:在带大家了解kylin前有几个概念需要了解一下。
HDFS
Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统
HIVE
hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析
Spark
Spark是专为大规模数据处理而设计的快速通用的计算引擎。Spark是开源的类Hadoop MapReduce的通用并行框架,Spark,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法,说白了应用内存了,用的时候也需要注意数据量,要不容易内存溢出
Hbase
HBase是一个构建在HDFS上的分布式列存储系统;
HBase是Apache Hadoop生态系统中的重要一员,主要用于海量结构化数据存储;
从逻辑上讲,HBase将数据按照表、行和列进行存储。
与hadoop一样,Hbase目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加计算和存储能力。
开始前先介绍一下我们项目中遇见的问题
开篇点题,在说技术时不能单纯的说,技术谁强谁弱一定要结合场景,能说传统的数据库就就弱于Hdfs或者nosql?例如 1.信息管理系统秒进秒查的,传统的关系型数据库显然更合适,hive MR中map的过程准备时间就至少一分钟等等一系列应用场景,还是得结合实际应用场景选择合适的
1.传播力指数现在面对的问题
举个例子其中一个场景文章数量在一亿左右,基于这些数据的的各种聚合分析group by等,变的非常慢,尤其是需要全表统计时例如:按省统计文章数量,按省市区统计文章数量,按月统计文章数量,按年月日统计文章数量,按网站类型,省份,年月日统计等等一系列的聚合。
2.金融小场景面对的问题
产业地图-企业数量省市分布、产业地图-企业数量城市分布 、企业注册资金分布
等等的这种分析时间很长几分钟甚至几十钟才能出现查询结果,基于这种现状我们尝试过MYsql,分库,分表,读写分离并行计算等,一但涉及到统计分析基于所有数据的时候,就变的很慢,无法满足很快查询出结果的需求。
我们也考虑过hive spark sparksql等,虽然使用Hive和Spark Sql可以满足探索性数据分析的需求,但Hive速度较慢,Spark Sql对内存资源要求很高,不适合多并发。就不是很合适了,SparkSQL本质上是基于DAG模型的MPP。MPP的基本思路是增加机器来并行计算,从而提高查询速度。比如扫描8亿记录一台机器要处理1小时,但如果用100台机器来并行处理,理论上就只要一分钟不到。再配合列式存储和一些索引,查询可以更快返回。要注意这里在线运算量并没有减小,8亿条记录还是要扫描一次,只是参与的机器多了,所以快了,当达到一定数据体积的时候内存也满足不了容易OOM,还得用到磁盘,也无法满足查询实时性的问题,如果应用的场景是数据来源固定,但是查询不固定且要求速度时。
当然spark hive这块只是说基于这种实时的聚合统计分析不合适,在其他地方应用的依然很多,例如传播力指数是由12个指标计算出来的,其中12个指标部分指标是又计算出来,这个时候spark或者hadoop的MR的优势就体现出来了,充分利用分布式计算汇总计算结果。
选择适合业务的方案