一、基本架构及原理

实现:利用hadoop中MapReduce框架对hive表中的数据进行预计算,将预计算结果缓存至Hbase中,解决TB级数据分析需求

原理架构参考:https://www.cnblogs.com/tgzhu/p/6113334.html

解决问题:解决海量数据上进行快速查询的难题

解决方案:对于超大数据集的复杂查询,由于现场计算需要花费较长时间,根据空间换时间的原理,提前将所有可能的计算结果计算并存储下来,从而实现超大数据集的秒级多维分析查询。

基本架构:

1、支持的数据源:来自kafka的流数据和hive离线数据

2、计算框架:Spark/MapReduce (Spark引擎Kylin2.0引进的)目前主要用MapReduce,因为两者性能差不多

3、结果储存:预计算结果主要存储在Hbase中(json字符串的形式)

4、对外提供:kylin对外提供标准SQL接口(jdbc/odbc,Rest API),所以Kylin提供与BI工具的整合能力,如Tableau,PowerBI/Excel,MSTR,QlikSense,Hue和SuperSet

参考:https://www.jianshu.com/p/9d4e7c8a53a9

https://blog.csdn.net/lvguichen88/article/details/53054745

https://www.cnblogs.com/sh425/p/5845241.html

https://blog.csdn.net/yu616568/article/details/48103415

Kylin系统架构:

包括: 数据源(source),执行引擎(engine),存储(storage)

执行引擎包括:查询引擎和cube构建

基本实现:

Model:根据业务查询,抽取hive中所需要的列字段,根据Model筛选出来需要参加业务处理的数据,而不参加的会被去除

Cube创建:就是一个Hive表的数据按照指定维度与指标计算出的所有组合结果。

Cuboid:每一种维度组合称为cuboid,一个cuboid包含一种具体维度组合下所有指标的值。

如图,整个立方体称为1个cube,立方体中每个网格点称为1个cuboid,图中每个点代表一个cuboid,(A,B,C,D)称为Base cuboid。cube的计算过程是逐层计算的,首先计算Base cuboid,然后计算维度数依次减少,逐层向下计算每层的cuboid。

二、Kylin集群部署

环境准备:

Hadoop: 2.7+, 3.1+ (since v2.5)

Hive: 0.13 - 1.2.1+

HBase: 1.1+, 2.0 (since v2.5)

Spark (可选) 2.3.0+

Kafka (可选) 1.0.0+ (since v2.5)

ZooKeeper 3.3.6 (可选)

JDK: 1.8+ (since v2.5)

1、解压安装

下载地址:https://archive.apache.org/dist/kylin/

2、修改环境变量 vim ~/.bashrc

添加:

export JAVA_HOME=/opt/module/jdk1.8
export HADOOP_HOME=/opt/module/hadoop-2.7/hadoop
export HADOOP_CONF_DIR=/opt/module/hadoop-2.7/hadoop/etc/hadoop
export YARN_CONF_DIR=/opt/module/hadoop-2.7/hadoop/etc/hadoop
export HBASE_HOME=/opt/module/hbase
export HBASE_CONF_DIR=/opt/module/hbase/conf
export HIVE_HOME=/opt/module/hive
export HIVE_CONF_DIR=/opt/module/hive/conf
export KYLIN_HOME=/opt/module/kylin
export HCAT_HOME=/opt/module/hive/hcatalog
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HADOOP_CONF_DIR:$HBASE_HOME/bin:$HBASE_CONF_DIR:$HIVE_HOME/bin:$HIVE_HOME_DIR:$KYLIN_HOME:bin:$HCAT_HOME

3、修改配置kylin.properties

kylin.metadata.url=kylin_metadata@hbase   配置所有的 Kylin 节点使用同一个 HBase metastore 储存kylin元数据

kylin.server.mode=all   主从节点唯一不同的地方,kylin主节点模式,其它节点为query(job 模式代表该服务仅用于任务调度,不用于查询;query 模式代表该服务仅用于查询,不用于构建任务的调度;all 模式代表该服务同时用于任务调度和 SQL 查询)

kylin.server.cluster-servers=host01:7070,host02:7070,host03:7070  包括所有节点(包括当前节点)

kylin.web.timezone=GMT+8  设置为中国时间

4、配置完将kylin安装包传送至其他节点

scp -r /opt/module/kylin node01ip:/opt/module/

scp -r /opt/module/kylin node02ip:/opt/module/

5、启动集群

