一、开发准备
·因为任务中需要访问腾讯云对象存储(COS),所以需要在 COS 中先 创建一个存储桶(Bucket)。
·确认你已经开通了腾讯云,并且创建了一个 EMR 集群。在创建 EMR 集群的时候需要在软件配置界面选择 Presto 组件,并且在基础配置页面开启对象存储的授权。
·Presto 等相关软件安装在路径 EMR 云服务器的 /usr/local/service/ 路径下。
二、数据准备
首先需要登录 EMR 集群中的任意机器,最好是登录到 Master 节点。登录 EMR 的方式请参考 登录 Linux 实例。这里我们可以选择使用 WebShell 登录。单击对应云服务器右侧的登录,进入登录界面,用户名默认为 root,密码为创建 EMR 时用户自己输入的密码。输入正确后,即可进入命令行界面。
在 EMR 命令行先使用以下指令切换到 Hadoop 用户,并进入 Hive 文件夹:
[root@172 ~]# su hadoop[hadoop@172 ~]# cd /usr/local/service/hive
新建文件 cos.txt,并添加数据如下:
5,cos_patrick6,cos_stone
使用 HDFS 指令把文件上传到 COS 中。其中 $bucketname 为你创建的存储桶的名字和路径。
[hadoop@172 hive]# hdfs dfs -put cos.txt cosn://$bucketname/
再新建文件 lzo.txt,并添加数据如下:
10,lzo_pop11,lzo_tim
将其压缩为 .lzo 文件:
[hadoop@172 hive]$ lzop -v lzo.txtcompressing hive_test.data into lzo.txt.lzo
注意:压缩 lzo 文件需要先安装 lzo 和 lzop,安装执行命令:yum -y install lzo lzop。
三、新建 Hive 表并使用 Presto 查询
这里使用了一个脚这篇件来生成进行 Hive 数据库和表的创建。新建一个脚这篇件 presto_on_cos_test.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');load data inpath "cosn://$bucketname/cos.txt" into table presto_on_cos;load data local inpath "/$yourpath/lzo.txt.lzo" into table presto_on_cos;
其中 $bucketname 为你的 COS 存储桶名加路径,$yourpath 为你放置 lzo.txt.lzo 文件的路径。
脚这篇件首先新建一个数据库“test”,在新建的数据库中新建一个表“presto_on_cos”。分三步进行了数据的插入操作,首先采用直接插入的方法。然后插入了 COS 中数据,最后插入 lzo 压缩包中的数据。
建议如示例一样,使用外部表进行 Hive 测试,以免删除重要数据。使用 hive-cli 执行这个脚本:
[hadoop@172 hive]$ hive -f "presto_on_cos_test.sql"
执行完成之后,就可以进入 Presto 查看表中的数据。使用上一节的方法进入 Presto,不过需要改动 schema 参数。
[hadoop@172 presto-client]$ ./presto –server $host:$port –catalog hive –schema test
对刚刚创建的 Hive 表进行查询:
presto:test> select * from presto_on_cos ; id | name —-+————- 5 | cos_patrick 6 | cos_stone 10 | lzo_pop 11 | lzo_tim 12 | hello 13 | world (6 rows)Query 20180702_150000_00011_c4qzg, FINISHED, 3 nodesSplits: 4 total, 4 done (100.00%)0:03 [6 rows, 127B] [1 rows/s, 37B/s]
更多 Presto 操作请查看 产品文档。