• Apache Kylin 部署之不完全指南


    1. 引言

    Apache Kylin(麒麟)是由eBay开源的分布式分析引擎,提供Hadoop之上的SQL查询接口及多维分析(OLAP)能力以支持超大规模数据。底层存储用的是HBase,数据输入与cube building用的是Hive,中间数据存储用的是HDFS。搭建环境:

    Kylin version = 1.2
    Hive version = 0.13.1-cdh5.3.2
    HBase version = 0.98.6+cdh5.3.2
    Hadoop version = 2.5.0-cdh5.3.2

    本文提供的是半分布式安装——HBase环境只在本机搭建;已略去Hadoop环境搭建过程,将主要介绍Hive、HBase、Kylin的搭建步骤。

    2. Hive部署

    解压包tar zxvf hive-0.13.1-cdh5.3.2.tar.gz,然后mv到指定目录mv hive-0.13.1-cdh5.3.2 <desc-dir>/,指定HIVE_HOME,在.bashrc中添加

    export HIVE_HOME=/<desc-dir>/hive-0.13.1-cdh5.3.2/
    export PATH=$PATH:$HIVE_HOME/bin:

    source后,可以输入hive命令进行表操作;但是还未配置Hive的元数据库。cd ${HIVE_HOME}/conf,创建配置文件cp hive-default.xml.template hive-site.xml,在hive-site.xml文件中配置mysql作为元数据库,需修改以下内容:

    <property>
      <name>javax.jdo.option.ConnectionURL</name>
      <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value>
      <description>JDBC connect string for a JDBC metastore</description>
    </property>
    
    <property>
      <name>javax.jdo.option.ConnectionDriverName</name>
      <value>com.mysql.jdbc.Driver</value>
      <description>Driver class name for a JDBC metastore</description>
    </property>
    
    <property>
      <name>javax.jdo.option.ConnectionUserName</name>
      <value>hive</value>
      <description>username to use against metastore database</description>
    </property>
    
    <property>
      <name>javax.jdo.option.ConnectionPassword</name>
      <value>hive</value>
      <description>password to use against metastore database</description>
    </property>

    元数据库在mysql中的database为hive,Driver为com.mysql.jdbc.Driver,用户名与密码均为hive;需在mysql中配置Hive元数据库:

    mysql -u root -p
    
    mysql> CREATE DATABASE hive;
    
    -- 创建 hive 用户,并赋予访问 hive 数据库的权限
    mysql> GRANT ALL PRIVILEGES ON hive.* TO 'hive'@'localhost' IDENTIFIED BY 'hive';
    mysql> FLUSH PRIVILEGES;
    
    -- 设置 binary log 的格式:
    mysql> set global binlog_format=MIXED;

    此外还需要添加mysql jdbc jar 包:

    tar xvzf mysql-connector-java-5.1.37.tar.gz
    mv mysql-connector-java-5.1.37/mysql-connector-java-5.1.37-bin.jar $HIVE_HOME/lib

    Kylin用 HCatalog 读取Hive表的,而HCatalog用 property hive.metastore.uris 创建HiveMetaStoreClient 得到元信息。因此,我们还需修改hive-site.xml:

    <property>
      <name>hive.metastore.uris</name>
      <value>thrift://localhost:9083</value>
      <description>Thrift URI for the remote metastore. Used by metastore client to connect to remote metastore.</description>
    </property>

    开启metastore 服务:

    nohup hive --service metastore -p 9083 &

    3. HBase 部署

    与Hive 搭建步骤相类似,解压文件mv到指定目录,然后在.bashrc中配置环境变量:

    tar zxvf hbase-0.98.6-cdh5.3.2.tar.gz
    mv hbase-0.98.6-cdh5.3.2 <desc-dir>/
    --.bashrc
    export HBASE_HOME=/<desc-dir>//hbase-0.98.6-cdh5.3.2/
    export PATH=$PATH:$HIVE_HOME/bin:$HBASE_HOME/bin

    以root权限开启HBase服务:

    sudo start-hbase.sh

    4. Kylin 部署

    解压文件mv到指定目录,然后在.bashrc中配置环境变量KYLIN_HOME。此外,还需要修改Kylin的部分配置信息,cd ${KYLIN_HOME}/conf 修改kylin.properites:

    #部署服务器ip,便于其他机器访问
    kylin.rest.servers=ip:7070
    
    #kylin在hdfs存储路径
    kylin.hdfs.working.dir=<hdfs-dir>
    
    #依赖jar包地址
    kylin.job.mr.lib.dir=<lib hdfs-dir>

    在每一台机器上可能Hive的部署目录不一致,导致诸如此类exception(因此需要配置 kylin.job.mr.lib.dir):

    java.lang.RuntimeException: java.lang.ClassNotFoundException: Class org.apache.hive.hcatalog.mapreduce.HCatInputFormat not found
        at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2199)
        at org.apache.hadoop.mapreduce.task.JobContextImpl.getInputFormatClass(JobContextImpl.java:184)
    ...

    kylin_job_conf.xml配置队列权限:

    <property>
        <name>mapreduce.job.queuename</name>
        <value>...</value>
        <description>the queue name</description>
    </property>

    (最新版本1.5.1同时需要在hive-site.xml 添加)配置完成后,运行./bin/find-hive-dependency.sh看Hive环境是否配置正确,可能需要手动设置HCAT_HOME;./bin/kylin.sh start即可开启kylin服务了。


    番外

    Kylin如何添加登录用户

    官方doc给出解决思路:Kylin是采用Spring security framework做用户认证的,需要配置${KYLIN_HOME}/tomcat/webapps/kylin/WEB-INF/classes/kylinSecurity.xml 的sandbox,testing部分

    <beans profile="sandbox,testing">
        <scr:authentication-manager alias="authenticationManager">
            <scr:authentication-provider>
                <scr:user-service>
                    ...
                    <scr:user name="ADMIN" password="$2a$10$o3ktIWsGYxXNuUWQiYlZXOW5hWcqyNAFQsSSCSEWoC/BRVMAUjL32" authorities="ROLE_MODELER, ROLE_ANALYST, ROLE_ADMIN" />
                    <scr:user name="xxx" password="xxx" authorities="ROLE_MODELER, ROLE_ANALYST, ROLE_ADMIN" />
                    ...

    password需要spring加密:

    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-core</artifactId>
        <version>4.0.0.RELEASE</version>
    </dependency>
    String password = "123456"; 
    org.springframework.security.crypto.password.PasswordEncoder encoder
       = new org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder();
    String encodedPassword = encoder.encode(password);  
    System.out.print(encodedPassword);
  • 相关阅读:
    '?'变化左右括号,使得字符串括号匹配
    二叉树中最大值节电和最小值节点之间的路径
    python 处理传输层的报文 TCP/UDP
    hook笔记分享
    scrapy-splash学习
    pycharm解决关闭flask后依旧可以访问服务
    python一些常用代码块
    阿里系纯滑块验证码破解思路
    python代理池搭建
    关于scrapy的验证码处理
  • 原文地址:https://www.cnblogs.com/yujihaia/p/7410390.html
Copyright © 2020-2023  润新知