目录

一:Presto

1.1 Presto简介

1.1.1 Presto概念

1.1.2 Presto架构

1.1.3 Presto优缺点

1.1.4 Presto、Impala性能比较

1.2 Presto安装

1.2.1 Presto Server安装

1.2.2 Presto命令行Client安装

1.2.3 Presto可视化Client安装

1.3 Presto优化之数据存储

1.3.1 合理设置分区

1.3.2 使用列式存储

1.3.3 使用压缩

1.4 Presto优化之查询SQL

1.4.1 只选择使用的字段

1.4.2 过滤条件必须加上分区字段

1.4.3 Group By语句优化

1.4.4 Order by时使用Limit

1.4.5 使用Join语句时将大表放在左边

1.5 注意事项

1.5.1 字段名引用

1.5.2 时间函数

1.5.3 不支持INSERT OVERWRITE语法

1.5.4 PARQUET格式

二:Kylin

2.1 Kylin简介

2.1.1 Kylin 定义

2.1.2 Kylin架构

2.1.3 Kylin特点


一:Presto

1.1 Presto简介

1.1.1 Presto概念

Presto是一个开源的分布式SQL查询引擎,数据量支持GB到PB字节,主要用来处理秒级查询的场景。

注意:虽然Presto可以解析SQL,但它不是一个标准的数据库。不是MySQL、Oracle的代替品,也不能用来处理在线事务(OLTP)

1.1.2 Presto架构

Presto是由一个Coordinator和多个Worker组成。

1.1.3 Presto优缺点

1)优点:

1.Presto基于内存运算,减少了硬盘IO,计算更快。

2.能够连接多个数据源,跨数据源连表查,如从Hive查询大量网站访问记录,然后从MYSQL中匹配出设备信息。

2)缺点:

Presto能够处理PB级别的海量数据分析,但Presto并不是把PB级数据都放在内存中计算的。而是根据场景,如Count,AVG等聚合运算,是边读数据边计算,在清内存,再读数据,再计算,这种耗的内存不高。但是连表查,就可能产生大量的临时数据,因此速度会变慢。

1.1.4 Presto、Impala性能比较

测试结论:Impala性能稍领先于Presto,但是Presto在数据源支持上非常丰富,包括Hive、图数据库、传统关系型数据库、Redis等。

1.2 Presto安装

1.2.1 Presto Server安装

1.将presto-server-0.196.tar.gz导入hadoop102的/opt/software目录下,并解压到/opt/module目录

tar -zxvf presto-server-0.196.tar.gz -C /opt/module/

2.修改名称为presto

mv presto-server-0.196/ presto

3.进入到/opt/module/presto目录,并创建存储数据文件夹

mkdir data

4.进入到/opt/module/presto目录,并创建存储配置文件文件夹

mkdir etc

5.配置在/opt/module/presto/etc目录下添加jvm.config配置文件

添加如下内容
-server
-Xmx16G
-XX:+UseG1GC
-XX:G1HeapRegionSize=32M
-XX:+UseGCOverheadLimit
-XX:+ExplicitGCInvokesConcurrent
-XX:+HeapDumpOnOutOfMemoryError
-XX:+ExitOnOutOfMemoryError

6.Presto可以支持多个数据源,在Presto里面叫catalog,这里我们配置支持Hive的数据源,配置一个Hive的catalog

[axing@hadoop102 etc]$ mkdir catalog
[axing@hadoop102 catalog]$ vim hive.properties 添加如下内容
connector.name=hive-hadoop2
hive.metastore.uri=thrift://hadoop102:9083

7.将hadoop102上的presto分发到hadoop103、hadoop104

xsync presto

8.分发之后,分别进入hadoop102、hadoop103、hadoop104三台主机的/opt/module/presto/etc的路径。配置node属性,node id每个节点都不一样。

