写点什么

技能速成!教你 10 分钟内在电脑上配置运行 Hive Metastore 和 Presto

作者:Alluxio
  • 2022 年 6 月 17 日
  • 本文字数:2550 字

    阅读完需:约 8 分钟

技能速成!教你10分钟内在电脑上配置运行Hive Metastore和Presto

作者:范斌;Alluxio 创始成员、开源社区副总裁

To 初学者:

本教程将指导初学者在本地服务器上通过搭建 Presto 和 Hive Metastore 来查询 S3 上的数据。Presto 是用于计划和执行查询的 SQL 引擎,S3 为表分区文件提供存储服务,而 Hive Metastore 是为 Presto 访问表模式和位置信息提供 catalog 服务。本教程将展示如何一步一步安装并配置 Presto 和 Hive MetaStore,从而查询存储在公有 S3 bucket 中的数据。

第一步:下载和启动 Hive MetaStore

本教程中我们下载并使用 [apache-hive-2.3.7-bin.tar.gz],点击下载并解压 Hive 的二进制压缩包。

$ cd /path/to/tutorial/root$ wget https://downloads.apache.org/hive/hive-2.3.7/apache-hive-2.3.7-bin.tar.gz$ tar -zxf apache-hive-2.3.7-bin.tar.gz$ cd apache-hive-2.3.7-bin
复制代码

我们只需要启动 Hive Metastore 来为 Presto 提供诸如表模式和分区位置等的 catalog 信息。

如果你是第一次启动 Hive Metastore,请准备好相应的配置文件和环境,同时初始化(initialize)一个新的 Metastore。

$ export HIVE_HOME=`pwd`$ cp conf/hive-default.xml.template conf/hive-site.xml$ mkdir -p hcatalog/var/log/$ bin/schematool -dbType derby -initSchema
复制代码

需要配置 Hive 来访问 S3,可以在 conf/hive-env.sh 中添加以下几行。同时,Hive 需要相应的 jar 包来访问带有“s3a://”地址的文件,还需要 AWS 凭证来访问 S3 bucket(包括公有 S3 bucket)。

export HIVE_AUX_JARS_PATH=${HADOOP_HOME}/share/hadoop/tools/lib/aws-java-sdk-core-1.10.6.jar:${HADOOP_HOME}/share/hadoop/tools/lib/aws-java-sdk-s3-1.10.6.jar:${HADOOP_HOME}/share/hadoop/tools/lib/hadoop-aws-2.8.4.jarexport AWS_ACCESS_KEY_ID=<Your AWS Access Key>export AWS_SECRET_ACCESS_KEY=<Your AWS Secret Key>
复制代码

如果你的 Hadoop 安装包中没有上述 jar 包,你也可以从 maven central 下载:

<aws-java-sdk-core-1.10.6.jar><aws-java-sdk-s3-1.10.6.jar><hadoop-aws-2.8.4.jar>

启动 Hive Metastore,它将在后台运行并监听端口 9083(默认端口)。

$ hcatalog/sbin/hcat_server.sh startStarted metastore server init, testing if initialized correctly...Metastore initialized successfully on port[9083].
复制代码

为了验证 MetaStore 是否在运行,请在 hcatalog/var/log/路径下查看 Hive Metastore 日志。

第二步:下载并启动 Presto 服务器

在本教程中我们以[0.237.1 版本]服务器为例,点击链接,打开 Presto 服务器安装页面,下载并解压经过预编译的(pre-build),服务器压缩包。

$ cd /path/to/tutorial/root$ wget https://repo1.maven.org/maven2/com/facebook/presto/presto-server/0.237.1/presto-server-0.237.1.tar.gz$ tar -zxf presto-server-0.237.1.tar.gz$ cd presto-server-0.237.1
复制代码

创建一个包含基本 Presto 配置的配置文件: etc/config.properties。

coordinator=truenode-scheduler.include-coordinator=truehttp-server.http.port=8080discovery-server.enabled=truediscovery.uri=http://localhost:8080
复制代码

创建 etc/jvm.config 来完成以下 JVM 配置。