启动集群前先启动hadoop 、hbase 、hive 、zookeeper等服务

启动kylin,所有节点运行/bin/kylin.sh start

以上cube构建引擎为MR

更改cube构建引擎为spark:

kylin发行版本目前还使用的是基于hadoop2.x的Spark,若版本太高会产生jar包冲突

1、在kylin目录下新建hadoop_conf文件夹

2、(集群的配置文件关联到kylin的目录)配置文件,建立软连接

ln -s /etc/hadoop/conf/hdfs-site.xml $KYLIN_HOME/hadoop-conf/hdfs-site.xml
ln -s /etc/hadoop/conf/yarn-site.xml $KYLIN_HOME/hadoop-conf/yarn-site.xml
ln -s /etc/hadoop/conf/core-site.xml $KYLIN_HOME/hadoop-conf/core-site.xml
ln -s /etc/hbase/conf/hbase-site.xml $KYLIN_HOME/hadoop-conf/hbase-site.xml
ln -s /etc/hive/conf/hive-site.xml $KYLIN_HOME/hadoop-conf/hive-site.xml

3、修改kylin配置文件 kylin.properties:

kylin.env.hadoop-conf-dir=/usr/local/apache-kylin-2.1.0-bin-hbase1x/hadoop-conf

4、将spark依赖的jar添加到hdfs(不用每次执行都上传)