[atguigu@hadoop102 etc]$vim node.properties
node.environment=production
node.id=ffffffff-ffff-ffff-ffff-ffffffffffff
node.data-dir=/opt/module/presto/data[atguigu@hadoop103 etc]$vim node.properties
node.environment=production
node.id=ffffffff-ffff-ffff-ffff-fffffffffffe
node.data-dir=/opt/module/presto/data[atguigu@hadoop104 etc]$vim node.properties
node.environment=production
node.id=ffffffff-ffff-ffff-ffff-fffffffffffd
node.data-dir=/opt/module/presto/data

9.Presto是由一个coordinator节点和多个worker节点组成。在hadoop102上配置成coordinator,在hadoop103、hadoop104上配置为worker。

(1)hadoop102上配置coordinator节点
[atguigu@hadoop102 etc]$ vim config.properties
添加内容如下coordinator=true
node-scheduler.include-coordinator=false
http-server.http.port=8881
query.max-memory=50GB
discovery-server.enabled=true
discovery.uri=http://hadoop102:8881(2)hadoop103、hadoop104上配置worker节点[atguigu@hadoop103 etc]$ vim config.properties
添加内容如下coordinator=false
http-server.http.port=8881
query.max-memory=50GB
discovery.uri=http://hadoop102:8881[atguigu@hadoop104 etc]$ vim config.properties
添加内容如下coordinator=false
http-server.http.port=8881
query.max-memory=50GB
discovery.uri=http://hadoop102:8881

10.在hadoop102的/opt/module/hive目录下,启动Hive Metastore

[axing@hadoop102 hive]$
nohup bin/hive --service metastore >/dev/null 2>&1 &

11.分别在hadoop102、hadoop103、hadoop104上启动Presto Server

(1)前台启动Presto,控制台显示日志
[axing@hadoop102 presto]$ bin/launcher run
[axing@hadoop103 presto]$ bin/launcher run
[axing@hadoop104 presto]$ bin/launcher run
(2)后台启动Presto
[axing@hadoop102 presto]$ bin/launcher start
[axing@hadoop103 presto]$ bin/launcher start
[axing@hadoop104 presto]$ bin/launcher start

12.日志查看路径/opt/module/presto/data/var/log

1.2.2 Presto命令行Client安装

1.将presto-cli-0.196-executable.jar上传到hadoop102的/opt/module/presto文件夹下

2.修改文件名称

[axing@hadoop102 presto]$ mv presto-cli-0.196-executable.jar  prestocli

3.增加执行权限

4.启动prestocli

./prestocli --server hadoop102:8881 --catalog hive --schema default

5.Presto命令行操作

Presto的命令行操作,相当于Hive命令行操作。每个表必须要加上schema。
例如:
select * from schema.table limit 100

1.2.3 Presto可视化Client安装

1)将yanagishima-18.0.zip上传到hadoop102的/opt/module目录

2)解压缩yanagishima

[axing@hadoop102 module]$ unzip yanagishima-18.0.zip
cd yanagishima-18.0

3)进入到/opt/module/yanagishima-18.0/conf文件夹,编写yanagishima.properties配置

[axing@hadoop102 conf]$ vim yanagishima.properties添加如下内容
jetty.port=7080
presto.datasources=atguigu-presto
presto.coordinator.server.atguigu-presto=http://hadoop102:8881
catalog.atguigu-presto=hive
schema.atguigu-presto=default
sql.query.engines=presto

4)在/opt/module/yanagishima-18.0路径下启动yanagishima

[axing@hadoop102 yanagishima-18.0]$
nohup bin/yanagishima-start.sh >y.log 2>&1 &

5)启动web页面

http://hadoop102:7080

看到界面,进行查询了。

6)查看表结构

这里有个Tree View,可以查看所有表的结构,包括Schema、表、字段等。

比如执行select * from hive.dw_weather.tmp_news_click limit 10,这个句子里Hive这个词可以删掉,是上面配置的Catalog

每个表后面都有个复制键,点一下会复制完整的表名,然后再上面框里面输入sql语句,ctrl+enter键执行显示结果

