Kylin分布式分析型数仓 安装及应用

写在前面:在带大家了解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的优势就体现出来了,充分利用分布式计算汇总计算结果。

选择适合业务的方案

        最后我们根据我们的业务场景结合实际情况,得出了以下结论:

1.数据的统计分析,尽量缩小查询的体积,不再原始数据上进行最终的查询;

2.入库的数据需要ETL;

3.使用ES来做数据的查询,全文检索,模糊匹配,相似度匹配等(由于ES是基于lucence的文件检索系统,但不仅限于lucence的功能,所以这块选择ES,ES在小数据的情况下做一些实时的统计分析还行,数据量达到亿级别时也会变的缓慢,这快不做过多介绍);

4.数据批处理,复杂的逻辑计算生成的结果表在晚上闲时跑一遍这块的计算由hadoop的mar或者spark完成。

        在调研了市面上主流的开源OLAP引擎后,我们发现,目前还没有一个系统能够满足各种场景的查询需求。其本质原因是,没有一个系统能同时在数据量、性能、和灵活性三个方面做到完美,每个系统在设计时都需要在这三者间做出取舍。

 

例如:

MPP架构的系统(Presto/Impala/SparkSQL/Drill等)有很好的数据量和灵活性支持,但是对响应时间是没有保证的。当数据量和计算复杂度增加后,响应时间会变慢,从秒级到分钟级,甚至小时级都有可能。

        搜索引擎架构的系统(Elasticsearch等)相对比MPP系统,在入库时将数据转换为倒排索引,采用Scatter-Gather计算模型,牺牲了灵活性换取很好的性能,在搜索类查询上能做到亚秒级响应。但是对于扫描聚合为主的查询,随着处理数据量的增加,响应时间也会退化到分钟级。

        预计算系统(Druid/Kylin等)则在入库时对数据进行预聚合,进一步牺牲灵活性换取性能,以实现对超大数据集的秒级响应。(kylin是牺牲了一定的灵活性换取了性能)。

        数据统计分析那块我们最后进行了取舍选择了kylin,选择kylin的原因是希望用kylin通过预计算,达到最终对聚合结果的一个快速查询。

在用Kylin之前,实际上有一些方案,但效果并不理想。

比如用Hive直接去查或者spark中去计算,这种情况下,第一个是慢,第二会消耗计算集群的资源。一但并发多了,全提到集群上去,并发度限制导致跑的比平时更慢。

我们原来也做过预聚合的尝试其实就是自己手写维度组合查询(经常好多维度就漏了),这个思路跟Kylin很像,只不过是自己做这个事,用Hive先把所有的维度算出来,然后导入MySQL或者HBase。但是这个方案并没有像Kylin这么好的模型定义抽象,也没有从配置到执行,预计算,查询这样整体的框架。现在通过使用Kylin实现了低成本的解决这些问题。

一、Kylin安装环境要求

1.  Hadoop: 2.4+

2.  Hive: 0.13--1.2.1+

3.  HBase: 0.98--0.99, 1.1+

4.  JDK: 1.7+

本文档版本:

  1.  Hadoop: 2.6.0-cdh5.11.0
  2.  Hive: 1.1.0-cdh5.11.0
  3.  HBase: 1.2.0-cdh5.11.0

4.  JDK: jdk1.8.0_112

二、安装部署

# 安装准备

默认已安装好Hadoop等环境

# Kylin下载地址:Apache Kylin | Download

 

选择版本下载,本文档Kylin 版本:

apache-kylin-2.0.0-bin-cdh57.tar.gz

# 解压缩文件至指定目录

tar -zxvf apache-kylin-2.0.0-bin-cdh57.tar.gz -C

/opt/cloudera/parcels/CDH-5.11.0-1.cdh5.11.0.p0.3 4/lib

# 设置KYLIN_HOME

vim /etc/profile

设置KYLIN_HOME

# 检查用户是否拥有权限运行hadoop/hive/hbase

bin/check-env.sh

#  运行bin/check-env.sh可能的权限报错解决

 

 

 

本文档安装用户为root,root在hdfs上没有读写权限,

HDFS的超级用户为hdfs

su hdfs 切换为hdfs

进入hadoop安装目录

bin/hadoop fs -mkdir /kylin

bin/hadoop fs -chmod 777 /kylin

su root

# 分发安装包到其余几点

scp -r apache-kylin-2.0.0-bin root@linux-13-210:/

/opt/cloudera/parcels/CDH-5.11.0-1.cdh5.11.0.p0.3

4/lib

scp -r apache-kylin-2.0.0-bin root@linux-13-211:/

/opt/cloudera/parcels/CDH-5.11.0-1.cdh5.11.0.p0.3

4/lib

# 修改Kylin集群配置

vim kylin.properties

设置:

kylin.server.mode=all

(一个集群中只能有一个节点为all或者为job,集群其余节 点为query)

kylin.server.cluster-servers=linux-13-210:7070,linux -13-211:7070,linux-13-212:7070(

 Kylin用来同步各个节点的状态的,否则负载均衡下面跳 转到不同的页面看到的不 一致

增加配置项:

kylin.job.mr.lib.dir=/opt/cloudera/parcels/CDH/lib/s

entry/lib

 

# 启动集群

bin/kylin.sh start

# 启动集群可能的报错

vim /etc/profile

设置HCAT_HOME和PATH

 

# 集群启动okay

 

# web端登录访问

http://your_hostname:7070/kylin

User : ADMIN

PassWord : KYLIN

# 启动Kylin集群,web端登录页面不显示

  解决方法: 到$KYLIN_HOME/logs目录下,查看kylin.log

和kylin.out 输出

 

 

 

端口可能被占用 :

netstat -nlap |grep 7070

kill -9 进程号

 

# Kylin数据导入测试数据

bin/sample.sh

 

 

 

三、Kylin报错异常

# java.lang.ClassNotFoundException:org.apache.hadoop.hive.serde2.typeinfo.TypeInfo

#  如果设置之后依然报错:

  Build Cube时step 3报错

解决方式一: 设置kylin.job.mr.lib.dir指向hive lib目录:

kylin.job.mr.lib.dir=/opt/cloudera/parcels/CDH-5.11.0-1.cdh5.11.0.p0.34/lib/hive/lib

解决方式二:依然设置

kylin.job.mr.lib.dir=/opt/cloudera/parcels/CDH/lib/sentry/lib,从hive lib目录下拷贝 hive-jdbc-1.1.0-cdh5.11.0.jar、hive-jdbc-1.1.0-cdh5.11.0-standalone.jar

hive-jdbc.jar

hive-jdbc-standalone.jar

拷贝至/opt/cloudera/parcels/CDH/lib/sentry/lib目录下

解决方式三:设置

kylin.job.mr.lib.dir=/opt/cloudera/parcels/CDH-5.11.0-1.cdh5.11.0.p0.34/jars/

 

#  构建使用spark引擎Cube报错

 

解决方式:

 

进入Hive conf目录(本文档目录为:/opt/cloudera/parcels/CDH-5.11.0-1.cdh5.11.0.p0.34/lib/hive/conf),拷贝hive-site.xml之HADOOP_CONF_DIR目录(本文档目录为:

/opt/cloudera/parcels/CDH-5.11.0-1.cdh5.11.0.p0.34/lib/hadoop/etc/hadoop)

 至此,安装完成。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极个别的谭同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值