标签: aws-glue

AWS Lambda 是否优于 AWS Glue Job?

在AWS Glue作业中,我们可以编写一些脚本并通过作业执行脚本。

在 AWS Lambda 中,我们也可以编写相同的脚本并执行上述作业中提供的相同逻辑。

因此,我的疑问不是 AWS Glue Job 与 AWS Lambda 之间有什么区别,而是我试图了解 AWS Glue 作业何时应优先于 AWS Lambda,特别是当两者执行相同的作业时?如果两者执行相同的工作,那么理想情况下我会盲目地更喜欢使用 AWS Lambda 本身,对吧?

请尝试理解我的查询..

amazon-web-services aws-lambda aws-glue

34
推荐指数
2
解决办法
3万
查看次数

如何创建AWS Glue表,其中分区具有不同的列?( 'HIVE_PARTITION_SCHEMA_MISMATCH')

根据此AWS论坛主题,是否有人知道如何使用AWS Glue创建AWS Athena表,其分区包含不同的模式(在这种情况下,表模式中的列的不同子集)?

目前,当我对此数据运行爬虫并在Athena中进行查询时,我收到错误 'HIVE_PARTITION_SCHEMA_MISMATCH'

我的用例是:

  • 分区代表天
  • 文件代表事件
  • 每个事件都是单个s3文件中的json blob
  • 事件包含列的子集(取决于事件的类型)
  • 整个表的"模式"是所有事件类型的完整列(这由Glue crawler正确组合)
  • 每个分区的"模式"是当天发生的事件类型的列的子集(因此在Glue中,每个分区可能具有与表模式不同的列子集)
  • 这种不一致导致我认为雅典娜的错误

如果我要手动编写模式,我可以做到这一点,因为只有一个表模式,JSON文件中缺少的键将被视为Null.

提前致谢!

amazon-s3 amazon-web-services amazon-athena aws-glue

28
推荐指数
2
解决办法
6155
查看次数

AWS Glue to Redshift:是否可以替换,更新或删除数据?

以下是关于我如何设置的一些要点:

  • 我有上传到S3的CSV文件和一个Glue爬虫设置来创建表和模式.
  • 我有一个Glue作业设置,它使用JDBC连接将数据从Glue表写入我们的Amazon Redshift数据库.Job还负责映射列并创建redshift表.

通过重新运行作业,我在redshift中获得重复的行(正如预期的那样).但是,有没有办法在插入新数据之前替换或删除行,使用密钥或胶水中的分区设置?

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

from awsglue.dynamicframe import DynamicFrame
from awsglue.transforms import SelectFields

from pyspark.sql.functions import lit

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

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

columnMapping = [
    ("id", "int", "id", "int"),
    ("name", "string", "name", "string"),
]

