1 引入Spark引擎

Kylin v2开始引入了Spark引擎,可以在构建Cube步骤中替换MapReduce。 关于配置spark引擎的文档,下面给出官方链接以便查阅:
http://kylin.apache.org/docs20/tutorial/cube_spark.html

以下是配置步骤:
1.在kylin的安装目录下,新建目录hadoop_conf

mkdir  $KYLIN_HOME/hadoop_conf

2.将core-site.xml,hdfs-site.xml,hbase-site.xml,hive-site.xml,yarn-site.xml 5个配置文件放入刚才建立的目录。

(如果使用的是Apache的Hadoop,hbase,hive等,去配置文件目录复制或者建立软连接,我使用的是CDH管理集群,那么配置文件就在/etc/hadoop/conf,/etc/hive/conf,/etc/hbase/conf路径下,直接复制过去)

cp /etc/hadoop/conf/hdfs-site.xml    $KYLIN_HOME/hadoop_conf
cp /etc/hadoop/conf/yarn-site.xml    $KYLIN_HOME/hadoop_conf
cp /etc/hadoop/conf/core-site.xml    $KYLIN_HOME/hadoop_conf
cp /etc/hbase/conf/hbase-site.xml    $KYLIN_HOME/hadoop_conf
cp /etc/hive/conf/hive-site.xml      $KYLIN_HOME/hadoop_conf

3.修改kylin.properties,添加以下配置(这里写hadoop-conf的全路径,路径根据自己hadoo_conf目录所在位置决定)

kylin.env.hadoop-conf-dir= $KYLIN_HOME/hadoop_conf

4 . 检查 Spark 配置

Kylin 在KYLIN_HOME/spark 中嵌入一个 Spark binary (v2.1.2),所有使用 “kylin.engine.spark-conf.” 作为前缀的 Spark 配置属性都能在 $KYLIN_HOME/conf/kylin.properties 中进行管理。这些属性当运行提交 Spark job 时会被提取并应用;例如,如果您配置 “kylin.engine.spark-conf.spark.executor.memory=4G”,Kylin 将会在执行 “spark-submit” 操作时使用 “–conf spark.executor.memory=4G” 作为参数。
运行 Spark cubing 前,建议查看一下这些配置并根据您集群的情况进行自定义。
下面是建议配置,开启了 Spark 动态资源分配:

kylin.engine.spark-conf.spark.master=yarn
kylin.engine.spark-conf.spark.submit.deployMode=cluster
kylin.engine.spark-conf.spark.dynamicAllocation.enabled=true
kylin.engine.spark-conf.spark.dynamicAllocation.minExecutors=1
kylin.engine.spark-conf.spark.dynamicAllocation.maxExecutors=1000
kylin.engine.spark-conf.spark.dynamicAllocation.executorIdleTimeout=300
kylin.engine.spark-conf.spark.yarn.queue=default
kylin.engine.spark-conf.spark.driver.memory=2G
kylin.engine.spark-conf.spark.executor.memory=4G
kylin.engine.spark-conf.spark.yarn.executor.memoryOverhead=1024
kylin.engine.spark-conf.spark.executor.cores=1
kylin.engine.spark-conf.spark.network.timeout=600
kylin.engine.spark-conf.spark.shuffle.service.enabled=true
kylin.engine.spark-conf.spark.executor.instances=1
kylin.engine.spark-conf.spark.eventLog.enabled=true
kylin.engine.spark-conf.spark.hadoop.dfs.replication=2
kylin.engine.spark-conf.spark.hadoop.mapreduce.output.fileoutputformat.compress=true
kylin.engine.spark-conf.spark.hadoop.mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.DefaultCodec
kylin.engine.spark-conf.spark.io.compression.codec=org.apache.spark.io.SnappyCompressionCodec
kylin.engine.spark-conf.spark.eventLog.dir=hdfs\:///kylin/spark-history
kylin.engine.spark-conf.spark.history.fs.logDirectory=hdfs\:///kylin/spark-history

5.重启kylin