将$SPARK_HOME/jars/* 下spark运行依赖的jar上传到hdfs上

jar cv0f spark-libs.jar -C $KYLIN_HOME/spark/jars/ .
hadoop fs -mkdir -p /tmp/kylin/spark/
hadoop fs -put spark-libs.jar /tmp/kylin/spark/

5、修改配置文件 kylin.properties:

kylin.engine.spark-conf.spark.yarn.archive=hdfs://host:8020/tmp/kylin/spark/spark-libs.jar
kylin.engine.spark-conf.spark.driver.extraJavaOptions=-Dhdp.version=current
kylin.engine.spark-conf.spark.yarn.am.extraJavaOptions=-Dhdp.version=current
kylin.engine.spark-conf.spark.executor.extraJavaOptions=-Dhdp.version=current

其他kylin.properties配置文件中的spark引擎部分的配置自行配置

参照:http://kylin.apache.org/cn/docs/tutorial/cube_spark.html

https://www.cnblogs.com/double-kill/articles/8547400.html

6、将新增加的文件分发至各节点

7、web界面修改构建引擎(创建cube时修改)如下:

将MapReduce修改为spark

三、Cube构建

1、创建model 

创建 cube 前,需定义一个数据模型。数据模型定义了一个星型(star schema)或雪花(snowflake schema)模型。一般抽取cube中所有可能用到的字段, 一个模型可以被多个 cube 使用

注:Skip snapshot for this lookup table 选项指的是是否跳过生成 snapshotTable,由于某些 Lookup 表特别大(大于 300M),如果某一个维度的基数比较大 ,可能会导致内存出现 OOM,所以在创建 snapshotTable 的时候会限制原始表的大小不能超过配置的一个上限值(kylin.snapshot.max-mb,默认值300)

2、新建cube

2.1 Derived columns和Normal columns的区别:

For example:创建model时,关联了事实表和维度表,采用act_user_id=user_id做关联,在创建cube时选择维度时如果选择了fact表中的act_user_id,那么对应lookup表中的user_id可以不用选,而通过act_user_id与user_id之间的特殊映射就可以得到lookup表中的其他维度,因此,可以将lookup表中的其他维度设置为derviced

反之:如果不选择关联键作为维度,则lookup表中维度应该设置为normal

参考:https://blog.csdn.net/jiangshouzhuang/article/details/51286150

http://kylin.apache.org/docs/howto/howto_optimize_cubes.html

2.2 增量构建需设置

Auto Merge Thresholds: 自动合并小的 segments 到中等甚至更大的 segment。如果不想自动合并,删除默认2个选项。参考(https://m.aliyun.com/yunqi/articles/82784)

Volatile Range: 默认为0,会自动合并所有可能的 cube segments,或者用 ‘Auto Merge’ 将不会合并最新的 [Volatile Range] 天的 cube segments。

Retention Threshold: 只会保存 cube 过去几天的 segment,旧的 segment 将会自动从头部删除;0表示不启用这个功能。

Partition Start Date: cube 的开始日期(默认为1970-01-01)

2.3 cube构建优化设置(Advanced Setting)

Aggregation Groups    Max Dimension Combination  最大的维度组合数量

例如:维度A,B,C 那么Max Dimension Combination设置为2时,kylin只会构建AB,AC,BC,A,B,C这几种组合,ABC这种组合会被省略

Mandatory Dimensions: 必要维度,用于总是出现的维度(每个cuboid都必须包含的维度,这样一来,所有不包含此维度的cuboid都会被忽略)

Hierarchy Dimensions: 层级维度,例如 “国家” -> “省” -> “市” 是一个层级(省- 市-国这样的组合将被忽略)

Joint Dimensions:联合维度,有些维度往往一起出现,或者它们的基数非常接近(两个维度总是要一起出现)

2.4参数覆盖设置

Configuration Overwrites

Kylin 使用了很多配置参数以提高灵活性,用户可以根据具体的环境、场景等配置不同的参数进行调优;Kylin 全局的参数值可在 conf/kylin.properties 文件中进行配置;如果 Cube 需要覆盖全局设置的话,则需要在此页面中指定,这些配置项将覆盖项目级别和配置文件中的默认值。

一般需 添加属性 “kylin.engine.spark.rdd-partition-cut-mb” 其值为 "500"

2.5 cube构建操作说明

Drop:丢弃现有cube,条件:无Pending, Running, Error 状态的job.

Edit:编辑现有cube,条件:cube需处于disable状态。

Refresh:重建某已有时间段数据,针对于已build时间段的源数据发生了改变的情况。

Merge:手动触发merge操作。

Enable:使拥有至少一个有效segment的cube从disable变为enable状态。

Purge:清空所有该cube的数据。

Clone:克隆一个新的cube,可设置新的名字,其他相关配置与原cube相同。

Disable:使一个处于ready状态的cube变为Disable状态,查询不会从disable的cube中获取数据

3、cube构建过程

Cube运算的中间结果是以SequenceFile的格式存储在HDFS上

1、Create Intermediate Flat Hive Table(生成原始数据)

将数据从源Hive表提取出来(和所有join的表一起)并插入到一个中间平表,如果Cube是分区的,Kylin会加上一个时间条件以确保只有在时间范围内的数据才会被提取

2、Redistribute Flat Hive Table(重新分配中间表)

Hive在HDFS上的目录里生成了数据文件:有些是大文件,有些是小文件甚至空文件。这种不平衡的文件分布会导致之后的MR任务出现数据倾斜的问题。针对这个问题,Kylin增加了这一个步骤来“重新分发”数据

3、Extract Fact Table Distinct Columns(创建事实表distinct column文件)

4、Build Dimension Dictionary(创建维度词典)

5、Save Cuboid Statistics and create HTable(保存cuboid的统计数据和HTable)

6、Build Cube with Spark(构建cuboid)

7、Convert Cuboid Data to HFile(将cuboid数据转换为HFile)

8、Load HFile to HBase Table(将HFile导入HBase表)

9、Update Cube Info(更新cube信息)

10、Hive Cleanup(清理资源)

参考:http://kylin.apache.org/cn/docs/howto/howto_optimize_build.html

4、kafka流数据构建cube(1.5版本引入)

1、添加kafka环境变量

2、指定kafka消费主题,并输入流数据json数据样本

3、model以及cube的构建同hive数据源(区别在于必须对Streaming Cube进行分区)

参考:https://blog.csdn.net/a_drjiaoda/article/details/88290620

5、设置定时构建cube

5.1 通过curl方式定时调度

Kylin web 触发指令只能支持一次触发,在实际应用中,需要定时执行build任务,可以使用curl命令从后台触发cube的构建,可通过crontab 或者其他的调度工具实现

全量构建:

curl -X PUT --user ADMIN:KYLIN -H "Content-Type: application/json;charset=utf-8" -d '{ "buildType": "BUILD"}' http://host:30023/kylin/api/cubes/users_cube/build

增量构建:

curl -X PUT --user ADMIN:KYLIN -H "Content-Type: application/json;charset=utf-8" -d '{ "startTime": 1554892395, "endTime": 1554892480, "buildType": "BUILD"}' http://host:30023/kylin/api/cubes/users_cube/build

参考:RESTful API  http://kylin.apache.org/cn/docs/howto/howto_use_restapi.html#authentication

5.2 通过java代码发送HTTP请求方式进行调度

代码实例:

//增量构建cube

package com.dlht.kylinDemo;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;import org.apache.commons.codec.binary.Base64;
public class BuildTest {static String ACCOUNT = "ADMIN";static String PWD = "KYLIN";static String PATH = "http://host:7070/kylin/api/cubes/KPI_Base_DataCppaCrcCount_test_Cube/rebuild";public static void main(String[] args) {System.out.println(Put(PATH,"{\"startTime\": 1451750400000,\"endTime\": 1451836800000,\"buildType\": \"BUILD\"}"));}public static String Put(String addr, String params) {String result = "";try {URL url = new URL(addr);HttpURLConnection connection = (HttpURLConnection) url.openConnection();connection.setRequestMethod("PUT");connection.setDoOutput(true);String auth = ACCOUNT + ":" + PWD;String code = new String(new Base64().encode(auth.getBytes()));connection.setRequestProperty("Authorization", "Basic " + code);connection.setRequestProperty("Content-Type","application/json;charset=UTF-8");PrintWriter out = new PrintWriter(connection.getOutputStream());out.write(params);out.close();BufferedReader in;try {in = new BufferedReader(new InputStreamReader(connection.getInputStream()));} catch (FileNotFoundException exception) {java.io.InputStream err = ((HttpURLConnection) connection).getErrorStream();if (err == null)throw exception;in = new BufferedReader(new InputStreamReader(err));}StringBuffer response = new StringBuffer();String line;while ((line = in.readLine()) != null)response.append(line + "\n");in.close();result = response.toString();} catch (MalformedURLException e) {System.err.println(e.toString());} catch (IOException e) {System.err.println(e.toString());}return result;}
}

6、清理储存

Kylin 在构建 cube 期间会在 HDFS 上生成中间文件;除此之外,当清理/删除/合并 cube 时,一些 HBase 表可能被遗留在 HBase 却以后再也不会被查询;虽然 Kylin 已经开始做自动化的垃圾回收,但不一定能覆盖到所有的情况;可以通过定期做离线的存储清理

步骤:

1. 检查哪些资源可以清理,这一步不会删除任何东西:

export KYLIN_HOME=/path/to/kylin_home
${KYLIN_HOME}/bin/kylin.sh org.apache.kylin.tool.StorageCleanupJob --delete false

2. 你可以抽查一两个资源来检查它们是否已经没有被引用了;然后加上“–delete true”选项进行清理。

${KYLIN_HOME}/bin/kylin.sh org.apache.kylin.tool.StorageCleanupJob --delete true

完成后,Hive 里的中间表, HDFS 上的中间文件及 HBase 中的 HTables 都会被移除。

3. 如果您想要删除所有资源;可添加 “–force true” 选项:

${KYLIN_HOME}/bin/kylin.sh org.apache.kylin.tool.StorageCleanupJob --force true --delete true

完成后,Hive 中所有的中间表, HDFS 上所有的中间文件及 HBase 中的 HTables 都会被移除。

参照:http://kylin.apache.org/cn/docs/howto/howto_cleanup_storage.html

四、用户角色分配

1、kylin定义了四种权限访问角色,ADMIN,MANAGEMENT,OPERATION和QUERY

具体角色具有的权限以及权限分配参照:http://kylin.apache.org/docs/tutorial/project_level_acl.html

2、添加用户及修改密码

修改文件: /opt/module/kylin/tomcat/webapps/kylin/WEB-INF/classes/kylinSecurity.xml

第一步:

第二步:

用户密码生成:

kylin密码采用spring加密:

<dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-core</artifactId><version>4.0.0.RELEASE</version>
</dependency>
public class Authentication {public static void main( String[] args ) {PasswordEncoder encoder = new BCryptPasswordEncoder();String ecode = "KYLIN";try {String encodedPassword = encoder.encode(ecode);System.out.println("原始密码:");System.out.println(ecode);System.out.println("加密后:");System.out.println(encodedPassword);} catch (Exception e) {e.printStackTrace();} finally {}}

运行后生成加密后的密码,粘贴至配置文件处即可

参考:

https://blog.csdn.net/shtdayu/article/details/84579675

https://www.jianshu.com/p/39bc4cc45a87

https://www.cnblogs.com/en-heng/p/5170876.html

Kylin集群部署及基本架构简介相关推荐

  1. Kylin集群部署和cube使用

    Kylin集群部署和cube使用 安装集群环境 节点 Kylin节点模式 Ip 内存 磁盘 Node1 All 192.167.71.11 2G 80G Node2 query 192.168.71. ...

  2. 阿里P8架构师谈:Quartz调度框架详解、运用场景、与集群部署实践

    以下将分别从Quartz架构简介.集群部署实践.Quartz监控.集群原理分析详解Quartz任务调度框架. Quartz简介 Quartz是Java领域最著名的开源任务调度工具,是一个任务调度框架, ...

  3. Linux服务集群部署实战--MySQL、Redis、ES、RocketMQ、Zookeeper

    部署架构 部署计划 MySQL服务部署 架构 规划 部署pxc集群 部署MySQL主从架构 部署mycat集群 创建表以及测试 部署HAProxy redis集群部署 redis集群采用3主3从的架构 ...

  4. OpenStack Swift集群部署流程与简单使用

    之前介绍了<OpenStack Swift All In One安装部署流程与简单使用>,那么接下来就说一说Swift集群部署吧. 1. 简介 本文档详细描述了使用两台PC部署一个小型Sw ...

  5. Apache Durid (HDFS原理 特性 读写测试 集群部署 架构设计)

    Apache Durid (HDFS 集群部署) Apache Durid (HDFS 集群部署) 1. 分布式文件HDFS 1.1 HDFS简介 1.1.1 HDFS发展历史 1.1.2 HDFS设 ...

  6. 私有云办公平台大规模集群/企业级集群/小型工作室集群解决方案:NextCloud集群部署方案--NextCloud集群架构设计

    原作者:NextCloud文档库 转载来源:https://docs.nextcloud.com/server/11/admin_manual/installation/deployment_reco ...

  7. 从架构设计理念到集群部署,全面认识KubeEdge

    摘要:本篇文章将从KubeEdge架构设计理念.KubeEdge代码目录概览.KubeEdge集群部署三方面带大家认识KubeEdge. KubeEdge即Kube+Edge,顾名思义就是依托K8s的 ...

  8. 架构系列三:使用Keepalived+Nginx+tomcat实现集群部署

    架构系列三:使用Keepalived+Nginx+tomcat实现集群部署 介绍了通过Nginx配置Tomct集群,当其中一个Tomcat服务停止后,Nginx可自动识别并选择另一个服务器响应用户请求 ...

  9. 架构系列二:使用Nginx+tomcat实现集群部署

    架构系列二:使用Nginx+tomcat实现集群部署 一.环境介绍  VM1:Ubuntu-S100 IP:192.168.130.128 部署Tomcat应用及Nginx  VM2:Ubuntu-S ...

最新文章

  1. ehlib 用法记录
  2. 欢迎大家踊跃报名担当“讲师”
  3. vim树形目录NERDTree
  4. TQ2440+RealViewMDK调试LED跑马灯(成功!)
  5. 中怎样载入选区_ps中快捷大全
  6. priority_queueint,vectorint,greaterint优先队列,按照从小到大
  7. 业内首款云原生技术中台产品云原生 Stack 来了
  8. 经典网络分析 - Very Deep Convolutional Networks for Large-Scale Image Recognition(VGG)
  9. JSP中动态includ与静态includ的区别
  10. 今天加入了“宇宙通史:木星”
  11. 80个非常酷的WordPress 杂志主题模板
  12. Atitit、 知识管理法 目录 1. 信息管理的演进 1 2. 显性知识管理 1 3. 隐形知识 1 4. 知识产权保护 1 1.信息管理的演进 文献管理,计算机管理,信息资源管理,情报管理,直
  13. uniapp开发App调用微信授权登陆
  14. implement在JAVA中_java中的implement
  15. ROS学习:launch文件编写
  16. conda命令:管理包、管理环境
  17. 与Simon,Warren,Neo,Paul同学聊天体会
  18. JavaScript简单随机数去重
  19. php打印文字到图片,【PHP】打开一个图片然后加上水印(图片上生成文字)
  20. 单片机c语言北航,【下载资料】《51单片机学习笔记》北航版

热门文章

  1. Windows系统安装rust以及crates换源方式
  2. 那些年我面过的「六年经验」的初级工程师
  3. Java手机号码正则表达式验证
  4. 字节流和字符流简单操作
  5. 2021-03-15 springboot开发的开源项目
  6. 初学者如何学习开源项目
  7. Fabric 1.0源代码分析(8)configtx(配置交易) #genesis(系统通道创世区块)
  8. 2022年精密磨光棒行业市场下游应用规模前景预测及重点企业发展战略研究
  9. 点击按钮执行php函数,从表单按钮调用PHP函数
  10. 这八款Windows效率软件,办公舒适度提升