在文件存储HDFS版上使用 Presto

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 1年
简介: 本文档主要介绍在文件存储HDFS版上搭建及使用 Presto。

一 目的

本文档主要介绍在文件存储HDFS上搭建及使用 Presto。


二 背景信息

Presto 是一个开源的分布式SQL查询引擎,适用于交互式分析查询。

说明:在本文档中 Presto 连接 Hive 元数据服务来读取文件存储HDFS上的数据。在文件存储HDFS上使用 Presto 时需要额外配置一些依赖包,详细操作步骤请参见:配置Presto章节


三 准备工作

  1. 开通文件存储HDFS服务并创建文件系统实例和挂载点,详细文档请参见:快速入门
  2. 在 Hadoop 集群所有节点上安装JDK。版本不能低于1.8。
  3. 建议您使用的 Hadoop 版本不低于2.7.2,本文档中使用的 Hadoop 版本为 Apache Hadoop 2.7.2。
  4. 在 Hadoop 集群中配置文件存储HDFS实例,详细文档请参见:挂载文件系统
  5. 在集群中安装 Hive 。本文档中使用的 Hive 版本为 2.3.7。
  6. 下载 Presto 安装包和 presto-cli-xxx-executable.jar,下载地址:官方链接。在本文档使用的版本为 0.265.1。


四 配置 Presto

Presto 的官方部署文档请参见:Deploying Presto

  1. 解压 Presto 安装包
tar -zxf presto-server-0.265.1.tar.gz
  1. 在 Presto 解压目录下创建 etc 目录
mkdir presto-server-0.265.1/etc
  1. 创建 etc/node.properties 并配置
node.environment=production
node.id=ffffffff-ffff-ffff-ffff-ffffffffffff
node.data-dir=/var/presto/data
  1. 创建 etc/jvm.config 并配置
-server-Xmx8G-XX:+UseG1GC
-XX:G1HeapRegionSize=32M
-XX:+UseGCOverheadLimit
-XX:+ExplicitGCInvokesConcurrent
-XX:+HeapDumpOnOutOfMemoryError
-XX:+ExitOnOutOfMemoryError
  1. 创建 etc/config.properties 并配置,在本文档中将 Coordinator 和 Worker 配置在了同一台机器,您可以参考 Presto 官方文档将 Coordinator 和 Worker 配置到不同的机器
coordinator=truenode-scheduler.include-coordinator=truehttp-server.http.port=8080query.max-memory=5GB
query.max-memory-per-node=1GB
query.max-total-memory-per-node=2GB
discovery-server.enabled=truediscovery.uri=http://xx.xx.xx.xx:8080 #xx.xx.xx.xx为当前机器的ip地址
  1. 创建 etc/log.properties 并配置
com.facebook.presto=INFO
  1. 创建 etc/catalog 目录
mkdir presto-server-0.265.1/etc/catalog
  1. 创建 etc/catalog/hive.properties 并配置
connector.name=hive-hadoop2
hive.metastore.uri=thrift://xxxx:9083 #xxxx为启动 hive 元数据服务的ip地址hive.config.resources=/etc/hadoop/core-site.xml
  1. 编译并替换 Jar 包

Presto 使用 maven-shade-plugin 插件打包,对引入的 Hadoop 依赖进行了重命名,文件存储HDFS Java SDK 和 Hadoop 共用了 protobuf-xxx.jar 包,Presto 通过 Hive Metastore 读取文件存储HDFS上的数据时,文件存储HDFS获取不到 Presto 重命名地址后的 protobuf-xxx.jar 包而报错。为了避免兼容性问题,文件存储HDFS的Java SDK 需要作为 Presto Hadoop 的依赖项引入,并对 Presto 中引入的 Hadoop Jar 包 hadoop-apache2-xxx.jar 重新编译。

查看您目前安装的 Presto 中的 presto-hadoop-apache2 版本。

以 0.265.1 为例,源码 POM 文件地址为:pom.xml , 通过 POM 文件可以看到引入的 hadoop-apache2 版本为 2.7.4-9。

下载 presto-hadoop-apache2 对应版本的源码,下载地址:官方链接

git clone -b2.7.4-9 https://github.com/prestodb/presto-hadoop-apache2.git

在源码中的 POM 文件中添加文件存储HDFS最新 Java SDK 的依赖项。本文档中使用的版本为 1.0.5。

vim presto-hadoop-apache2/pom.xml
<dependency>
    <groupId>com.aliyun.dfs</groupId>
    <artifactId>aliyun-sdk-dfs</artifactId>
    <version>1.0.5</version>
</dependency>


编译 presto-hadoop-apache2

cd presto-hadoop-apache2
mvn clean package -DskipTests

presto-hadoop-apache2/target 目录下查看生成的 hadoop-apache2-2.7.4-9.jar


将编译好的 hadoop-apache2-2.7.4-9.jar 替换掉 Presto 安装目录下旧 Jar 包

