【问题标题】:Loading or pointing to multiple parquet paths for data analysis with hive or prestodb加载或指向多个 parquet 路径以使用 hive 或 prestodb 进行数据分析
【发布时间】:2016-08-06 11:28:41
【问题描述】:

我有几个在 AWS S3 中生成 parquet 文件的 spark 作业。每隔一段时间,我需要对这些数据的给定日期范围运行一些临时查询。我不想在 spark 中执行此操作,因为我希望我们对 spark 不了解的 QA 团队能够执行此操作。我喜欢做的是启动一个 AWS EMR 集群并将 parquet 文件加载到 HDFS 并针对它运行我的查询。我已经弄清楚如何使用 hive 创建表并将其指向一个 s3 路径。但这将我的数据限制在一天。因为日期的每一天在

之类的路径下都有多个文件

s3://mybucket/table/date/(parquet files 1 ... n).

所以问题之一是如何将多天的数据加载到配置单元中。即

s3://mybucket/table_a/day_1/(parquet files 1 ... n). s3://mybucket/table_a/day_2/(parquet files 1 ... n). s3://mybucket/table_a/day_3/(parquet files 1 ... n). ... s3://mybucket/table_b/day_1/(parquet files 1 ... n). s3://mybucket/table_b/day_2/(parquet files 1 ... n). s3://mybucket/table_b/day_3/(parquet files 1 ... n).

我知道 hive 可以支持分区,但我的 s3 文件不是这样设置的。

我还研究了prestodb,它看起来是此类数据分析最喜欢的工具。它支持 ansi SQL 的事实使其成为具有 SQL 知识但对 hadoop 或 spark 知之甚少的人的绝佳工具。我确实在我的集群上安装了它,它工作得很好。但看起来你不能真正将数据加载到你的表中,你必须依靠 Hive 来完成这部分。这是使用 prestodb 的正确方法吗?我看了netflix presentation 关于他们使用 prestodb 和使用 s3 代替 HDFS 的内容。如果这很好用,但我想知道如何将数据移入内存。什么时候拼花文件将从 s3 移动到集群。我需要有可以将整个数据加载到内存中的集群吗?这一般是怎么设置的?

【问题讨论】:

  • AWS Athena 我猜是在提出这个问题后发布的?

标签: amazon-s3 apache-spark hive parquet presto


【解决方案1】:

与其尝试加载多个文件,不如使用 API 将您想要的日期连接到一个对象中,然后您可以通过您已经提到的方式加载该对象。

AWS 有一篇博文重点介绍了如何完全通过 API 来执行此操作(无需下载 + 重新上传数据): https://ruby.awsblog.com/post/Tx2JE2CXGQGQ6A4/Efficient-Amazon-S3-Object-Concatenation-Using-the-AWS-SDK-for-Ruby

【讨论】:

    【解决方案2】:

    您可以在 S3 中安装 Hive 并使用您的数据创建 Hive 表,请参阅此处的博文:https://blog.mustardgrain.com/2010/09/30/using-hive-with-existing-files-on-s3/

    然后在 AWS 上安装 Presto,配置 Presto 连接你之前安装的 hive 目录。然后您可以使用 SQL 使用 Presto 在 S3 上查询您的数据。

    【讨论】:

    • 这里的关键理解(对我来说)是 Presto 还不支持CREATE EXTERNAL TABLE。所以你必须使用 Hive 创建它,然后你可以使用 Presto 查询它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-29
    • 2018-10-08
    • 2021-03-07
    • 2018-06-21
    • 2018-01-31
    • 1970-01-01
    • 2018-08-10
    相关资源
    最近更新 更多