大数据实战课程-Presto实战:
Presto实战练习
实验预计耗时:45分钟
1. 课程背景
1.1 课程目的
弹性MapReduce(EMR)是腾讯云结合云技术和Hadoop、Spark等社区开源技术,提供的安全、低成本、高可靠、可弹性伸缩的云端托管Hadoop服务。您可以在数分钟内创建安全可靠的专属Hadoop集群,以分析位于集群内数据节点或COS上的PB级海量数据。
EMR提供的组件中除Hadoop和Hive等常见的大数据工具外,还包括提升Hive查询效率的组件Presto。Presto是一个开源的分布式SQL查询引擎,适用于交互式分析查询,数据量支持GB到PB字节。Presto的设计和编写完全是为了解决商业数据仓库的交互式分析和处理速度的问题。
本课程将带你使用Presto进行数据库表创建和数据加载等基本操作,掌握Presto的基本使用和操作流程。
1.2 课前知识准备
学习本课程前,学员需要掌握以下前置知识:
1、能力基础
- Linux运维基础:掌握Linux远程登录、文件与目录管理、vim编辑器使用等。
- SQL语法基础:包括SQL基本语法、数据类型、常用内置函数等。
2、相关技术
- Presto是Facebook开源的,完全基于内存的并行计算,分布式SQL交互式查询引擎,其架构如下:
- coordinator:中心的查询角色,负责接收查询请求、解析SQL生成执行计划、任务调度worker管理。
- worker:执行任务的节点。
- connector:连接器,Presto以插件形式对数据存储层进行了抽象,不仅包含Hadoop相关组件的连接器还包括RDBMS连接器。负责提取数据,实际执行查询计划。
- discovery service:将coordinator和worker结合在一起服务; worker节点启动后向discovery service服务注册,coordinator通过discovery service获取注册的worker节点。
- Presto上SQL的运行过程
- coordinator接到SQL后,通过SQL语法解析器把SQL语法解析变成一个抽象的语法树AST,只是进行语法解析如果有错误此环节暴露。
- 语法符合SQL语法,会经过一个逻辑查询计划器组件,通过connector查询metadata中schema列名、列类型等,生成一个物理的语法树节点,如果有类型错误会在此步报错。
- 如果通过,会得到一个逻辑的查询计划,将其分发到分布式的逻辑计划器里,进行分布式解析,最后转化为一个个task。
- 在每个task里面,会将位置信息解析出来,交给执行的plan,由plan将task分给worker执行。
2. 实验环境
2.1 实验操作环境
本课程需要以下实验操作环境:
- 可以接入互联网的笔记本电脑或者台式机,本实验使用的本地计算机为Windows系统。
- 实验环境:本地计算机+腾讯云控制台。
2.2 实验架构图
本实验将使用EMR三节点集群(Master节点和两个Core节点),使用PuTTY连接Master节点的方式访问集群。实验任务通过Presto和Hive的协同使用,让学员了解Presto的基本使用流程。实验架构图如下:
2.3 实验的数据规划表
资源名称 | 数据 | 说明 |
---|---|---|
腾讯云账号 | 账号:XXXXXXXX、密码:XXXXXXXX | 涉及产品如下:VPC、EMR |
PuTTY | 版本:0.73 |
3. 实验流程
实验共包含三个任务。
- 首先在计算机准备实验环境,使用腾讯云弹性MapReduce服务创建一个包含Hive及Presto组件的Hadoop集群。
- 第二个任务通过Presto查询Hive数据表的案例,掌握Presto的基本使用。
- 最后将多源数据存储到同一数据库,依次使用Presto进行查询,体验Presto的优势与不足。
4. 实验步骤
任务1 实验环境准备
【任务目标】
通过EMR集群的搭建练习,使学员可以熟练搭建EMR集群,快速构建实验所需大数据平台环境。
【任务步骤】
1、创建存储桶
因为任务中需要访问腾讯云对象存储(COS),所以需要在COS中先创建一个存储桶(Bucket)。
1.访问对象存储控制台,点击存储桶列表,点击创建存储桶:
2.创建桶名称为mytest,地域选择广州。
2、EMR集群选购
1.在腾讯云官网,找到弹性MapReduce首页,点击立即购买。如已有EMR集群,本步骤可跳过。
2.可用区与软件配置如下:
配置项 | 配置项说明 |
---|---|
计费模式 | 按量计费 |
地域/可用区 | 广州/广州四区(可根据所在地自定义选择) |
产品版本 | EMR-V3.0.0 |
必选组件 | hadoop、zookeeper、knox |
可选组件 | hive、presto |
Hive元数据库 | 集群默认 |
确认配置无误后,点击下一步:硬件配置。
注意:请勿选择EMR-3.0.0 tlinux,如产品版本无EMR-3.0.0版本,请更换个人主账号进行实验。
3.硬件配置参考如下,如果S4实例已售完,可选择同等配置的S5实例:
配置项 | 配置项说明 |
---|---|
节点高可用 | 不启用 |
Master配置1台 | EMR标准型S4 / 2核8G,CBS云盘100G |
Core配置2台 | EMR标准型S4 / 2核8G,CBS云盘100G |
集群外网 | 开启集群Master节点公网 |
集群网络 | 新建或选择已有的私有网络 |
启动高可用选项可以自定义选择,默认是选择的,如果取消需要手动取消选择。由于我们这里的实验环境仅仅是一个学习的实验环境所以这里我们将此选项取消,实际生产中要根据实际环境合理选择是否需要这个配置。
确认硬件配置信息无误后,点击下一步:基础配置。
4.基础配置如下:
配置项 | 配置项说明 |
---|---|
集群名称 | emr-test |
远程登录 | 开启 |
安全组 | 创建新安全组 |
对象存储 | 开启 |
登录密码 | EMR集群云主机root用户登录的密码 |
对象存储开启后需要输入SecretID和SecretKey,可以前往API密钥管理进行查看。
确认信息无误后,点击购买,会自动跳转至集群页。图中的集群实例状态中显示集群创建中。
等待10min左右,集群构建成功,截图如下:
3、第三方工具连接EMR集群
1.复制集群页的主节点外网IP,打开PuTTY创建连接,将复制的外网IP粘贴至Host Name,端口默认22,如图:
2.点击Open,第一次连接会弹出安全警告,点击是(Y)。
3.接下在login as:后填写用户名为root,密码为构建EMR的时候设置的密码:
备注:这里只能使用root用户进行连接。
回车确认后,我们即可成功访问主节点实例。输入Java进程查看命令jps,可看到应用进程已经启动。
任务2 使用Presto连接 Hive
【任务目标】
EMR中Presto组件预置了Hive、MySQL和Kafka等连接器,且Presto和Hive语法上几乎没有区别。本节将以Hive连接器为例说明Presto读取Hive表信息并进行查询的使用。
【任务步骤】
1、快速插入Hive数据
1.进入Hive环境;
首先切换为hadoop用户;
su hadoop
再使用hive启动Hive客户端;
hive
2.创建数据库tx和并在数据库内创建表。
创建数据库tx;
CREATE database tx;
使用数据库tx;
USE tx;
在数据库内创建表tx_movies;
CREATE TABLE tx.tx_movies (
movieId string COMMENT '电影ID',
title string COMMENT '电影标题',
genre string COMMENT '官方题材'
)COMMENT '电影数据集'
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE;
3.向表内插入一条数据。
INSERT INTO tx_movies VALUES(1,'The Shawshank Redemption','Drama');
验证查询;
SELECT * FROM tx_movies;
4.退出Hive客户端。
quit;
2、presto-client连接Hive
1.切换到presto-client目录;
cd /usr/local/service/presto-client
进入presto-client客户端,连接Hive,并指定数据库名称;
./presto --server localhost:9000 --catalog hive --schema tx
其中server后是presto服务的ip和端口信息,端口号可以在/usr/local/service/etc/config.properties内查看。
2.执行命令查看Hive的表
show tables;
结果如下图:
3.查询数据
执行简单的SELECT查询语句,HQL语句如下:
SELECT * FROM tx_movies;
可以明显感觉到执行效率相比hive有很大提升。
使用quit退出presto
quit
任务3 分析不同源数据
【任务目标】
本节将基于COS(腾讯云对象存储)展示Hive连接器更多使用方法,数据来源于COS 数据、直接插入数据以及lzo压缩数据。
【任务步骤】
1、创建实验数据
1.编辑第一个实验数据cos.txt。
切换至root用户,需要输入密码;
su root
创建一个test文件夹;
mkdir /test
切换到/test目录下:
cd /test
新建文件 cos.txt,并添加数据如下:
vim cos.txt
5,cos_patrick 6,cos_stone
2.再新建文件 lzo.txt,并添加数据如下:
vim lzo.txt
10,lzo_pop 11,lzo_tim
3.将其压缩为 .lzo 文件:
lzop -v lzo.txt
4.将cos.txt上传至COS桶,注意请修改桶名称,APPID请修改为自己账号的APPID。
hdfs dfs -put cos.txt cosn://mytest-APPID/
上传成功后可以在桶内查看到文件:
2、建表与加载COS数据
1.在test目录下新建一个sql脚本,快速创建一个有数据的表格。
vim presto_on_cos_test.sql
sql脚本的内容编辑如下:
CREATE database IF NOT EXISTS test;
USE test;
CREATE EXTERNAL TABLE IF NOT EXISTS presto_on_cos (id int,name string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
INSERT INTO presto_on_cos VALUES (12,'hello'),(13,'world');
SELECT * FROM presto_on_cos;
2.使用hive-cli执行这个脚本:
切换hadoop用户;
su hadoop
使用hive命令直接运行整个编辑好的sql脚本(注意运行命令时,sql脚本应在当前test目录下);
hive -f presto_on_cos_test.sql
温馨提示:建议如示例一样,使用外部表进行Hive测试,以免删除重要数据。正常结果如下:
3.从COS中加载数据,注意修改桶名称,将APPID改成自己账号的APPID。
hive -e 'load data inpath "cosn://mytest-APPID/cos.txt" into table test.presto_on_cos;'
使用查询语句进行验证:
hive -e 'SELECT * FROM test.presto_on_cos;'
可以看到Hive执行查询大概等待了3秒多的时间,接下来登录Presto。
切换到presto-client目录;
cd /usr/local/service/presto-client
登录Presto;
./presto --server localhost:9000 --catalog hive --schema test
执行与Hive相同的查询语句,可以明显感受到查询速度的提升。
SELECT * FROM presto_on_cos;
3、加载本地LZO数据
1.退出Presto客户端后,从本地路径加载创建好的数据lzo.txt.lzo;
hive -e 'load data local inpath "/test/lzo.txt.lzo" into table test.presto_on_cos;'
使用查询语句进行验证;
hive -e 'SELECT * FROM test.presto_on_cos;'
2.加载成功后,再次登录Presto,使用Presto进行查询。
登录Presto;
./presto --server localhost:9000 --catalog hive --schema test
执行查询语句,再次对比查询速度:
SELECT * FROM presto_on_cos;
至此,您已经完成了Presto实战练习的全部任务,相信您已经掌握了Presto的基本使用。
5. 注意事项
如实验资源无需保留,请在实验结束后及时销毁,以免产生额外费用。
学员评价