每一个成功人士的背后,必定曾经做出过勇敢而又孤独的决定。

放弃不难,但坚持很酷~

HDP 版本:2.6.4.0

Kylin 版本:2.5.1

机器说明:三台 CentOS-7,8G 内存

Kylin 的计算引擎除了 MapReduce ,还有速度更快的 Spark ,本文就以 Kylin 自带的示例 kylin_sales_cube 来测试一下 Spark 构建 Cube 的速度。

一、配置Kylin的相关Spark参数

在运行 Spark cubing 前,建议查看一下这些配置并根据集群的情况进行自定义。下面是建议配置,开启了 Spark 动态资源分配:

## Spark conf (default is in spark/conf/spark-defaults.conf)kylin.engine.spark-conf.spark.master=yarnkylin.engine.spark-conf.spark.submit.deployMode=clusterkylin.engine.spark-conf.spark.yarn.queue=defaultkylin.engine.spark-conf.spark.driver.memory=2Gkylin.engine.spark-conf.spark.executor.memory=4Gkylin.engine.spark-conf.spark.executor.instances=40kylin.engine.spark-conf.spark.yarn.executor.memoryOverhead=1024kylin.engine.spark-conf.spark.shuffle.service.enabled=truekylin.engine.spark-conf.spark.eventLog.enabled=truekylin.engine.spark-conf.spark.eventLog.dir=hdfs:///kylin/spark-historykylin.engine.spark-conf.spark.history.fs.logDirectory=hdfs:///kylin/spark-history#kylin.engine.spark-conf.spark.hadoop.yarn.timeline-service.enabled=false##### Spark conf for specific job#kylin.engine.spark-conf-mergedict.spark.executor.memory=6G#kylin.engine.spark-conf-mergedict.spark.memory.fraction=0.2### manually upload spark-assembly jar to HDFS and then set this property will avoid repeatedly uploading jar## at runtimekylin.engine.spark-conf.spark.yarn.archive=hdfs://node71.data:8020/kylin/spark/spark-libs.jarkylin.engine.spark-conf.spark.io.compression.codec=org.apache.spark.io.SnappyCompressionCodec### 如果是HDP版本,请取消下述三行配置的注释kylin.engine.spark-conf.spark.driver.extraJavaOptions=-Dhdp.version=currentkylin.engine.spark-conf.spark.yarn.am.extraJavaOptions=-Dhdp.version=currentkylin.engine.spark-conf.spark.executor.extraJavaOptions=-Dhdp.version=current

其中 kylin.engine.spark-conf.spark.yarn.archive 配置是指定了 Kylin 引擎要运行的 jar 包,该 jar 包需要自己生成且上传到 HDFS 。由于我执行 Kylin 服务的用户是 kylin,所以要先切换到 kylin 用户下去执行。命令如下:

su - kylincd /usr/hdp/2.6.4.0-91/kylin# 生成spark-libs.jar文件jar cv0f spark-libs.jar -C $KYLIN_HOME/spark/jars/ ./# 上传到HDFS上的指定目录hadoop fs -mkdir -p /kylin/spark/hadoop fs -put spark-libs.jar /kylin/spark/

二、修改Cube的配置

配置好 Kylin 的相关 Spark 参数后,接下来我们需要将 Cube 的计算引擎修改为 Spark ,修改步骤如下:

先指定 Kylin 自带的生成 Cube 脚本:sh ${KYLIN_HOME}/bin/sample.sh ,会在 Kylin Web 页面上加载出两个 Cube 。

接着访问我们的 Kylin Web UI ,然后点击 Model -> Action -> Edit 按钮:

点击第五步:Advanced Setting,往下划动页面,更改 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。

对于没有”COUNT DISTINCT” 和 “TOPN” 的 Cube,请保留默认配置。

三、构建Cube

保存好修改后的 Cube 配置后,点击 Action -> Build,选择构建的起始时间(一定要确保起始时间内有数据,否则构建 Cube 无意义),然后开始构建 Cube 。

