【问题标题】:Setup Standalone Hive Metastore Service For Presto and AWS S3为 Presto 和 AWS S3 设置独立 Hive Metastore 服务
【发布时间】:2020-11-03 09:22:07
【问题描述】:

我正在使用 S3 服务作为数据湖但没有 AWS Athena 的环境中工作。我正在尝试设置 Presto 以便能够查询 S3 中的数据,并且我知道我需要通过 Hive Metastore 服务将数据结构定义为 Hive 表。我在 Docker 中部署每个组件,因此我希望尽可能减小容器大小。我需要哪些 Hive 组件才能运行 Metastore 服务?我实际上并不关心运行 Hive,只关心 Metastore。我可以减少需要的东西,还是已经有一个预先配置的包呢?我无法在网上找到任何不包括下载所有 Hadoop 和 Hive 的内容。我正在尝试做的事情可能吗?

【问题讨论】:

    标签: hive presto hive-metastore


    【解决方案1】:

    有一种解决方法,您不需要 hive 即可运行 presto。但是我还没有尝试过像 s3 这样的分布式文件系统,但是代码表明它应该可以工作(至少在 HDFS 上)。在我看来这是值得一试的,因为你根本不需要任何新的 docker 镜像用于 hive。

    这个想法是使用内置的FileHiveMetastore。它既没有记录也不建议在生产中使用,但您可以使用它。架构信息存储在文件系统中的数据旁边。显然,它有它的优点和缺点。我不知道你用例的细节,所以我不知道它是否符合你的需求。

    配置:

    connector.name=hive-hadoop2
    hive.metastore=file
    hive.metastore.catalog.dir=file:///tmp/hive_catalog
    hive.metastore.user=cox
    

    演示:

    presto:tiny> create schema hive.default;
    CREATE SCHEMA
    presto:tiny> use hive.default;
    USE
    presto:default> create table t (t bigint);
    CREATE TABLE
    presto:default> show tables;
     Table
    -------
     t
    (1 row)
    
    Query 20180223_202609_00009_iuchi, FINISHED, 1 node
    Splits: 18 total, 18 done (100.00%)
    0:00 [1 rows, 18B] [11 rows/s, 201B/s]
    
    presto:default> insert into t (values 1);
    INSERT: 1 row
    
    Query 20180223_202616_00010_iuchi, FINISHED, 1 node
    Splits: 51 total, 51 done (100.00%)
    0:00 [0 rows, 0B] [0 rows/s, 0B/s]
    
    presto:default> select * from t;
     t
    ---
     1
    (1 row)
    

    完成上述操作后,我可以在我的机器上找到以下内容:

    /tmp/hive_catalog/
    /tmp/hive_catalog/default
    /tmp/hive_catalog/default/t
    /tmp/hive_catalog/default/t/.prestoPermissions
    /tmp/hive_catalog/default/t/.prestoPermissions/user_cox
    /tmp/hive_catalog/default/t/.prestoPermissions/.user_cox.crc
    /tmp/hive_catalog/default/t/.20180223_202616_00010_iuchi_79dee041-58a3-45ce-b86c-9f14e6260278.crc
    /tmp/hive_catalog/default/t/.prestoSchema
    /tmp/hive_catalog/default/t/20180223_202616_00010_iuchi_79dee041-58a3-45ce-b86c-9f14e6260278
    /tmp/hive_catalog/default/t/..prestoSchema.crc
    /tmp/hive_catalog/default/.prestoSchema
    /tmp/hive_catalog/default/..prestoSchema.crc
    

    【讨论】:

    • 感谢您提供这个答案,这正是我正在寻找的,刚刚尝试了一下,看起来它对我正在尝试做的事情非常有效,即只需查询位于 S3 中的数据。稍后我将不得不针对某些分区对其进行测试。但希望它是生产支持的。
    • 我们的 S3 parquet 文件都是服务端加密的,当我使用这种方法从 s3 位置创建表时,我可以创建表,但是从表中选择,我得到 Not a valid parquet文件错误。有什么办法可以解决这个问题?
    • 为什么不建议在生产中使用?
    【解决方案2】:

    现在可以在 Apache Hive 发行版中独立使用 /hive-standalone-metastore-3.0.0/。

    从 Hive 3.0 开始,Metastore 作为单独的包发布 并且可以在没有 Hive 的其余部分的情况下运行。这被称为 独立模式。

    默认情况下,Metastore 配置为与 Hive 一起使用,因此有几个 此配置中的配置参数必须更改。

    metastore.task.threads.always -> org.apache.hadoop.hive.metastore.events.EventCleanerTask,org.apache.hadoop.hive.metastore.MaterializationsCacheCleanerTask
    metastore.expression.proxy -> org.apache.hadoop.hive.metastore.DefaultPartitionExpressionProxy
    

    Link to Docs

    【讨论】:

    • Presto 迄今为止 (13.01.2020) 还不支持 Hive 3.x
    【解决方案3】:

    需要为 Metastore 设置 hive 确实很麻烦。 您是否考虑过改用 AWS 粘合数据目录? 这样您就不必管理任何事情。 您可以在这里找到详细信息:https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-presto-glue.html

    【讨论】:

      【解决方案4】:

      我能够使用 Presto SQL 和 HMS 3.0 与 AWS S3 集成。如果有帮助,我写了一篇文章。 https://www.linkedin.com/pulse/presto-sql-s3-abhishek-gupta

      【讨论】:

        猜你喜欢
        • 2021-01-20
        • 1970-01-01
        • 2017-05-16
        • 2021-03-13
        • 2018-06-17
        • 2016-08-01
        • 2022-09-28
        • 2013-05-31
        • 2010-09-10
        相关资源
        最近更新 更多