-server-Xmx16G-XX:+UseG1GC-XX:G1HeapRegionSize=32M-XX:+UseGCOverheadLimit-XX:+ExplicitGCInvokesConcurrent-XX:+HeapDumpOnOutOfMemoryError-XX:+ExitOnOutOfMemoryError
复制代码

创建 etc/node.properties,应包含下面几行内容:

node.environment=productionnode.id=ffffffff-ffff-ffff-ffff-ffffffffffffnode.data-dir=/tmp/presto/data
复制代码

最后,在 etc/catalog/hive.properties 中配置 Presto Hive 连接器,指向刚刚启动的 Hive Metastore 服务。此外,这里还需要再次输入 AWS 凭证,完成后,Presto 即可从 S3 读取输入文件。

connector.name=hive-hadoop2hive.metastore.uri=thrift://localhost:9083hive.s3.aws-access-key=<Your AWS Access Key>hive.s3.aws-secret-key=<Your AWS Secret Key>
复制代码

在后台启动 Presto 服务器:

$ ./bin/launcher start
复制代码

为了验证 Presto 服务器是否在运行,从浏览器中访问链接 http://localhost:8080 ,并在网页用户界面(UI)上检查服务器状态。

第三步:启动 Presto CLI(Presto 命令行工具)

并运行查询命令,从服务器上下载 Presto 命令行工具,它是一个单独的二进制文件Presto CLI

$ cd /path/to/tutorial/root$ wget https://repo1.maven.org/maven2/com/facebook/presto/presto-cli/0.237.1/presto-cli-0.237.1-executable.jar$ mv presto-cli-0.237.1-executable.jar presto$ chmod +x presto
复制代码

连接到上一步中已经启动的 Presto 服务器。

$ ./presto --server localhost:8080  --catalog hive --debug
复制代码

使用默认模式

presto> use default;USE
复制代码

基于 S3 中的文件在默认模式下创建一个新表,这些信息将被发送到 Hive MetaStore。

presto:default> CREATE TABLE reason (  r_reason_sk integer,  r_reason_id varchar,  r_reason_desc varchar) WITH (  external_location = 's3a://apc999/presto-tutorial/example-reason',  format = 'PARQUET');CREATE TABLE
复制代码

扫描创建的新表:

presto:default> SELECT * FROM reason limit 3; r_reason_sk |   r_reason_id    |     r_reason_desc      -------------+------------------+------------------------           1 | AAAAAAAABAAAAAAA | Package was damaged               2 | AAAAAAAACAAAAAAA | Stopped working                   3 | AAAAAAAADAAAAAAA | Did not get it on time (3 rows)Query 20200703_074406_00011_8vq8w, FINISHED, 1 nodehttp://localhost:8080/ui/query.html?20200703_074406_00011_8vq8wSplits: 18 total, 18 done (100.00%)CPU Time: 0.5s total,     6 rows/s, 2.06KB/s, 27% activePer Node: 0.1 parallelism,     0 rows/s,   279B/sParallelism: 0.1Peak User Memory: 0BPeak Total Memory: 219BPeak Task Total Memory: 219B0:04 [3 rows, 1002B] [0 rows/s, 279B/s]
复制代码

第四步:停止服务器

$ cd /path/to/tutorial/root$ presto-server-0.237.1/bin/launcher stop$ apache-hive-2.3.7-bin/hcatalog/sbin/hcat_server.sh stop
复制代码

总结:

在本教程中,我们演示了如何通过搭建 Presto 和 Hive Metastore 来对存储在公有 S3 bucket 中的数据进行 SQL 查询,希望对你有所帮助。

用户头像

Alluxio

关注

还未添加个人签名 2022.01.04 加入

Alluxio是全球首个面向基于云原生数据分析和人工智能的开源的资料编排技术!能够在跨集群、跨区域、跨国家的任何云中将数据更紧密地编排接近数据分析和AI/ML应用程序,从而向上层应用提供内存速度的数据访问。

评论

发布
暂无评论
技能速成!教你10分钟内在电脑上配置运行Hive Metastore和Presto_presto_Alluxio_InfoQ写作社区