在构建 Cube 的过程中,可以打开 Yarn ResourceManager UI 来查看任务状态。当 Cube 构建到 第七步 时,可以打开 Spark 的 UI 网页,它会显示每一个 stage 的进度以及详细的信息。

Kylin 是使用的自己内部的 Spark ,所以我们还需要额外地启动 Spark History Server 。

${KYLIN_HOME}/spark/sbin/start-history-server.sh hdfs://:8020/kylin/spark-history

访问:http://ip:18080/ ,可以看到 Spark 构建 Cube 的 job 详细信息,该信息对疑难解答和性能调整有极大的帮助。

四、FAQ

在使用 Spark 构建 Cube 的过程中,遇到了两个错误,都解决了,特此记录一下,让大家明白,公众号内都是满满的干货。

1、Yarn 配置调整

报错内容:

Exception in thread "main" java.lang.IllegalArgumentException: Required executor memory (4096+1024 MB) is above the max threshold (4096 MB) of this cluster! Please check the values of 'yarn.scheduler.maximum-allocation-mb' and/or 'yarn.nodemanager.resource.memory-mb'.

问题分析:

根据报错信息来看,需要的执行内存(4096 + 1024)MB 超过了 集群设置的 4096 MB,报错。

解决办法:

确保Yarn 服务的 yarn.scheduler.maximum-allocation-mb 参数值和 Kylin 服务的 kylin.engine.spark-conf.spark.yarn.executor.memoryOverhead 参数值小于Yarn 服务的 yarn.nodemanager.resource.memory-mb 。

2、构建 Cube 第八步:Convert Cuboid Data to HFile 报错

报错内容:

java.lang.NoClassDefFoundError: Could not initialize class org.apache.hadoop.hbase.io.hfile.HFile

问题分析:

kylin.engine.spark-conf.spark.yarn.archive 参数值指定的 spark-libs.jar 文件缺少 HBase 相关的类文件。

解决办法:

由于缺失 HBase 相关的类文件比较多,参照 Kylin 官网给出的解决方式依旧报找不到类文件,所以我将 HBase 相关的 jar 包都添加到了 spark-libs.jar 里面。如果你已经生成了 spark-libs.jar 并上传到了 HDFS,那么你需要重新打包上传。具体操作步骤如下:

su - kylincd /usr/hdp/2.6.4.0-91/kylincp -r /usr/hdp/2.6.4.0-91/hbase/lib/hbase* /usr/hdp/2.6.4.0-91/kylin/spark/jars/rm -rf spark-libs.jar;jar cv0f spark-libs.jar -C spark/jars/ ./hadoop fs -rm -r /kylin/spark/spark-libs.jarhadoop fs -put spark-libs.jar /kylin/spark/

然后切换到 Kylin Web 页面,继续构建 Cube 。

五、Spark与MapReduce的对比

使用 Spark 构建 Cube 共耗时约 7 分钟,如下图所示:

使用 MapReduce 构建 Cube 共耗时约 15 分钟,如下图所示:

还是使用 Spark 构建 cube 快,还快不少!

六、总结

本篇文章主要介绍了:

  • 如何配置 Kylin 的相关 Spark 参数

  • 如何更改 Cube 的计算引擎

  • 生成 spark-libs.jar 包并上传到 HDFS

  • Spark 构建 Cube 过程中的 FAQ

  • Spark 与 MapReduce 构建 Cube 的速度对比

本文参考链接:

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

  • https://community.cloudera.com/t5/Support-Questions/Apache-Kylin-with-Spark/m-p/241590

