IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> kylin扩展数据源、计算引擎、存储框架源码 -> 正文阅读

[大数据]kylin扩展数据源、计算引擎、存储框架源码

前面章节介绍了kylin源码的调试过程,这里讲解下kylin的三大扩展框架,以及对应的编辑方式。

1、kylin整体的框架
kylin对外支持restapi和sql查询,内部则是从hadoop hive中获取元数据、随后在cube引擎中预计算、最后将结果输出到hbase中。kylin的restapi功能很丰富,创建模型、cube以及build和删除操作都有,纯粹的和kylin对接直接使用该api即可,因为版本问题,有的api可能官网上查不到,这个时候可以下载kylin相关的包,然后查看包内的接口信息。如3.1.1版本api上没有创建project接口,但是jar上可以直接查到对应的controller接口使用。如果需要变更kylin内部的一些逻辑,一般则需要下载源码进行修改。

不过kylin从1.5版本开始引入了“可扩展”的概念,很多地方直接扩展实现即可,一般不用再重写源码,如图所示:

?其中虚线框所处的位置就是可扩展插件的位置,可扩展指Kylin可以对其主要依赖的三个模块做任意的扩展和替换。Kylin的三大依赖模块分别是数据源、构建引擎和存储引擎。在设计之初,作为Hadoop家族的一员,这三者分别是Hive、MapReduce和HBase。但随着推广和使用的深入,渐渐有用户发现它们均存在不足之处。比如,实时分析可能会希望从Kafka导入数据而不是从Hive;而Spark的迅速崛起,又使我们不得不考虑将MapReduce替换为Spark,以期大幅提高Cube的构建速度;至于HBase,它的读性能可能还不如Cassandra或Kudu等。于是kylin团队对Kylin1.5版本的系统架构进行了重构,将数据源、构建引擎、存储引擎三大依赖抽象为接口,而Hive、MapReduce、HBase只是默认实现。深度用户可以根据自己的需要做二次开发,将其中的一个或多个替换为更适合的技术。

2、cube构建大致流程
为了更好的了解可扩展插件的作用,我们先来了解下cube构建的大致流程:
? ? ? ?创建临时的Hive平表(从Hive读取数据);
? ? ? ?计算各维度的不同值,并收集各Cuboid的统计数据;
? ? ? ?创建并保存字典;保存Cuboid统计信息;
? ? ? ?创建HTable;
? ? ? ?计算Cube(MapReduce计算分析);
? ? ? ?将Cube的计算结果转成HFile;
? ? ? ?加载HFile到HBase;(将结果存储在hbase中)
? ? ? ?更新Cube元数据;
? ? ? ?垃圾回收。

3、目标
因为专门写一个可扩展插件逻辑比较耗时,这里为了方便测试。接下来样例目标是自定义扩展插件在读hive数据、计算cube和存hbase前打印自定义日志。实际工作中,如果有这块的需要则可以根据情况在对应位置修改。

4、项目开发
首先创建简单的spring项目,然后添加maven依赖:

数据源的扩展主要是实现?ISource 接口,我这里直接继承已有的hive实现,然后打印自定义日志:

public class KylinSource extends HiveSource {
    private static Logger logger = LoggerFactory.getLogger(KylinSource.class);

    public KylinSource(KylinConfig config) {
        super(config);
    }

    @Override
    public <I> I adaptToBuildEngine(Class<I> engineInterface) {
        logger.info("wyt01kylinplus: this is KylinSource!");
        return super.adaptToBuildEngine(engineInterface);
    }
}

计算引擎的扩展主要是实现?IBatchCubingEngine 接口,我这里直接继承已有的mapreduce实现,然后打印自定义的日志。

public class KylinEngine extends MRBatchCubingEngine2 {
    private static Logger logger = LoggerFactory.getLogger(KylinEngine.class);
    @Override
    public DefaultChainedExecutable createBatchCubingJob(CubeSegment newSegment, String submitter, Integer priorityOffset) {
        logger.info("wyt01kylinplus: this is KylinEngine!");
        return super.createBatchCubingJob(newSegment, submitter, priorityOffset);
    }
}

存储源的扩展主要是实现?IStorage 接口,我这里直接继承已有的hbase实现,然后打印自定义日志。

public class KylinStorage extends HBaseStorage {
    private static Logger logger = LoggerFactory.getLogger(KylinStorage.class);

    @Override
    public <I> I adaptToBuildEngine(Class<I> engineInterface) {
        logger.info("wyt01kylinplus: this is KylinStorage!");
        return super.adaptToBuildEngine(engineInterface);
    }
}

5、文件配置

开发结束,首先是要在conf/kylin.properties配置文件中进行声明配置,然后再把包放到指定的位置。

kylin.storage.provider.0=com.wyt.storage.KylinStorage
kylin.source.provider.0=com.wyt.source.KylinSource
kylin.engine.provider.2=com.wyt.engine.KylinEngine

这里的配置并不是一定的,即kylin.storage.provider.0的写法不一定,上面的写法仅针对3.1.0版本,如果版本不同,可以下载个源码,然后去KylinConfigBase类中参考getJobEngines、getSourceEngines、getStorageEngines三个方法中的读取规则。

6、踩坑

坑一:NoSuchMethodException: com.wyt.source.KylinSource.<init>
原因:包放的位置不对
解决:?把包放置在 {kylin-home}/tomcat/webapps/kylin/WEB-INF/lib/目录下,然后重启kylin生效

坑二:java.lang.IllegalArgumentException: Implementations missing, ID 2, interface org.apache.kylin.engine.IBatchCubingEngine
原因:mapreduce加载不到实现的kylin扩展代码包
解决:把包放一份在mapreduce的目录下/opt/module/hadoop-2.10.1/share/hadoop/mapreduce?

上面两个坑的具体原因和分析流程参考这篇文章:https://blog.csdn.net/Interest1_wyt/article/details/119983319?

坑三:日志打印不出来(待解决,近期更新)
原因:
解决:


?

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-08-30 12:07:06  更:2021-08-30 12:07:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 16:44:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码