AWS EMR使用Apache Kylin快速分析大数据
在AWS Elastic MapReduce(EMR)集群上部署和使用Apache Kylin,以实现对大规模数据集的快速分析,企业可以充分利用云计算的强大资源和Kylin的数据分析能力,实现快速、高效的数据分析。以下是该案例的详细步骤和要点:
背景
Apache Kylin是一个开源的分布式分析引擎,设计用于处理超大规模数据集,提供亚秒级的查询响应时间。AWS(Amazon Web Services)是亚马逊公司的云计算平台,提供包括弹性计算、存储、数据库在内的一整套云计算服务。结合AWS的强大计算能力和Kylin的数据分析能力,企业可以加速数据分析过程,提升数据挖掘能力。
实施过程
-
准备AWS服务资源
• 创建一个AWS账号,并配置必要的权限。
• 了解与Amazon EMR集群相关的AWS服务资源,如VPC(Virtual Private Cloud)、EC2(Elastic Compute Cloud)和S3(Simple Storage Service)。
-
创建Amazon EMR集群
• 在AWS控制台中选择EMR服务,点击“创建集群”。
• 配置集群参数,包括选择EMR版本(如emr-5.21.0或更高版本,以确保支持Apache Kylin)、实例类型、数量以及网络设置等。
• 勾选Apache Kylin运行必需的服务组件,如Hadoop、HBase、Hive等。
-
在EMR集群上安装Kylin
• 登录到EMR集群的主节点。
• 下载并解压Apache Kylin安装包。
• 配置Kylin的环境变量和kylin.properties文件。
• 替换必要的Jar包,以确保Kylin与EMR集群中的其他服务组件兼容。
-
配置Kylin数据源和Cube
• 将数据存储在AWS的S3或HDFS中,并使用Hive进行预处理和清洗。
• 在Kylin中定义数据源,指向存储在S3或HDFS中的数据。
• 创建Cube,定义维度和度量,以及分区策略。
-
构建和查询Cube
• 配置Cube构建任务,定期从数据源中提取数据并加载到Kylin中进行预计算。
• 使用Kylin的Web界面或REST API进行查询,享受亚秒级的查询响应时间。
结果
通过在AWS的EMR集群上部署Apache Kylin,企业可以实现以下效益:
• 加速数据分析:Kylin的预计算机制显著减少了实时查询的计算量,提高了查询速度。
• 降低成本:利用AWS的按需付费和弹性扩展特性,企业可以根据实际需求灵活调整资源使用,降低IT投入成本。
• 提高系统稳定性:Kylin的分布式架构和高可用性设计确保了系统在高并发查询下的稳定运行。
示例代码
以下是一个在AWS EMR上创建Kylin Cube的示例代码:
CREATE CUBE my_cube
DIMENSIONS (dimension1,dimension2
)
MEASURES (SUM(measure1),COUNT(measure2)
)
PARTITIONED BY (partition_date);
此代码创建了一个名为my_cube的Cube,包含了两个维度dimension1和dimension2,以及两个度量SUM(measure1)和COUNT(measure2)。数据按partition_date进行分区。
以下是在AWS EMR上部署Apache Kylin并实现数据分析的具体流程与关键Python代码实现:
一、AWS EMR集群创建(Python自动化)
使用boto3库自动化创建EMR集群:
import boto3def create_emr_cluster():emr = boto3.client('emr', region_name='us-west-2')response = emr.run_job_flow(Name='Kylin-EMR-Cluster',ReleaseLabel='emr-6.8.0', # 确保支持KylinApplications=[{'Name': 'Hadoop'},{'Name': 'Hive'},{'Name': 'HBase'}],Instances={'InstanceGroups': [{'Name': 'MasterNode','Market': 'ON_DEMAND','InstanceRole': 'MASTER','InstanceType': 'm5.xlarge','InstanceCount': 1,},{'Name': 'CoreNodes','Market': 'SPOT', # 使用Spot实例降低成本'InstanceRole': 'CORE','InstanceType': 'm5.xlarge','InstanceCount': 2,}],'Ec2KeyName': 'your-key-pair','KeepJobFlowAliveWhenNoSteps': True,'Ec2SubnetId': 'subnet-xxxxxx'},BootstrapActions=[{'Name': 'Install-Kylin','ScriptBootstrapAction': {'Path': 's3://your-bucket/install-kylin.sh' # 引导脚本自动安装Kylin}}],ServiceRole='EMR_DefaultRole',JobFlowRole='EMR_EC2_DefaultRole')return response['JobFlowId']# 执行创建
cluster_id = create_emr_cluster()
print(f"Cluster created with ID: {cluster_id}")
二、Kylin安装引导脚本(install-kylin.sh)
#!/bin/bash
# 下载并解压Kylin
wget https://archive.apache.org/dist/kylin/apache-kylin-3.1.2/apache-kylin-3.1.2-bin-hbase1x.tar.gz
tar -xzf apache-kylin-3.1.2-bin-hbase1x.tar.gz -C /opt/
mv /opt/apache-kylin-3.1.2-bin-hbase1x /opt/kylin# 配置环境变量
echo 'export KYLIN_HOME=/opt/kylin' >> /etc/profile
echo 'export PATH=$KYLIN_HOME/bin:$PATH' >> /etc/profile
source /etc/profile# 替换HBase兼容性JAR(根据EMR版本调整)
cp /usr/lib/hbase/lib/*.jar /opt/kylin/ext/# 启动Kylin服务
kylin.sh start
三、Hive表创建(指向S3数据)
使用pyhive连接Hive并定义外部表:
from pyhive import hiveconn = hive.Connection(host='emr-master-node-ip', port=10000)
cursor = conn.cursor()# 创建外部表指向S3数据
cursor.execute('''
CREATE EXTERNAL TABLE IF NOT EXISTS sales_data (transaction_id STRING,product_id STRING,sale_amount DOUBLE,transaction_date DATE
)
STORED AS PARQUET
LOCATION 's3://your-bucket/sales-data/'
''')
print("Hive table created successfully.")
四、Kylin Cube创建(REST API调用)
使用requests调用Kylin API创建Cube:
import requests
import jsonkylin_url = 'http://<emr-master-ip>:7070/kylin/api'
headers = {'Content-Type': 'application/json', 'Authorization': 'Basic YWRtaW46S1lMSU4='} # 默认admin/KYLIN# 1. 创建项目
project_payload = {"name": "Sales_Project"}
requests.post(f'{kylin_url}/projects', headers=headers, data=json.dumps(project_payload))# 2. 创建数据模型
model_payload = {"name": "sales_model","project": "Sales_Project","fact_table": "SALES_DATA","lookups": [],"dimensions": [{"table": "SALES_DATA", "column": "PRODUCT_ID"},{"table": "SALES_DATA", "column": "TRANSACTION_DATE"}],"metrics": ["SUM(SALE_AMOUNT)", "COUNT(TRANSACTION_ID)"],"partition_desc": {"partition_date_column": "TRANSACTION_DATE"}
}
requests.post(f'{kylin_url}/models', headers=headers, data=json.dumps(model_payload))# 3. 创建Cube
cube_payload = {"name": "sales_cube","model_name": "sales_model","dimensions": [{"name": "PRODUCT_ID", "table": "SALES_DATA", "column": "PRODUCT_ID"},{"name": "TRANSACTION_DATE", "table": "SALES_DATA", "column": "TRANSACTION_DATE"}],"measures": [{"name": "TOTAL_SALES", "function": {"expression": "SUM(SALE_AMOUNT)"}},{"name": "TRANSACTION_COUNT", "function": {"expression": "COUNT(TRANSACTION_ID)"}}],"partition_date_start": "2023-01-01","auto_merge_time_ranges": [7, 30]
}
response = requests.post(f'{kylin_url}/cubes', headers=headers, data=json.dumps(cube_payload))
print("Cube创建状态:", response.status_code)
五、触发Cube构建与查询
# 触发Cube构建
build_payload = {"startTime": "2023-01-01","endTime": "2023-12-31","buildType": "BUILD"
}
requests.put(f'{kylin_url}/cubes/sales_cube/build', headers=headers, data=json.dumps(build_payload))# 执行SQL查询
query = """
SELECT PRODUCT_ID, SUM(SALE_AMOUNT)
FROM SALES_DATA
WHERE TRANSACTION_DATE BETWEEN '2023-01-01' AND '2023-12-31'
GROUP BY PRODUCT_ID
"""
result = requests.post(f'{kylin_url}/query', headers=headers, data=json.dumps({"sql": query}))
print("查询结果:", result.json())
关键要点说明
- 自动化部署:通过boto3和引导脚本实现EMR集群与Kylin的一键部署。
- 数据准备:Hive表直接映射S3数据,避免数据迁移。
- Cube优化:按日期分区和自动合并策略提升查询性能。
- 成本控制:使用Spot实例和EMR自动伸缩降低资源成本。
- 安全实践:在AWS中配置VPC和安全组限制访问来源IP。
实际部署时需替换代码中的占位符(如S3路径、EMR主节点IP),并根据数据规模调整EMR集群配置。
相关文章:
AWS EMR使用Apache Kylin快速分析大数据
在AWS Elastic MapReduce(EMR)集群上部署和使用Apache Kylin,以实现对大规模数据集的快速分析,企业可以充分利用云计算的强大资源和Kylin的数据分析能力,实现快速、高效的数据分析。以下是该案例的详细步骤和要点&…...
MySQL存储过程和存储函数_mysql 存储过 call proc_stat_data(3,null)
2)很难调试存储过程。只有少数数据库管理系统允许调试存储过程。不幸的是,MySQL不提供调试存储过程的功能。 1.2 数据准备 创建数据库: DEFAULT CHARACTER SET utf8; use test;这里记得设置编码! 创建测试表: DROP…...
spacemacs gnuplot
个人博客地址:spacemacs gnuplot | 一张假钞的真实世界 环境 Ubuntu 16.10Emacs 24 安装过程 spacemacs安装 安装Emacs sudo apt-get install emacs 安装spacemacs (1)如果已经存在Emacs配置文件,首先备份: c…...
Flink2支持提交StreamGraph到Flink集群
最近研究Flink源码的时候,发现Flink已经支持提交StreamGraph到集群了,替换掉了原来的提交JobGraph。 新增ExecutionPlan接口,将JobGraph和StreamGraph作为实现。 Flink集群Dispatcher也进行了修改,从JobGraph改成了接口Executio…...
Kotlin 使用 Springboot 反射执行方法并自动传参
在使用反射的时候,执行方法的时候在想如果Springboot 能对需要执行的反射方法的参数自动注入就好了。所以就有了下文。 知识点 获取上下文通过上下文获取 Bean通过上下文创建一个对象,该对象所需的参数由 Springboot 自己注入 创建参数 因为需要对反…...
索罗斯的“反身性”(Reflexivity)理论:市场如何扭曲现实?(中英双语)
索罗斯的“反身性”(Reflexivity)理论:市场如何扭曲现实? 一、引言:市场是镜子,还是哈哈镜? 在传统经济学中,市场通常被认为是一个理性、有效的反映现实的系统。按照经典经济学理论…...
Vue 入门到实战 七
第7章 渲染函数 目录 7.1 DOM树 7.2 什么是渲染函数 7.3 h()函数 7.3.1 基本参数 7.3.2 约束 7.3.3 使用JavaScript代替模板功能 7.1 DOM树 7.2 什么是渲染函数 在多数情况下,Vue推荐使用模板template来创建HTML。然而在一些应用场景中,需要使用J…...
系统学习算法: 专题八 二叉树中的深搜
深搜其实就是深度优先遍历(dfs),与此相对的还有宽度优先遍历(bfs) 如果学完数据结构有点忘记,如下图,左边是dfs,右边是bfs 而二叉树的前序,中序,后序遍历都可…...
进程、线程、内存和IO模型的概念详解
进程、线程、内存和IO模型的概念详解 1 进程与线程1.1 进程1.1.1 进程分类1.1.2 进程的状态和转换1.1.3 僵尸进程和孤儿进程的区别1.1.4 进程之间的通信1.1.5 用户态和内核态1.1.6 用户空间和内核空间 1.2 线程1.2.1 线程的状态和转换1.2.2 进程与线程的区别 1.3 多进程和多线程…...
DeepSeek:AI领域的创新先锋
在人工智能领域,DeepSeek正以其独特的创新技术引领着行业的发展。作为一款高性能、低成本的AI模型,DeepSeek在架构设计、训练优化和应用场景等多个方面都展现出了显著的创新点。这些创新不仅使其在技术上取得了突破,也为AI的普及化和应用拓展…...
Labelme转Voc、Coco
Q:在github找的cv代码基本都是根据现有且流行的公共数据集格式组织的训练数据集,这导致我使用labelme标注好之后需要我们重新组织数据集 labelme2coco #!/usr/bin/env pythonimport argparse import collections import datetime import glob import j…...
pytorch实现变分自编码器
人工智能例子汇总:AI常见的算法和例子-CSDN博客 变分自编码器(Variational Autoencoder, VAE)是一种生成模型,属于深度学习中的无监督学习方法。它通过学习输入数据的潜在分布(Latent Distribution)&…...
使用 Numpy 自定义数据集,使用pytorch框架实现逻辑回归并保存模型,然后保存模型后再加载模型进行预测,对预测结果计算精确度和召回率及F1分数
1. 导入必要的库 首先,导入我们需要的库:Numpy、Pytorch 和相关工具包。 import numpy as np import torch import torch.nn as nn import torch.optim as optim from sklearn.metrics import accuracy_score, recall_score, f1_score2. 自定义数据集 …...
JVM方法区
一、栈、堆、方法区的交互关系 二、方法区的理解: 尽管所有的方法区在逻辑上属于堆的一部分,但是一些简单的实现可能不会去进行垃圾收集或者进行压缩,方法区可以看作是一块独立于Java堆的内存空间。 方法区(Method Area)与Java堆一样,是各个…...
【Python】第七弹---Python基础进阶:深入字典操作与文件处理技巧
✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】【MySQL】【Python】 目录 1、字典 1.1、字典是什么 1.2、创建字典 1.3、查找 key 1.4、新增/修改元素 1.5、删除元素 1.6、遍历…...
指导初学者使用Anaconda运行GitHub上One - DM项目的步骤
以下是指导初学者使用Anaconda运行GitHub上One - DM项目的步骤: 1. 安装Anaconda 下载Anaconda: 让初学者访问Anaconda官网(https://www.anaconda.com/products/distribution),根据其操作系统(Windows、M…...
在实际开发中,如何正确使用 INT(1) 和 INT(10)
在实际开发中,如何正确使用 INT(1) 和 INT(10) 前言 在数据库设计和开发过程中,数据类型的选择至关重要。 最近,我在工作中遇到了一个关于MySQL中INT类型的误解问题,这让我意识到很多开发者对INT类型的理解存在误区。 本文将深…...
像接口契约文档 这种工件,在需求 分析 设计 工作流里面 属于哪一个工作流
οゞ浪漫心情ゞο(20***328) 2016/2/18 10:26:47 请教一下,像接口契约文档 这种工件,在需求 分析 设计 工作流里面 属于哪一个工作流? 潘加宇(35***47) 17:17:28 你这相当于问用例图、序列图属于哪个工作流,看内容。 如果你的&quo…...
GAMES101学习笔记(六):Geometry 几何(基本表示方法、曲线与曲面、网格处理)
文章目录 几何的表示方法隐式几何 Implicit Geometry代数曲面(Algebraic surface)构造实体几何CSG(Constructive Solid Geometry)距离函数(Distance Function)水平集方法(Level Set Methods)分型几何(Fractal) 显式几何 Explicit Geometry点云(Point Cloud)多边形网格(Polygon …...
【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.24 随机宇宙:生成现实世界数据的艺术
1.24 随机宇宙:生成现实世界数据的艺术 目录 #mermaid-svg-vN1An9qZ6t4JUcGa {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-vN1An9qZ6t4JUcGa .error-icon{fill:#552222;}#mermaid-svg-vN1An9qZ6t4JUc…...
深入解析:一个简单的浮动布局 HTML 示例
深入解析:一个简单的浮动布局 HTML 示例 示例代码解析代码结构分析1. HTML 结构2. CSS 样式 核心功能解析1. 浮动布局(Float)2. 清除浮动(Clear)3. 其他样式 效果展示代码优化与扩展总结 在网页设计中,浮动…...
爬虫基础(三)Session和Cookie讲解
目录 一、前备知识点 (1)静态网页 (2)动态网页 (3)无状态HTTP 二、Session和Cookie 三、Session 四、Cookie (1)维持过程 (2)结构 正式开始说 Sessi…...
HTMLCSS :下雪了
这段代码创建了一个动态的雪花飘落加载动画,通过 CSS 技术实现了雪花的下落和消失效果,为页面添加了视觉吸引力和动态感。 大家复制代码时,可能会因格式转换出现错乱,导致样式失效。建议先少量复制代码进行测试,若未能…...
力扣 84. 柱状图中最大的矩形
🔗 https://leetcode.cn/problems/largest-rectangle-in-histogram 题目 给一个数组 num 表示位置 i 上圆柱的高度,求圆柱可以勾勒出的矩形的最大面积 思路 枚举圆柱 i,以该圆柱为高,计算其可以组成的矩形的最大面积。记录这过…...
【Windows Server实战】生产环境云和NPS快速搭建
前置条件 本文假定你已达成以下前提条件: 有域控DC。有证书服务器(AD CS)。已使用Microsoft Intune或者GPO为客户机申请证书。服务器上至少有两张网卡(如果用虚拟机做的测试环境,可以用一张HostOnly网卡做测试&#…...
RHCSA——搭建FTP文件共享服务器
一、实验目的 1、掌握vsftpd服务器的配置方法 2、熟悉FTP客户端工具的使用 3、掌握常见的FTP服务器的故障排除 二、实验项目背景 某企业像架构一台FTP服务器,为企业局域网中的计算机提供文件传送的任务,为财务部门、销售部门和OA系统提供异地数据备…...
IM 即时通讯系统-50-[特殊字符]cim(cross IM) 适用于开发者的分布式即时通讯系统
IM 开源系列 IM 即时通讯系统-41-开源 野火IM 专注于即时通讯实时音视频技术,提供优质可控的IMRTC能力 IM 即时通讯系统-42-基于netty实现的IM服务端,提供客户端jar包,可集成自己的登录系统 IM 即时通讯系统-43-简单的仿QQ聊天安卓APP IM 即时通讯系统-44-仿QQ即…...
SSH代理實用指南
SSH是一種安全的遠程訪問協議,用於遠程登錄和代理工具,是一種通過SSH協議實現的網路代理,常用於將網路流量通過安全的SSH通道進行轉發。與傳統的HTTP代理不同,SSH代理能夠在多種協議下工作(如HTTP、HTTPS、FTP等&#…...
Python在线编辑器
from flask import Flask, render_template, request, jsonify import sys from io import StringIO import contextlib import subprocess import importlib import threading import time import ast import reapp Flask(__name__)RESTRICTED_PACKAGES {tkinter: 抱歉&…...
ZZNUOJ(C/C++)基础练习1041——1050(详解版)
1041 : 数列求和2 题目描述 输入一个整数n,输出数列1-1/31/5-……前n项的和。 输入 输入只有一个整数n。 输出 结果保留2为小数,单独占一行。 样例输入 3 样例输出 0.87注意sum 1相当于sumsum1 注意sum * 1相当于sumsum*1 C语言版 #include<stdio.h> // 包含…...
