Apache Kylin™是一个开源的、分布式的分析型数据仓库,提供 Hadoop/Spark 之上的 SQL 查询接口及多维分析(OLAP)能力以支持超大规模数据,最初由 eBay 开发并贡献至开源社区。它能在亚秒内查询巨大的表。
Kylin 能提供低延迟(sub-second latency)的秘诀就是预计算,即针对一个星型拓扑结构的数据立方体,预计算多个维度组合的度量,然后将结果保存在 hbase 中,对外提供 JDBC、ODBC、Rest API 的查询接口,即可实现实时查询。
运行脚本,重启 Kylin 服务器刷新缓存。
/usr/local/service/kylin/bin/sample.sh
使用默认用户名和密码 ADMIN/KYLIN 登录 Kylin 网站,在左上角项目下拉框中选择learn_kylin
工程,然后选择名为kylin_sales_cube
的样例 Cube,选择Actions>Build,选择一个在2014-01-01之后的日期(覆盖所有的10000样例记录)。
单击Monitor,查看 build 进度直至 100%。
单击Insight,执行 SQLs,例如:
select part_dt, sum(price) as total_sold, count(distinct seller_id) as sellers from kylin_sales group by part_dt order by part_dt
在kylin.properties
中设置kylin.env.hadoop-conf-dir
属性。
kylin.env.hadoop-conf-dir=/usr/local/service/hadoop/etc/hadoop
检查 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
## uncomment for 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
为了在 Hortonworks 平台上运行,需要将hdp.version
指定为 Yarn 容器的 Java 选项,因此需取消kylin.properties
中最后三行的注释。
除此之外,为了避免重复上传 Spark jar 包到 Yarn,您可以手动上传一次,然后配置 jar 包的 HDFS 路径。HDFS 路径必须是全路径名。
jar cv0f spark-libs.jar -C $KYLIN_HOME/spark/jars/ .
hadoop fs -mkdir -p /kylin/spark/
hadoop fs -put spark-libs.jar /kylin/spark/
然后,要在kylin.properties
中进行如下配置:
kylin.engine.spark-conf.spark.yarn.archive=hdfs://sandbox.hortonworks.com:8020/kylin/spark/spark-libs.jar
所有kylin.engine.spark-conf.*
参数都可以在 Cube 或 Project 级别进行重写,这为用户提供了灵活性。
创建和修改样例 cube
运行sample.sh
创建样例 cube,然后启动 Kylin 服务器:
/usr/local/service/kylin/bin/sample.sh
/usr/local/service/kylin/bin/kylin.sh start
Kylin 启动后,访问 Kylin 网站,在“Advanced Setting”页,编辑名为kylin_sales
的 cube,将Cube Engine由MapReduce修改为Spark(Beta):
单击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,请保留默认配置。
用 Spark 构建 Cube
单击Build,选择当前日期为 end date。Kylin 会在“Monitor”页生成一个构建 job,第7步是 Spark cubing。Job engine 开始按照顺序执行每一步。
当 Kylin 执行这一步时,您可以监视 Yarn 资源管理器中的状态,单击“Application Master”链接将会打开 Spark 的 UI 网页,它会显示每一个 stage 的进度以及详细的信息。
所有步骤成功执行后,Cube 的状态变为“Ready”,您即可正常进行查询。
本页内容是否解决了您的问题?