• Kylin引入Spark引擎


    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 将会是个好的选择。

  • 相关阅读:
    Python采用struct处理二进制
    OVS处理upcall流程分析
    mybatis在CRUD
    leetcode先刷_Valid Sudoku
    [TS] Implement a doubly linked list in TypeScript
    [TS] Implement a singly linked list in TypeScript
    [Python] The get() method on Python dicts and its "default" arg
    [Javascript AST] 4. Continue: Report ESLint error
    [RxJS] Learn How To Use RxJS 5.5 Beta 2
    [NPM] Update published npm packages using np
  • 原文地址:https://www.cnblogs.com/xiaodf/p/10729152.html
Copyright © 2020-2023  润新知