Athena 在 S3 上查询数据的替代方案

2024-01-16

我身边有300 GBs的数据S3。假设数据如下:

## S3://Bucket/Country/Month/Day/1.csv 

S3://Countries/Germany/06/01/1.csv 
S3://Countries/Germany/06/01/2.csv 
S3://Countries/Germany/06/01/3.csv 

S3://Countries/Germany/06/02/1.csv 
S3://Countries/Germany/06/02/2.csv 

我们正在做一些复杂聚合就数据而言,由于有的国家数据大,有的国家数据小,AWS EMR用起来没有意义,小国家一旦完了,资源就被浪费了,大国还要长期运转。因此,我们决定使用AWS Batch(Docker 容器) with Athena。一项工作处理每个国家一天的数据。

现在大致有1000 个职位一起开始,当他们查询雅典娜读取数据时,容器失败,因为它们到达了Athena 查询限制.

因此,我想知道还有哪些其他可能的方法来解决这个问题?我应该使用红移星团,加载所有数据并将所有容器查询到 Redshift 集群,因为它们没有查询限制。但价格昂贵,而且需要很长时间才能完成。

另一种选择是读取数据EMR并使用Hive 或 Presto在它之上查询数据,但同样会达到查询限制。

如果有人能够提供更好的选择来解决这个问题,那就太好了。


据我了解,您只需将查询发送到 AWS Athena 服务,在所有聚合步骤完成后,您只需检索结果csv文件来自 Athena 保存结果的 S3 存储桶,因此您最终会得到 1000 个文件(每个作业一个)。但问题是并发 Athena 查询的数量,而不是总执行时间。

您是否考虑过使用阿帕奇气流 https://airflow.apache.org/用于编排和安排您的查询。我认为气流是 Lambda 和 Step Functions 组合的替代方案,但它是完全免费的。它很容易在本地和远程计算机上进行设置,具有用于任务监控的 CLI 和 GUI,抽象出所有调度和重试逻辑。气流甚至有hooks https://airflow.apache.org/_api/airflow/contrib/hooks/aws_hook/index.html与 AWS 服务交互。天啊,它甚至还有一个专职操作员 https://airflow.apache.org/_api/airflow/contrib/operators/aws_athena_operator/index.html用于向 Athena 发送查询,因此发送查询非常简单:

from airflow.models import DAG
from airflow.contrib.operators.aws_athena_operator import AWSAthenaOperator
from datetime import datetime

with DAG(dag_id='simple_athena_query',
         schedule_interval=None,
         start_date=datetime(2019, 5, 21)) as dag:

    run_query = AWSAthenaOperator(
        task_id='run_query',
        query='SELECT * FROM  UNNEST(SEQUENCE(0, 100))',
        output_location='s3://my-bucket/my-path/',
        database='my_database'
    )

我将它用于类似类型的每日/每周任务(使用 CTAS 语句处理数据),这些任务超出了并发查询数量的限制。

有大量博客文章和文档可以帮助您入门。例如:

  • 中柱 https://medium.com/slido-dev-blog/automate-executing-aws-athena-queries-and-moving-the-results-around-s3-with-airflow-dd3603dc611d:自动执行 AWS Athena 查询并使用 Airflow 在 S3 中移动结果。
  • Airflow 安装完整指南,link 1 https://medium.com/@srivathsankr7/apache-airflow-a-practical-guide-5164ff19d18b and link 2 http://site.clairvoyantsoft.com/installing-and-configuring-apache-airflow/

您甚至可以设置与 Slack 集成 https://medium.com/datareply/integrating-slack-alerts-in-airflow-c9dcd155105用于在查询以成功或失败状态终止时发送通知。