kylin版本_Kylin配置Spark并构建Cube相关推荐

  1. kylin如何支持flink_大数据集群运维(28) Kylin 配置使用 flink 构建 Cube

    用 Flink 构建 Cube Kylin v3.1 引入了 Flink cube engine,在 build cube 步骤中使用 Apache Flink 代替 MapReduce:您可以查看  ...

  2. kylin版本_kylin多维数据分析(一)单机部署

    点击上方蓝字关注 [写在前面]:前段时间因为项目需要,使用了一段时间的kylin进行多维数据分析.从kylin单机/分布式部署.事实表维度表设计.再到cube优化和调度等全都亲手实操了一遍.过程中的所 ...

  3. kylin版本_如何在 Kylin 中优雅地使用 Spark

    前言 Kylin 用户在使用 Spark的过程中,经常会遇到任务提交缓慢.构建节点不稳定的问题.为了更方便地向 Spark 提交.管理和监控任务,有些用户会使用 Livy 作为 Spark 的交互接口 ...

  4. CC00027.kylin——|HadoopOLAP_Kylin.V27|——|Kylin.v27|Kylin构建Cube|实时OLAP.V3|

    一.定义数据源 ### --- 定义数据源~~~ # 1.创建数据源 ~~~ # 2.填写kafka集群信息 ~~~ # 3.通过kylin加载的json字段:创建流表维表格式 ~~~ # 4.查看加 ...

  5. 大数据Kylin(六):Kylin构建Cube算法

    文章目录 Kylin构建Cube算法 一.​​​​​​​layered cubing

  6. CC00023.kylin——|HadoopOLAP_Kylin.V23|——|Kylin.v23|Kylin构建Cube|流式构建.V1|

    一.流式构建 ### --- 流式构建~~~ 实时数据更新是一种普遍的需求,快速分析变化趋势才能做出正确的决策. ~~~ Kylin V1.6 发布了可扩展的 streaming cubing 功能, ...

  7. 使用 Kafka 和 Spark Streaming 构建实时数据处理系统

    使用 Kafka 和 Spark Streaming 构建实时数据处理系统  来源:https://www.ibm.com/developerworks,这篇文章转载自微信里文章,正好解决了我项目中的 ...

  8. Kylin设置JDBC配置greenplum数据源

    Kylin设置JDBC配置greenplum数据源 kylin最开始的时候支持hive和kafka作为数据源,从2.3.0版本之后开始支持JDBC作为第第三种数据源.用户可以自定义的数据库或者数据仓库 ...

  9. grafana计算不同时间的差值_大数据时代!如何基于Spark Streaming构建实时计算平台...

    随着互联网技术的迅速发展,用户对于数据处理的时效性.准确性与稳定性要求越来越高,如何构建一个稳定易用并提供齐备的监控与预警功能的实时计算平台也成了很多公司一个很大的挑战. 自2015年携程实时计算平台 ...

最新文章

  1. mysql 如何修改wait_timeout,interactive_timeout ,和 session ,global 有什么关系
  2. Win7下的修改grub工具bcdedit
  3. linux系统获取用户信息失败怎么办,异常详细信息: System.Data.SqlClient.SqlException: 用户 'NT AUTHORITY\IUSR' 登录失败解决办法...
  4. windows下进程间通信的(13种方法)
  5. ROS系统的安装 ubuntu 18.04.5 LTS
  6. python把c语言的.h文件转为c++的.cpp和.h文件
  7. 操作系统——理论知识
  8. 使用 SAP Uiveri5 遇到 passport 依赖的问题以及解决方案
  9. Codeforces 803E--Roma and Poker (DP)
  10. spring学习笔记06-spring整合junit(出现的问题,解决的思路)
  11. hive的安装和升级
  12. 重建二叉树(C++)
  13. Kubernetes详解(二十二)——Deployment控制器
  14. 物联网基础建设-园区智能微电网设计方案
  15. 小程序倒计时显示晃动问题
  16. QTcreator Label控件显示乱码问题解决办法
  17. DialogFragment的OnDismissListener
  18. GoLang之map底层系列二(浅显学习)
  19. Vivado高速时钟差分走线布线
  20. ip-guard如何设置禁止网页版微信

热门文章

  1. Gstreamer之pts/dts(十九)
  2. Win10彻底关闭Antimalware Service Executable占用内存过高问题
  3. Linux glib命令行解析GOptionEntry使用
  4. Webrtc半小时搭建视频通话 视频会议
  5. Android9.0 HIDL头文件加log编译
  6. 集成Android免费语音合成功能(在线、离线、离在线融合),有这一篇文章就够了(离线)
  7. Android Sqlite3数据库操作
  8. android mount --bind挂载目录
  9. android之sqlite操作
  10. springboot之提高maven的速度