【问题标题】:Query S3 in parallel with SQL and partitioning与 SQL 和分区并行查询 S3
【发布时间】:2019-04-04 01:11:18
【问题描述】:

是否可以通过分区对 S3 文件进行最简单的并发 SQL 查询?

这个问题看起来你必须从 3 个选项中选择 2 个。

您可以使用 S3 Select 对 S3 进行并发 SQL 查询。但是 S3 Select 不支持分区,它也可以一次处理单个文件。

Athena 支持分区和 SQL 查询,但它有 20 个并发查询的限制。限额可以提高,但没有保证和上限。

您可以通过 EMRFS 配置在 S3 上工作的 HBase,但这需要很多配置。而且我认为数据应该通过 HBase(另一种格式)写入。 也许更简单的解决方案?

【问题讨论】:

  • 如果您有节制地查询,Athena 是一个不错的选择(并发限制不是问题)。对于持续(例如生产)工作负载,独立 Presto (aws.amazon.com/marketplace/pp/B07DKV5659) 或 EMR 上的 Presto 是很好的选择。

标签: amazon-web-services amazon-s3 amazon-athena presto amazon-s3-select


【解决方案1】:

您还可以使用 AWS Glue 或 AWS EMR 等托管服务。

您可以在 Glue 中运行的示例代码:

import sys 
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job

## @params: [JOB_NAME]
args = getResolvedOptions(sys.argv, ['JOB_NAME'])

sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)
job.init(args['JOB_NAME'], args)

def load_dict(_database,_table_name):
    ds = glueContext.create_dynamic_frame.from_catalog(database = _database, table_name = _table_name, transformation_ctx = "ds_table")
    df = ds.toDF()
    df.createOrReplaceTempView(_table_name)   
    return df

df_tab1=load_dict("exampledb","tab1")
df_sql=spark.sql( "select m.col1, m.col2 from tab1 m")
df_sql.write.mode('overwrite').options(header=True, delimiter = '|').format('csv').save("s3://com.example.data/tab2")

job.commit()

您也可以考虑使用 Amazon Redshift Spectrum。

https://aws.amazon.com/blogs/big-data/amazon-redshift-spectrum-extends-data-warehousing-out-to-exabytes-no-loading-required/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    • 2016-09-27
    • 2023-03-27
    • 1970-01-01
    • 2023-03-05
    相关资源
    最近更新 更多