「EMR 开发指南」之 Kylin 存算分离方案

2023-11-29 23:05:25 浏览数 (2)

说明

本文描述问题及解决方法同样适用于 弹性 MapReduce(EMR)

背景

在大数据领域,数据量持续增长,数据类型和来源也变得越来越复杂。传统的数据仓库和分析工具很难满足大规模数据处理和实时分析的需求。为了解决这些问题,Apache Kylin应运而生。

Apache Kylin是一个开源的OLAP(在线分析处理)引擎,它基于Hadoop和Spark生态系统,提供了一个高性能、高可扩展性的分析平台。Kylin的核心功能是通过预计算技术将大规模数据集转化为多维数据立方体,从而实现亚秒级查询响应时间。此外,Kylin还支持SQL接口和多种BI工具,使得数据分析变得更加简便。

基础环境构建

  • 首先确保两个集群在同一个vpc(网络互通)
  • sink集群扩容两个router节点,作为新的kylin server节点
  • 扩容时两个router节点选择不启用服务

1. 如下图所示:

2. 在这两个router节点执行

代码语言:javascript复制
rm -r /usr/local/service/hadoop
rm -r /usr/local/service/hive
rm -r /usr/local/service/spark
rm -r /usr/local/service/tez
scp -r sourceIp:/usr/local/service/hadoop /usr/local/service/
scp -r sourceIp:/usr/local/service/hive /usr/local/service/
scp -r sourceIp:/usr/local/service/spark /usr/local/service/
scp -r sourceIp:/usr/local/service/tez /usr/local/service/

3. 配置修改 在两个router节点的/usr/local/service/hbase/conf/hbase-env.sh中注释以下配置

代码语言:javascript复制
export HADOOP_HOME=XXXXXX

在腾讯云控制台暂停掉kylin服务(停掉两个master上的kylin server)

在两个router节点的/usr/local/service/kylin/conf/kylin.properties中修改以下配置项

代码语言:javascript复制
kylin.server.cluster-servers=172.21.16.49:16500,172.21.16.45:16500
kylin.server.mode=query

第一配置的ip为两个router的ip 第二个配置项,两个router节点配的不一样,一个为query,一个为all。不用区分节点。

在两个router节点的/usr/local/service/hadoop/etc/hadoop/hdfs-site.xml添加以下配置

代码语言:javascript复制
//其中hz-cluster2是sink集群的fs.defaultFS
//在sink集群的/usr/local/service/hadoop/etc/hadoop/core-site.xml中可以找到。同样的hz-cluster1是source集群的fs.defaultFS
<property>
<name>dfs.nameservices</name>
<value>hz-cluster1,hz-cluster2</value>
</property>
//上面这一项需要修改value,下面的
<!-- 以下是新增的hz-cluster2的HA配置 -->
<property>
<name>dfs.ha.namenodes.hz-cluster2</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.hz-cluster2.nn1</name>
<value>hadoop40.photo.163.org:4007</value>
</property>
<property>
<name>dfs.namenode.rpc-address.hz-cluster2.nn2</name>
<value>hadoop41.photo.163.org:4007</value>
</property>
<property>
<name>dfs.namenode.http-address.hz-cluster2.nn1</name>
<value>hadoop40.photo.163.org:4008</value>
</property>
<property>
<name>dfs.namenode.http-address.hz-cluster2.nn2</name>
<value>hadoop41.photo.163.org:4008</value>
</property>
<property>
<name>dfs.namenode.https-address.hz-cluster2.nn1</name>
<value>hadoop40.photo.163.org:4009</value>
</property>
<property>
<name>dfs.namenode.https-address.hz-cluster2.nn2</name>
<value>hadoop41.photo.163.org:4009</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.hz-cluster2</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>

在两个router节点的/usr/local/service/hadoop/etc/hadoop/core-site.xml修改以下配置项

代码语言:javascript复制
 <property>
        <name>fs.defaultFS</name>
        <value>hdfs://172.21.16.15:4007</value>
    </property>

其中的ip为source 集群activite nn的ip地址

在腾讯云控制台 点击集群资源 - 资源管理 - Router - 分别点击资源id

给两个router节点绑定两个公网ip,并调整带宽,让带宽大于0

安全组里放开16500端口

kylin cube构建

在两个router节点分别用hadoop账号执行

代码语言:javascript复制
/usr/local/service/kylin/bin/kylin.sh start

然后在浏览器里输入 http://152.136.163.153:16500/kylin/ 其中的ip为router节点的公网ip,两个router可以随便选择一个 登录kylin 用户名:ADMIN 密码:KYLIN

在随便一个router节点执行 sh /usr/local/service/kylin/bin/sample.sh 然后两个router分别执行 /usr/local/service/kylin/bin/kylin.sh stop /usr/local/service/kylin/bin/kylin.sh start

等执行完成后,再次登录web ui 选择learn_project,构建cube

点击submit后,在Monitor栏可以看build进度。待build完后,cube编程Ready状态后,在Insight栏输入查询sql 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 执行结果如下图所示

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

0 人点赞