1.3 Presto优化之数据存储

1.3.1 合理设置分区

与Hive类似,Presto会根据元数据信息读取分区数据,合理的分区能减少Presto数据读取量,提升查询性能。

1.3.2 使用列式存储

Presto对ORC文件读取做了特定优化,因此在Hive中创建Presto使用的表时,建议采用ORC格式存储。相对于Parquet,Presto对ORC支持更好。

1.3.3 使用压缩

数据压缩可以减少节点间数据传输对IO带宽压力,对于即席查询需要快速解压,建议采用Snappy压缩

1.4 Presto优化之查询SQL

1.4.1 只选择使用的字段

由于采用列式存储,选择需要的字段可加快字段的读取、减少数据量。避免采用*读取所有字段。

[GOOD]: SELECT time, user, host FROM tbl

[BAD]:  SELECT * FROM tbl

1.4.2 过滤条件必须加上分区字段

对于有分区的表,where语句中优先使用分区字段进行过滤。acct_day是分区字段,visit_time是具体访问时间。

[GOOD]: SELECT time, user, host FROM tbl where acct_day=20171101

[BAD]:  SELECT * FROM tbl where visit_time=20171101

1.4.3 Group By语句优化

合理安排Group by语句中字段顺序对性能有一定提升。将Group By语句中字段按照每个字段distinct数据多少进行降序排列。

[GOOD]: SELECT GROUP BY uid, gender

[BAD]:  SELECT GROUP BY gender, uid

1.4.4 Order by时使用Limit

Order by需要扫描数据到单个worker节点进行排序,导致单个worker需要大量内存。如果是查询Top N或者Bottom N,使用limit可减少排序计算和内存压力。

[GOOD]: SELECT * FROM tbl ORDER BY time LIMIT 100

[BAD]:  SELECT * FROM tbl ORDER BY time

1.4.5 使用Join语句时将大表放在左边

Presto中join的默认算法是broadcast join,即将join左边的表分割到多个worker,然后将join右边的表数据整个复制一份发送到每个worker进行计算。如果右边的表数据量太大,则可能会报内存溢出错误。

[GOOD] SELECT ... FROM large_table l join small_table s on l.id = s.id

[BAD] SELECT ... FROM small_table s join large_table l on l.id = s.id

1.5 注意事项

1.5.1 字段名引用