bin/kylin.sh stop
bin/kylin.sh start

注意:
1.如果直接使用bin/kylin.sh restart重启,有可能配置会不生效,我就遇到了,用上面的方式重启就没问题。

2.在kylin的web页面上,有system选项卡,里面有reload config,本来我以为修改配置文件后可以点击此按钮,不用重启,但是实验证明这样配置也无法生效。所以保险的方法就是按照上面的方式重启。

2 创建和修改样例 cube

Kylin 启动后,访问 Kylin 网站,在 “Advanced Setting” 页,编辑名为 “kylin_sales” 的 cube,将 “Cube Engine” 由 “MapReduce” 换成 “Spark”:



点击 “Next” 进入 “Configuration Overwrites” 页面,点击 “+Property” 添加属性 “kylin.engine.spark.rdd-partition-cut-mb” 其值为 “500” (理由如下):


样例 cube 有两个耗尽内存的度量: “COUNT DISTINCT” 和 “TOPN(100)”;当源数据较小时,他们的大小估计的不太准确: 预估的大小会比真实的大很多,导致了更多的 RDD partitions 被切分,使得 build 的速度降低。500 对于其是一个较为合理的数字。点击 “Next” 和 “Save” 保存 cube。

3 用 Spark 构建 Cube

点击 “Build”,选择当前日期为 end date。Kylin 会在 “Monitor” 页生成一个构建 job,第 7 步是 Spark cubing。Job engine 开始按照顺序执行每一步。


第 7 步是 Spark cubing,当 Kylin 执行这一步时,您可以监视 Yarn 资源管理器里的状态. 点击 “Application Master” 链接将会打开 Spark 的 UI 网页,它会显示每一个 stage 的进度以及详细的信息。


查看Spark 的 UI


所有步骤成功执行后,Cube 的状态变为 “Ready” 且您可以像往常那样进行查询。

4 MapReduce和Spark引擎构建Cube时间对比

默认MapReduce引擎构建Cube,耗时15.97分钟;


引入Spark引擎构建Cube,耗时6.78分钟


5 进一步

如果您是 Kylin 的管理员但是对于 Spark 是新手,建议您浏览 Spark 文档,别忘记相应地去更新配置。您可以开启 Spark 的 Dynamic Resource Allocation ,以便其对于不同的工作负载能自动伸缩。Spark 性能依赖于集群的内存和 CPU 资源,当有复杂数据模型和巨大的数据集一次构建时 Kylin 的 Cube 构建将会是一项繁重的任务。如果您的集群资源不能够执行,Spark executors 就会抛出如 “OutOfMemorry” 这样的错误,因此请合理的使用。对于有 UHC dimension,过多组合 (例如,一个 cube 超过 12 dimensions),或耗尽内存的度量 (Count Distinct,Top-N) 的 Cube,建议您使用 MapReduce engine。如果您的 Cube 模型较为简单,所有度量都是 SUM/MIN/MAX/COUNT,源数据规模小至中等,Spark engine 将会是个好的选择。

