百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

Kylin配置Spark并构建Cube

toyiye 2024-06-24 19:25 13 浏览 0 评论

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

放弃不难,但坚持很酷~

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=yarn
kylin.engine.spark-conf.spark.submit.deployMode=cluster
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.executor.instances=40
kylin.engine.spark-conf.spark.yarn.executor.memoryOverhead=1024
kylin.engine.spark-conf.spark.shuffle.service.enabled=true
kylin.engine.spark-conf.spark.eventLog.enabled=true
kylin.engine.spark-conf.spark.eventLog.dir=hdfs\:///kylin/spark-history
kylin.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 runtime
kylin.engine.spark-conf.spark.yarn.archive=hdfs://node71.data:8020/kylin/spark/spark-libs.jar
kylin.engine.spark-conf.spark.io.compression.codec=org.apache.spark.io.SnappyCompressionCodec
#
## 如果是HDP版本,请取消下述三行配置的注释
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.engine.spark-conf.spark.yarn.archive 配置是指定了 Kylin 引擎要运行的 jar 包,该 jar 包需要自己生成且上传到 HDFS 。由于我执行 Kylin 服务的用户是 kylin,所以要先切换到 kylin 用户下去执行。命令如下:

su - kylin
cd /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://<namenode_host>: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 - kylin
cd /usr/hdp/2.6.4.0-91/kylin
cp -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.jar
hadoop 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

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码