避免和关键字冲突:MySQL对字段加反引号`、Presto对字段加双引号分割

当然,如果字段名称不是关键字,可以不加这个双引号。

1.5.2 时间函数

对于Timestamp,需要进行比较的时候,需要添加Timestamp关键字,而MySQL中对Timestamp可以直接进行比较。

/*MySQL的写法*/

SELECT t FROM a WHERE t > '2017-01-01 00:00:00';

/*Presto中的写法*/

SELECT t FROM a WHERE t > timestamp '2017-01-01 00:00:00';

1.5.3 不支持INSERT OVERWRITE语法

Presto中不支持insert overwrite语法,只能先delete,然后insert into。

1.5.4 PARQUET格式

Presto目前支持Parquet格式,支持查询,但不支持insert。

二:Kylin

2.1 Kylin简介

2.1.1 Kylin 定义

Apache Kylin是一个开源的分布式分析引擎,提供Hadoop/Spark之上的SQL查询接口及多维分析(OLAP)能力以支持超大规模数据,最初由eBay Inc开发并贡献至开源社区。它能在亚秒内查询巨大的Hive表。

2.1.2 Kylin架构

1)REST Server

REST Server是一套面向应用程序开发的入口点,旨在实现针对Kylin平台的应用开发工作。 此类应用程序可以提供查询、获取结果、触发cube构建任务、获取元数据以及获取用户权限等等。另外可以通过Restful接口实现SQL查询。

2)查询引擎(Query Engine)

当cube准备就绪后,查询引擎就能够获取并解析用户查询。它随后会与系统中的其它组件进行交互,从而向用户返回对应的结果。

3)路由器(Routing)

在最初设计时曾考虑过将Kylin不能执行的查询引导去Hive中继续执行,但在实践后发现Hive与Kylin的速度差异过大,导致用户无法对查询的速度有一致的期望,很可能大多数查询几秒内就返回结果了,而有些查询则要等几分钟到几十分钟,因此体验非常糟糕。最后这个路由功能在发行版中默认关闭。

4)元数据管理工具(Metadata)

Kylin是一款元数据驱动型应用程序。元数据管理工具是一大关键性组件,用于对保存在Kylin当中的所有元数据进行管理,其中包括最为重要的cube元数据。其它全部组件的正常运作都需以元数据管理工具为基础。 Kylin的元数据存储在hbase中。

5)任务引擎(Cube Build Engine)

这套引擎的设计目的在于处理所有离线任务,其中包括shell脚本、Java API以及Map Reduce任务等等。任务引擎对Kylin当中的全部任务加以管理与协调,从而确保每一项任务都能得到切实执行并解决其间出现的故障。

2.1.3 Kylin特点

Kylin的主要特点包括支持SQL接口、支持超大规模数据集、亚秒级响应、可伸缩性、高吞吐率、BI工具集成等。

1)标准SQL接口:Kylin是以标准的SQL作为对外服务的接口。

2)支持超大数据集:Kylin对于大数据的支撑能力可能是目前所有技术中最为领先的。早在2015年eBay的生产环境中就能支持百亿记录的秒级查询,之后在移动的应用场景中又有了千亿记录秒级查询的案例。

3)亚秒级响应:Kylin拥有优异的查询相应速度,这点得益于预计算,很多复杂的计算,比如连接、聚合,在离线的预计算过程中就已经完成,这大大降低了查询时刻所需的计算量,提高了响应速度。

4)可伸缩性和高吞吐率:单节点Kylin可实现每秒70个查询,还可以搭建Kylin的集群。

5)BI工具集成

Kylin可以与现有的BI工具集成,具体包括如下内容。

ODBC:与Tableau、Excel、PowerBI等工具集成

JDBC:与Saiku、BIRT等Java工具集成

RestAPI:与JavaScript、Web网页集成

Kylin开发团队还贡献了Zepplin的插件,也可以使用Zepplin来访问Kylin服务。


这里省去了kylin的安装步骤。


数仓4.0之即席查询相关推荐

  1. 本地数仓项目(四)—— 即席查询

    1 背景 本文描述本地数仓项目即席查询相关内容,主要涉及即席查询工具包括Presto.Druid.Kylin. 本文基于文章<本地数据仓库项目(一) -- 本地数仓搭建详细流程> 和< ...

  2. 数仓4.0(三)------数据仓库系统

    目录 一:数仓分层 1.1 为什么要分层 1.2 数据集市与数据仓库概念 二:数仓理论 2.1 范式理论 2.1.1 范式概念 2.1.2 函数依赖 2.2 关系建模与维度建模 2.2.1 关系建模 ...

  3. 数仓4.0(三)------数据仓库系统(续)

    四:数仓搭建-ODS层 首先,先了解一下ODS层的任务即其功能: 1)保持数据原貌不做任何修改,起到备份数据的作用. 2)数据采用LZO压缩,减少磁盘存储空间.100G数据可以压缩到10G以内. 3) ...

  4. 数仓4.0(二)------ 业务数据采集平台

    目录 一:电商业务简介 1.1 电商业务流程 1.2 电商常识 二:业务数据采集模块 2.1 安装MySQL及配置 2.2 业务数据生成 2.2.1 连接Mysql以及建表 2.2.2 生成业务数据 ...

  5. 大数据-数仓学习总结与分享

    学习大数据的契机 原因   在学习之前的是一直在干java开发的,但是手头上有个比较大的项目,本来是到9月底的样子就应该结束的,但后面需求变更,导致系统需要大改,之前的那批人也都走的差不多了(几个团队 ...

  6. 数据仓库系列文章一:浅谈数仓设计

    数仓设计指对数据仓库的各项组成进行规划,在正式建设数仓之前形成指导性建设方案. 数仓设计主要分为两部分:数据仓库同操作型业务系统的数据接口设计和数仓自身建设设计. 本文从多个方面探讨数仓的设计要点,给 ...

  7. 企业级数据仓库:数据仓库概述;核心技术框架,数仓理论,数据通道Hive技术框架,HBase设计,系统调度,关系模式范式,ER图,维度建模,星型/雪花/星座模式,数据采集同步,业务数据埋点,数据仓库规范

    文章目录 第一章 数据仓库概述 1.1 数据仓库简介 1.1.2 什么是数据仓库? 1.1.3 OLTP 与 OLAP 1.2 数据仓库技术架构 1.3 课程目标 第二章 核心技术框架 2.1 数据仓 ...

  8. ​爱奇艺的数仓架构​

    首先介绍一下爱奇艺公司整体的业务情况以及数据仓库 1.0 的设计和出现的问题,针对数仓 1.0 的缺陷,是如何演进到数仓 2.0 架构以及数仓 2.0 需要解决的问题和需要达成的目标. 这张图非常清晰 ...

  9. 双管齐下,华为云DWS智能云数仓+商业智能联合

    双管齐下,华为云DWS智能云数仓+商业智能联合 都知道大数据在每日剧增,那你知道它增长的速度有多骇人吗?根据摩尔定理,数据总量会以每24个月翻倍的速度累积增长,而企业数据从以前的GB到TB,一直到PB ...

  10. 数仓:爱奇艺数仓平台建设实践

    文章目录 简介 一.数据仓库 1.0 二.数据仓库 2.0 三.数仓建设 3.1 一致性维度 3.2 指标体系 3.3 建模流程 3.4 数据图谱 3.5 数据血缘 总结 简介 先介绍一下爱奇艺公司整 ...

最新文章

  1. Android-支持多屏幕[译文-2]
  2. 别以为真懂Openstack: 虚拟机创建的50个步骤和100个知识点(5)
  3. Android Activity/Fragment间的数据传递
  4. 线程故事:关于健壮的线程池
  5. 企业需求的Java程序员是什么样子的
  6. 第十天 Oracle安装前准备工作
  7. Network-Monitor项目中观察者模式解析
  8. 地图旋转_人类一败涂地手游:地图冰进阶攻略,团队配合与齐心协力缺一不可...
  9. Ubuntu20.04配置NTP服务器
  10. 机器人 陆梅东_第十八届全国中小学组电脑制作活动上海赛区.DOC
  11. 微生物组-扩增子16S分析第10期(线上/线下同时开课,本年最后一期)
  12. 或许……你听说过P2P智能推流吗?
  13. 怎么使用biopython_关于python:使用Biopython的翻译功能后,如何跟踪核苷酸序列中起始密码子(ATG)的位置?...
  14. JavaScript实现11位手机号码正则表达式
  15. Android OpenGL ES 画出三棱锥
  16. 华为手机手电筒怎么改变颜色_华为手机设置手电筒亮度 华为手机手电筒设置...
  17. 域名dns 域名dns解析查询
  18. 几个编程语言的优缺点
  19. MXC MINI 回路器
  20. 注意:出海企业选择CRM系统和实施团队时需要避开这些坑

热门文章

  1. jmeter并发性能测试工具
  2. Java 将Word转为HTML的方法
  3. 教你如何测试U盘读写速度?
  4. 版本控制选择SVN还是Git?
  5. web多媒体标签,表格标签,超链接标签,语义化标签练习
  6. 银联 php hex2bin,银联支付
  7. VB NetShare
  8. fgo服务器维护补偿,《FGO》:大版本维护补偿调整,部分石头将变成金苹果!
  9. fgo服务器维护 石头,FGO发石头玩家的四种表现 第三种要注意了
  10. 警告: git command could not be found. Please create an alias or add it to your PATH