但是,那主要缺点 https://stackoverflow.com/questions/57145967/aws-athena-concurrency-limits-number-of-submitted-queries-vs-number-of-running我面临的是,只有 4-5 个查询同时实际执行,而其他所有查询都处于空闲状态。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Athena 在 S3 上查询数据的替代方案 的相关文章

  • 如何更改文本选择背景颜色

    我的意思是 当您选择一些 HTML 文本时 背景中会有一种颜色告诉您选择了哪个文本 怎么可能通过CSS来改变它呢 我需要它是白色的 透明的 我已经看到这样做了 您可以使用某些 CSS 选择器来更改所选文本的 CSS 属性 我对此进行了测试
  • Cocos2d-x:如何将使用XCode开发的Cocos2d-x项目移植到Android(通过Eclipse)?

    我使用 XCode 开发了一个 Cocos2d X 应用程序 当我在 iOS 设备上从 XCode 启动它时 它可以完美运行 现在 我想把它移植到Android上 我的理解是 我必须找到一种方法将我的 XCode 项目 导入 Eclipse
  • 如何在 Swift 中“生成”闭包类型别名?

    为了使我的代码更易于阅读 我在 Swift 中对各种类型的闭包使用类型别名 我有以下基本的闭包集 public typealias FailureClosure error NSError gt Void public typealias
  • Python3 和 xml/xslt 库

    在 python 2 6 中 我这样做是为了实现 xsl 转换 import libxml2 import libxslt styledoc libxml2 parseFile my xslt file style libxslt pars
  • JSONObject 文本必须以“{”开头错误

    我有来自我们的 REST 服务之一的 JSON category name Industry Components categoryId 1 category name Business Components categoryId 2 ca
  • 如何从R arrow中的feather文件中读取列名和元数据?

    现已取代 独立R 的羽毛库 https github com wesm feather有一个函数叫做feather metadata 允许从磁盘上的羽毛文件中读取列名称和类型 而无需打开它们 当在 R 中加载羽毛文件时 这对于仅选择特定列很
  • 使用 XmlWriterSettings 或 XmlWriter 设置引号字符

    我目前有一些直接实例化的代码XmlTextWriter对象 它允许我将引号字符设置为单引号 我需要它来生成 XML 以匹配旧系统 例如 var fred new XmlTextWriter stream encoding fred Quot
  • 在 PHP 中使用 Curl 将获取字段附加到 URL

    我可以使用 Curl 执行服务器端和客户端重定向 但无法通过 get 请求将 GET 字段附加到 URL 这是我的代码 post curl init curl setopt post CURLOPT URL url curl setopt
  • Python3.7 rasterio库打不开jp2

    我想从 Sentinel2 打开 jp2 图像 但是当我读取图像时 band rasterio open imagetest driver JP2OpenJPEG 我收到下一个错误 D DataStorage 00 sentinel dat
  • Vuetify 等高 v-tab-items

    请告知如何使 vuetify v tabs 内容显示在等高块中 我在文档中找不到该组件的选项可以帮助高度对齐 By default v tab item height depends on its own content height 布局
  • kubernetes:无法从其他机器访问 NodePort

    我正在尝试安装 kubernetes 检查kubernetes上执行的容器时出现问题 我将服务类型设置为 Nodeport 但无法从运行容器的节点以外的节点进行访问 想要从其他计算机访问它 请告诉我哪里不同 我尝试了externalIPs和
  • 如何使用logstash在两个索引上创建别名?

    在我正在处理的集群中有两个主要索引 比方说indexA and indexB但这两个索引每天都会被索引 所以通常我有indexA YYYY MM dd and indexB YYYY MM dd 我想要的是有一个别名可以收集indexA Y
  • 函数的变量存储在哪里?在堆栈或堆上?

    当程序调用函数时 为该函数中的变量分配哪种类型的数据结构内存 堆还是栈 为什么 在我看来 它应该存储在堆栈上 因为它们不一定是引用类型 但在我读到答案的地方 据说它们存储在堆上 并在函数返回值后释放 它比这更复杂一点 事实上使用堆栈和堆实际
  • 使用加密c#导出PKCS8中的CngKey

    如何将 CngKey 导出到 PKCS 8 并加密 static void Main string args CngKeyCreationParameters ckcParams new CngKeyCreationParameters E
  • 如何将 php curl 中的 cookie 获取到变量中

    因此 其他公司的一些人认为 如果不使用soap xml rpc rest 或任何其他合理的通信协议 而是将所有响应作为cookie 嵌入标头中 那就太棒了 我需要从这个卷曲响应中将这些 cookie 作为数组取出 如果我不得不为此浪费大量的
  • 在 iOS 中发送音频文件和 JSON 字符串

    我正在尝试将音频文件和 JSON 字符串发送到 PHP 服务器 使用以下代码将发送 JSON 但文件到达时为空 如果我将 JSON 块放在音频块下方 文件将完全到达 但 JSON 为空 有什么想法吗 void sendFile NSStri
  • 如何测试无状态组件

    我正在尝试测试下面的组件 但出现错误 它是一个带有一些数据的功能组件 下面的组件从父组件接收信息列表并渲染 它工作完美 但是在编写测 试用例时 它使用笑话和酶失败 import React from react export const I
  • Swift - 我可能已经删除了 Apple Swift Packages 集合

    我对 swift 和 XCode 很陌生 昨天我正在开发一个项目 想尝试一下某人制作的自定义日期选择器 所以我转到 添加包 并粘贴 GitHub 链接并添加它 我已经在我的项目中添加了一个名为 KeychainAccess 的不同包 方式
  • Signal R Native Android 应用程序协商失败

    我正在尝试创建一个可以连接到我的基本 SignalR Hub 的 Android 应用程序 它只是一个基本的集线器文件 我想用它来测试一些东西 但到目前为止我还没有运气 有人可以看看我做错的事情吗 每次我尝试运行它时 我都会收到以下堆栈竞赛
  • MVC @model 含义

    在MVC5中 什么是 model html and using意思是我们通常使用的原因和时间 后面跟着哪个词 例如 model MVC Project2 Models stufftable写在re cshtml页面的第一个 stufftab

随机推荐