## 移除旧的 hadoop-apache2-2.7.4-9.jarmv presto-server-0.265.1/plugin/hive-hadoop2/hadoop-apache2-2.7.4-9.jar presto-server-0.265.1/plugin/hive-hadoop2/hadoop-apache2-2.7.4-9.jar.bak
## 将新的 hadoop-apache2-2.7.4-9.jar 依赖包拷贝到对应的目录下cp presto-hadoop-apache2/target/hadoop-apache2-2.7.4-9.jar  presto-server-0.265.1/plugin/hive-hadoop2/
  1. presto-cli-xxx-executable.jar 复制到 presto-server-0.265.1/bin/ 目录下重命名并添加可执行权限
cp presto-cli-0.265.1-executable.jar  presto-server-0.265.1/bin/
mv presto-server-0.265.1/bin/presto-cli-0.265.1-executable.jar  presto-server-0.265.1/bin/presto
chmod+x presto-server-0.265.1/bin/presto

五 验证 Presto

  1. 启动 Hive 的元数据服务
./hive --service metastore
  1. 启动 Presto Server 并链接 Hive Metastore
## 启动 Presto Serverpresto-server-0.265.1/bin/launcher start## 使用 Presto 连接 Hive Metastorepresto-server-0.265.1/bin/presto  --server localhost:8080 --catalog hive
  1. 创建 Hive 数据库
## 在文件存储HDFS版实例上创建测试目录hadoop fs -mkdir dfs://f-xxxxxx.cn-zhangjiakou.dfs.aliyuncs.com:10290/tmp/presto_test
## 在 Hive 中创建数据库presto> CREATE SCHEMA hive.prosto_test
-> WITH (location ='dfs://f-xxxxxx.cn-zhangjiakou.dfs.aliyuncs.com:10290/tmp/presto_test');
presto> show SCHEMAS;


  1. 在创建的数据库下新建表并插入数据
presto> use prosto_test;
presto:prosto_test> CREATE TABLE user_info_test (
->   user_id bigint,
->   firstname varchar,
->   lastname varchar,
->   country varchar
-> )
-> WITH (
->   format ='TEXTFILE'-> );
presto:prosto_test> INSERT INTO user_info_test VALUES(1,'Dennis','Hu','CN'),(2,'Json','Lv','Jpn'),(3,'Mike','Lu','USA');


  1. 查看文件存储HDFS实例上是否有创建的表数据
hadoop fs -ls dfs://f-xxxxx.cn-zhangjiakou.dfs.aliyuncs.com:10290/tmp/presto_test/*


  1. 进行 Word Count 计算
presto:prosto_test> SELECT country,count(*) FROM user_info_test GROUP BY country;


了解更多关于文件存储HDFS版的产品信息,欢迎访问https://www.aliyun.com/product/alidfs

如果您对文件存储HDFS版有任何问题,欢迎钉钉扫描以下二维码加入文件存储HDFS版技术交流群。

目录
相关文章
|
SQL 存储 分布式计算
HDFS, Druid, Presto, Alluxio之间是什么关系?
HDFS, Druid, Presto, Alluxio之间是什么关系?
|
3月前
|
存储 分布式计算 Hadoop
Hadoop Distributed File System (HDFS): 概念、功能点及实战
【6月更文挑战第12天】Hadoop Distributed File System (HDFS) 是 Hadoop 生态系统中的核心组件之一。它设计用于在大规模集群环境中存储和管理海量数据,提供高吞吐量的数据访问和容错能力。
504 4
|
27天前
|
存储 分布式计算 Hadoop
【揭秘Hadoop背后的秘密!】HDFS读写流程大曝光:从理论到实践,带你深入了解Hadoop分布式文件系统!
【8月更文挑战第24天】Hadoop分布式文件系统(HDFS)是Hadoop生态系统的关键组件,专为大规模数据集提供高效率存储及访问。本文深入解析HDFS数据读写流程并附带示例代码。HDFS采用NameNode和DataNode架构,前者负责元数据管理,后者承担数据块存储任务。文章通过Java示例演示了如何利用Hadoop API实现数据的写入与读取,有助于理解HDFS的工作原理及其在大数据处理中的应用价值。
38 1
|
1月前
|
存储 缓存 分布式计算
|
1月前
|
存储 分布式计算 运维
Hadoop重新格式化HDFS的方案
【8月更文挑战第8天】
|
22天前
|
存储 分布式计算 资源调度
Hadoop生态系统概览:从HDFS到Spark
【8月更文第28天】Hadoop是一个开源软件框架,用于分布式存储和处理大规模数据集。它由多个组件构成,旨在提供高可靠性、高可扩展性和成本效益的数据处理解决方案。本文将介绍Hadoop的核心组件,包括HDFS、MapReduce、YARN,并探讨它们如何与现代大数据处理工具如Spark集成。
48 0
|
2月前
|
分布式计算 Hadoop
|
2月前
|
分布式计算 Hadoop
hadoop格式化HDFS问题
【7月更文挑战第15天】
52 12
|
2月前
|
分布式计算 Hadoop
hadoop格式化HDFS的命令
【7月更文挑战第21天】
158 5

热门文章

最新文章