使用hive或prestodb加载或指向多个镶木地板路径进行数据分析

时间:2016-04-14 18:24:43

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

我有几个在AWS S3中生成镶木地板文件的火花作业。每隔一段时间我就需要在这个数据的给定日期范围上运行一些临时查询。我不想在火花中这样做,因为我希望我们的QA团队能够做到这一点并不知道。我想做的是启动AWS EMR集群并将镶木地板文件加载到HDFS并对其运行我的查询。我已经弄清楚如何使用配置单元创建表并将其指向一个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移动到群集。我是否需要具有可以将整个数据加载到内存中的集群?这通常是如何设置的?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

您可以使用API​​将您想要的日期连接到单个对象,而不是尝试加载多个文件,然后可以通过您已经提到的方式加载。

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