Kylin引入Spark引擎的更多相关文章

  1. Kylin Flink Cube 引擎的前世今生

    Apache Kylin™ 是一个开源的.分布式的分析型数据仓库,提供 Hadoop/Spark 之上的 SQL 查询接口及多维分析(OLAP)能力以支持超大规模数据,它能在亚秒内查询巨大的表. Ky ...

  2. Kylin配置Spark并构建Cube

    HDP版本:2.6.4.0 Kylin版本:2.5.1 机器:三台 CentOS-7,8G 内存 Kylin 的计算引擎除了 MapReduce ,还有速度更快的 Spark ,本文就以 Kylin ...

  3. JavaScript模板引擎artTemplate.js——如何引入模板引擎?

    artTeamplate.js在github上的地址:artTemplate性能卓越的js模板引擎 引入模板引擎,就是引入外部javascript啦,并且artTemplate.js不依赖其他第三方库 ...

  4. hive使用spark引擎的几种情况

    使用spark引擎查询hive有以下几种方式:1>使用spark-sql(spark sql cli)2>使用spark-thrift提交查询sql3>使用hive on spark ...

  5. NodeJS4-4静态资源服务器实战_优化引入模板引擎

    引入模板引擎(handlebars) cnpm i handlebars 结构大概是这样子的,新建模板dir.tpl文件和route.js dir.tpl <!DOCTYPE html> ...

  6. 存算分离下写性能提升10倍以上,EMR Spark引擎是如何做到的?

    ​引言 随着大数据技术架构的演进,存储与计算分离的架构能更好的满足用户对降低数据存储成本,按需调度计算资源的诉求,正在成为越来越多人的选择.相较 HDFS,数据存储在对象存储上可以节约存储成本,但与此 ...

  7. iOS引入JavaScriptCore引擎框架(二)

    为何放弃第一种方案 UIWebView的JSContext获取     上篇中,我们通过简单的kvc获取UIWebVIew的JSContext,但是实际上,apple并未给开发者提供访问UIWebVi ...

  8. iOS引入JavaScriptCore引擎框架(一)

    JavaScriptCore引擎     我们都知道WebKit是个渲染引擎,简单来说负责页面的布局,绘制以及层的合成,但是WebKit工程中不仅仅有关于渲染相关的逻辑,也集成了默认的javascri ...

  9. Kylin 与 Spark SQL相比,有哪些差异和优势?

    SparkSQL本质上是基于DAG模型的MPP.而Kylin核心是Cube(多维立方体).关于MPP和Cube预处理的差异,重复如下: > MPP [1] 的基本思路是增加机器来并行计算,从而提 ...

随机推荐

  1. 简单测试 Kotlin native 性能

    准备 一直使用kotlin JVM平台开发服务器的应用,最近想试试看 Kotlin native的性能. 我使用的是 kotlin native 1.3.21,要使用他非常的简单,下载最新的 IDEA ...

  2. Azkaban工作流调度器

    Azkaban工作流调度器 在Hadoop领域常用的工作流调度系统 Oozie,Azkaban,Cascading,Hamake等等. 性能对比: 安装: 创建ssl配置 keytool -keyst ...

  3. dubbo基础学习总结

    Dubbo基本原理机制 分布式服务框架: –高性能和透明化的RPC远程服务调用方案 –SOA服务治理方案 -Apache MINA 框架基于Reactor模型通信框架,基于tcp长连接 Dubbo缺省 ...

  4. Linux中安装tomcat后,window中访问不到tomcat的欢迎界面问题

    首先,可以通过xftp把下载的tomcat的tar.gz包传输到Linux中. 然后进行解压,tar -zxvf   tomcat的压缩包名称(可以使用tab键快速补齐) 解压后,可以使用修改/con ...

  5. js实现按钮开关.单机下拉菜单

    通过onclick单击事件,实现效果,代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf- ...

  6. 基于DES加密的服务端分析

    此程序建立了一个TCP服务端,端口号为10010,之后accept等待连接,如果接受到连接,那么就发送一些欢迎信息,以及提示信息---发送quit退出. 之后不停地调用recv,如果接受到数据,那么判 ...

  7. Django数据同步过程中遇到的问题:

    1.raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__ve ...

  8. kd-tree题目总结

    在竞赛中,kd-tree一般只用于平面,很少有高于二维的情况. 在随机情况下,kd-tree的复杂度为O(NlogN),但会被极端数据卡到平方级别. 总而言之,就是优美的暴力. 查询时,通过估价函数进 ...

  9. hosts文件被修改后的惨案

    在公司MAC电脑上/etc/hosts中尝试反向解析一个ip到localhost, 即:xxx.xxx.xxx.xxx localhost 然后发现tomcat起不来;

  10. python format(格式化)

    自 python 2.6 开始,新增了一种格式化字符串的函数str.format(),可谓威力十足.那么,他跟之前的%型格式化字符串相比,有什么优越的存在呢?让我们来揭开它羞答答的面纱.#语法它通过{ ...