实战部署Kylin读写分离

Posted 中兴大数据

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实战部署Kylin读写分离相关的知识,希望对你有一定的参考价值。

文 | 刘智江

概述

Apache Kylin™由eBay开源,来自中国的Apache顶级开源项目,是一个分布式分析引擎,在Hadoop平台之上实现传统数据仓库、商业智能的能力,使用SQL查询接口提供交互式的多维分析能力,并提供传统数据仓库技术所不能做到的超大规模数据集的快速查询。

Kylin的核心思想是预计算(以空间换时间),即对多维分析可能用到的维度和度量进行预计算,将计算好的结果保存成Cube,供查询时直接访问。把高复杂度的聚合运算、多表连接等操作转换成对预计算结果的查询,这决定了Kylin能够拥有很好的快速查询和高并发能力。

Kylin非常适合读写分离,原因是Kylin的工作负载有两种:

  • Cube的计算:调用MapReduce进行批量、延时很长的计算,有密集的CPU和IO资源。

  • 在线的实时查询计算:是只读的操作,要求响应快,延迟低。

社区提供的读写分离架构图如下:实战部署Kylin读写分离

通过架构图可以看到Kylin会访问两个集群的HDFS,建议两个集群的NameService务必不能相同,尤其是集群启用NameNode HA时,相同的NameService会导致组件在跨集群访问HDFS时因无法区分NameService而出现问题。

环境

虚拟机环境:

  • 硬件:内存16GB,CPU分配2核

  • 操作系统: CentOSrelease 6.5

  • Jdk版本号:1.7.0_55

  • Ø  Apache Hadoop版本号:2.7.3

  • Apache Hive版本号:2.1.1

  • Apache HBase版本号:1.1.10

  • ApacheZookeeper版本号:3.4.9

  • Apache Kylin版本号:1.6.0

两台主机分别为:

  • 主机名为test23,ip为10.43.156.23

  • 主机名为test24,ip为 10.43.156.24

两台主机分别在/etc/hosts文件中配置对方的主机名和ip,根据主机名可互访。实战部署Kylin读写分离

本案作为功能验证,使用2台虚拟机分别搭建两个Hadoop环境当做Hadoop集群,一个集群部署HDFS、Hive、MR、YARN作为计算集群,负责Cube构建。一个集群部署HDFS、YARN、HBase负责Cube存储。

test23为计算集群,安装HDFS、MR、Hive、YARN,HDFS的dfs.nameservices设置为ns23。

test24为存储集群,安装HDFS、YARN、HBase,HDFS的dfs.nameservices设置为ns24。

部署

1. 在test23上部署Hadoop(MapReduce计算集群,以下简称计算)集群,在test24单部署HBase(HDFS存储,以下简称存储)集群和Kylin,部署过程略。安装完毕后,需要验证除Kylin外各组件功能正常,其中计算集群必须启用JobHistoryServer进程。

本例中test23启动集群后,进程如下:实战部署Kylin读写分离

test24启动集群后,进程如下:实战部署Kylin读写分离

安装完毕后的目录结构图,本案使用MR用户安装组件到/home/mr目录下。

test23主机目录结构:实战部署Kylin读写分离

test24主机目录结构:实战部署Kylin读写分离

test24主机上的Hive作为客户端,不需要启动服务进程。

2. 在test24服务器(存储集群)上,配置Hadoop(计算)集群的客户端配置文件。考虑到Kylin和存储集群部署合设,需要将计算集群的客户端配置文件单独存放到目录/home/mr/myetc中从而剔除计算集群客户端配置文件对存储集群的影响, 通过设置配置文件路径的环境变量来控制Kylin读取配置客户端配置文件的路径。

通过env.sh脚本实现重置环境变量的过程,脚本内容如下:

 [mr@test24  myetc]$ cat env.sh

export  HBASE_CONF_DIR=/home/mr/myetc

export HADOOP_CONF_DIR=/home/mr/myetc

export  HIVE_CONF_DIR=/home/mr/myetc

export  HIVE_CONF=$HIVE_CONF_DIR

export  HCAT_HOME=/home/mr/hive-2.1.1/hcatalog

export  HBASE_CLASSPATH=$HBASE_CONF_DIR

客户端配置文件列表如下:实战部署Kylin读写分离

下面对配置文件做简要说明:

Kylin是通过HBase脚本进行加载,在Kylin运行时获取到的相关环境变量是通过HBase脚本传入,如果期望在Kylin提交作业到计算集群以及访问计算集群的Hive,需要修改HBase客户端配置中的core-site.xml,将默认dfs指向计算集群,同时需要修改hdfs-site.xml,使其能解析计算集群和存储集群的NameService。

core-site.xml为计算集群的配置文件,defaultFs指向计算集群的HDFS,便于Hive使用。如果两个集群中的本地路径不一致,需要手工修改该配置文件,将其与存储集群保持一致。实战部署Kylin读写分离