datasource1 = glueContext.create_dynamic_frame.from_catalog(database = "db01", table_name = …
Run Code Online (Sandbox Code Playgroud)

jdbc amazon-web-services pyspark aws-glue

22
推荐指数
4
解决办法
1万
查看次数

在 AWS Glue 3.0 中写入时间戳早于 1900 年的 parquet 时出现问题

当从 Glue 2.0 切换到 3.0 时,这意味着也从 Spark 2.4 切换到 3.1.1,我的作业在处理 1900 年之前的时间戳时开始失败,并出现以下错误:

An error occurred while calling z:org.apache.spark.api.python.PythonRDD.runJob.
You may get a different result due to the upgrading of Spark 3.0: reading dates before 1582-10-15 or timestamps before 1900-01-01T00:00:00Z from Parquet INT96 files can be ambiguous, 
as the files may be written by Spark 2.x or legacy versions of Hive, which uses a legacy hybrid calendar that is different from Spark 3.0+s Proleptic Gregorian calendar.
See more details in SPARK-31404. …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services apache-spark pyspark aws-glue

21
推荐指数
3
解决办法
4万
查看次数

AWS胶水爬虫不创建表

我有一个我在AWS Glue中创建的爬虫,它在成功完成后不会在数据目录中创建表.

爬网程序运行大约需要20秒,日志显示已成功完成.CloudWatch日志显示:

  • 基准测试:为Crawler运行开始爬网
  • 基准:分类完成,将结果写入DB
  • 基准:写完目录
  • 基准测试:Crawler已完成运行并处于就绪状态

我不知道为什么没有创建数据目录中的表.AWS Docs对调试没有多大帮助.

amazon-web-services aws-glue

17
推荐指数
2
解决办法
5530
查看次数

我可以在本地测试AWS Glue代码吗?

在阅读了亚马逊文档之后,我的理解是运行/测试Glue脚本的唯一方法是将其部署到开发端点并在必要时远程调试.同时,如果(Python)代码由多个文件和包组成,则除了主脚本之外的所有代码都需要压缩.所有这些让我觉得Glue不适合任何复杂的ETL任务,因为开发和测试很麻烦.我可以在本地测试我的Spark代码,而无需每次都将代码上传到S3,并在CI服务器上验证测试,而无需支付开发Glue端点.

python amazon-web-services aws-glue

17
推荐指数
5
解决办法
6512
查看次数

如何使用额外文件进行 AWS 粘合作业

我有一个用 python 编写的 ETL 作业,它由具有以下目录结构的多个脚本组成;

\n\n
my_etl_job\n |\n |--services\n |  |\n |  |-- __init__.py\n |  |-- dynamoDB_service.py\n |\n |-- __init__.py\n |-- main.py\n |-- logger.py\n
Run Code Online (Sandbox Code Playgroud)\n\n

main.py是从上述目录导入其他脚本的入口点脚本。上面的代码上传到由 dev 端点创建的 ETL 集群后,在 dev-endpoint 上运行得非常好。既然现在我想在生产中运行它,我想为它创建一个合适的粘合作业。my_etl_job但是当我以format压缩整个目录时.zip,将其上传到 artifacts s3 存储桶中,并将 .zip 文件位置指定到脚本位置,如下所示

\n\n
s3://<bucket_name>/etl_jobs/my_etl_job.zip\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是我在胶水作业 UI 仪表板上看到的代码;

\n\n
PK\n    \xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdP__init__.pyUX\xef\xbf\xbd\'\xef\xbf\xbd^"\xef\xbf\xbd^A\xef\xbf\xbd\xef\xbf\xbd)PK#7\xef\xbf\xbdP  logger.pyUX\xef\xbf\xbd\xef\xbf\xbd^1\xef\xbf\xbd\xef\xbf\xbd^A\xef\xbf\xbd\xef\xbf\xbd)]\xef\xbf\xbdMk\xef\xbf\xbd0\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbda\xef\xbf\xbd&v+\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdA\xef\xbf\xbdB\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd`x\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdq\xef\xbf\xbd\xef\xbf\xbd} ...AND ALLOT MORE...\n
Run Code Online (Sandbox Code Playgroud)\n\n

似乎胶水作业不接受 .zip 格式?如果是,那么我应该使用什么压缩格式?

\n\n

更新: \n我检查了粘合作业可以选择接受额外的文件,Referenced files path其中我提供了上述文件的所有路径的逗号分隔列表,并将 script_location 更改为仅引用main.py文件路径。但这也没有奏效。粘合作业抛出错误 no module found logger (我在 logger.py 文件中定义了这个模块)

\n

python amazon-s3 aws-glue

17
推荐指数
2
解决办法
3万
查看次数

带有双引号和逗号的 AWS Glue 问题

我有这个 CSV 文件:

reference,address
V7T452F4H9,"12410 W 62TH ST, AA D"
Run Code Online (Sandbox Code Playgroud)

表定义中使用了以下选项

ROW FORMAT SERDE 
  'org.apache.hadoop.hive.serde2.OpenCSVSerde' 
WITH SERDEPROPERTIES ( 
  'quoteChar'='\"', 
  'separatorChar'=',') 
Run Code Online (Sandbox Code Playgroud)

但它仍然无法识别数据中的双引号,并且双引号字段中的逗号弄乱了数据。当我运行 Athena 查询时,结果如下所示

reference     address
V7T452F4H9    "12410 W 62TH ST
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

hadoop hive presto amazon-athena aws-glue

16
推荐指数
2
解决办法
1万
查看次数

AWS Glue 与 EMR 无服务器

最近,AWS 发布了 Amazon EMR Serverless(预览版)https://aws.amazon.com/blogs/big-data/announcing-amazon-emr-serverless-preview-run-big-data-applications-without-managing-servers/ - 非常有前途的新服务。

根据我的理解 - AWS Glue 是 Apache Spark 之上的托管服务(用于转换层)。AWS EMR 也主要用于 Apache Spark。因此,EMR Serverless(适用于 Apache Spark)看起来与 AWS Glue 非常相似。

现在我脑子里有一个问题 - 与 AWS Glue 的核心区别是什么以及何时选择 EMR Serverless 而不是 Glue?

潜在的 EMR Serverless,甚至可能成为 AWS Glue 转换层生态系统的一部分?也许 AWS 将用 EMR Serverless 取代 AWS Glue 中的转换层,这样就有意义了。AWS Glue 将扮演 ETL Overlay、Metastore 的角色,并以 EMR Serverless 作为处理层。

amazon-web-services amazon-emr aws-glue emr-serverless

16
推荐指数
1
解决办法
7531
查看次数

表格的异常通过AWS Glue Crawler识别并存储在数据目录中

我正在努力建立公司的新数据湖,并试图找到最好的和最近的选择在这里工作.因此,我找到了一个非常好的解决方案来使用EMR + S3 + Athena + Glue.

我做的过程是:

1 - 运行Apache Spark脚本,在Orc存储的S3中按日期分区生成3000万行.

2 - 运行Athena查询以创建外部表.

3 - 检查与胶水数据目录相关的EMR表,它运行良好.Spark和Hive都可以​​访问.

4 - 在按日期分区的其他文件夹中生成另外3000万行.在Orc格式

5 - 运行识别新表的Glue Crawler.添加到数据目录,Athena能够进行查询.但Spark和Hive无法做到这一点.请参阅以下例外:

火花 Caused by: java.lang.ClassCastException: org.apache.hadoop.io.Text cannot be cast to org.apache.hadoop.hive.ql.io.orc.OrcStruct

蜂巢 Error: java.io.IOException: org.apache.hadoop.hive.ql.metadata.HiveException: Error evaluating audit_id (state=,code=0)

我正在检查是否有任何序列化问题,我发现了这个:

手动创建的表(配置):

输入格式 org.apache.hadoop.hive.ql.io.orc.OrcInputFormat

输出格式为 org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat

Serde序列化lib org.apache.hadoop.hive.ql.io.orc.OrcSerde

orc.compress SNAPPY

使用Glue Crawler创建的表:

输入格式 org.apache.hadoop.mapred.TextInputFormat

输出格式 org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat

Serde序列化lib org.apache.hadoop.hive.ql.io.orc.OrcSerde

因此,这不适用于从Hive或Spark读取.它适用于雅典娜.我已经更改了配置,但对Hive或Spark没有任何影响.

有人遇到过这个问题?

amazon-s3 amazon-web-services amazon-emr apache-spark aws-glue

15
推荐指数
1
解决办法
1319
查看次数