hbase-site.xml使用存储集群的配置,从test24的/home/mr/hbase-1.1.10/conf目录拷贝。

hive-site.xml使用计算集群的配置,从计算集群test23拷贝,需要注意按照test24中的目录修改hive-site.xml 中涉及本地路径的配置项,并在test24中创建对应的路径及赋予访问权限。

mpared-site.xml和yarn-site.xml使用计算集群的配置,直接从计算集群test23的/home/mr/hadoop-2.7.3/etc/hadoop中拷贝,如有涉及到本地文件的配置项,需要一并按照存储集群的目录进行修改。

hdfs-site.xml这个文件比较特殊,如果在两个集群中的组件访问HDFS时的url都配置的是主机名+端口的方式,只需要将计算集群的配置文件拷贝到存储集群即可,如有涉及到本地文件的配置项,需要一并按照存储集群的目录进行修改。

如果组件使用NameService进行访问需要进行文件合并,保证Kylin可以正确的使用存储集群或计算集群的NameService名称访问HDFS。

合并的方法是将存储集群中的NameService加入到集群集群客户端配置文件hdfs-site.xml的dfs.nameservices配置项中,并增加对NameService的解析,包括dfs.ha.namenodes、dfs.namenode.rpc-address、dfs.namenode.http-address、dfs.ha.automatic-failover.enabled、dfs.client.failover.proxy.provider等参数。

  • 验证Hadoop ,HDFS , Hive ,mapred,YARN等命令可以访问计算集群test23上的服务和资源。

设置环境变量:

[mr@test24  myetc]$ source env.sh

在test24上测试HDFS命令,目录结构为test23上的资源:

[mr@test24  myetc]$ hdfs dfs -ls /

Found  5 items

drwxr-xr-x   - mr supergroup          0 2017-05-31 16:38 /hbase

drwx-wx-wx   - mr supergroup          0 2017-06-01 19:57 /hive

drwxr-xr-x   - mr supergroup          0 2017-06-01 20:34 /kylin

drwx------   - mr supergroup          0 2017-06-01 21:52 /tmp

drwx-wx-wx   - mr supergroup          0 2017-06-01 09:57 /user

在test24上测试Hive命令,目录结构为test23上的资源:

hive>  show databases;

OK

default

test

Time  taken: 1.036 seconds, Fetched: 2 row(s)

在test24上测试mapred命令,节点显示为test23上的资源

[mr@test24  myetc]$ mapred queue –list

实战部署Kylin读写分离

在test24上测试YARN命令,节点显示为test23上的资源:实战部署Kylin读写分离

  • 验证HBase命令可以访问存储集群test24上的服务和资源。

设置环境变量:

[mr@test24  myetc]$ source env.sh

在test24上测试HBase命令,list命令执行成功,无异常:

[mr@test24  myetc]$ hbase shell

hbase(main):001:0>  list

TABLE  

0  row(s) in 0.1080 seconds

3.  配置Kylin参数。修改test24上Kylin的配置文件/home/mr/kylin-1.6.0/conf/kylin.properties,设置 kylin.hbase.cluster.fs 为HBase集群HDFS的url。本例为kylin.hbase.cluster.fs=hdfs://test24:9000

4.  在test24上重启Kylin服务实例:

[mr@test24 bin]$ source /home/mr/myetc/env.sh

[mr@test24 bin]$ cd /home/mr/kylin-1.6.0/bin

[mr@test24 bin]$ ./kylin.sh stop

[mr@test24 bin]$ ./kylin.sh start

验证

执行sample.sh脚本插入测试数据:

[mr@test24 bin]$ cd /home/mr/kylin-1.6.0/bin

[mr@test24 bin]$ ./sample.sh

使用http://10.43.156.24:7070/kylin访问Kylin的WebUI,在System菜单中重新加载元数据:实战部署Kylin读写分离

在Model中选择kylin­_sales_cube构建Cube,可以在test23上查看到MR作业已运行:实战部署Kylin读写分离

Cube构建成功:实战部署Kylin读写分离

验证原始数据存储在test23的集群中:实战部署Kylin读写分离

验证Cube存储在test24的集群中:实战部署Kylin读写分离

Kylin通过test23计算集群存储Hive数据及进行MR计算,通过test24存储集群在HBase中存储Cube,读写分离验证成功。

扩展阅读:


 

大数据时代的思考和洞察

长按二维码关注

以上是关于实战部署Kylin读写分离的主要内容,如果未能解决你的问题,请参考以下文章

kylin跨集群配置实现读写分离

企业实战系列MY SQL 的读写分离

MySQL读写分离实战

MySQL读写分离实战

MySQL MyCAT 读写分离实战

MySQL 主从复制与读写分离 部署