标签: aws-glue-data-catalog

AWS Glue 自动创建就业机会

我有 pyspark 脚本,可以在 AWS GLUE 中运行。但每次我从 UI 创建作业并将代码复制到作业时,我是否可以自动从 s3 存储桶中的文件创建作业。(我拥有运行时将使用的所有库和粘合上下文)

amazon-ec2 amazon-web-services pyspark aws-glue aws-glue-data-catalog

3
推荐指数
1
解决办法
7742
查看次数

AWS Glue - 如何查询 Glue 目录中的位置?

任何人都知道如何(Athena w Glue)返回我知道其表名的表的完整 s3:// 地址。就像是:

SELECT location FOR TABLE xyz;
Run Code Online (Sandbox Code Playgroud)

看起来很简单,但我找不到

aws-glue aws-glue-data-catalog

3
推荐指数
1
解决办法
2738
查看次数

使用手动创建的表运行时,AwS 粘合作业读取 0 个文件

我想运行粘合作业来对从 s3 到 Postgres DB 的许多 csv 文件执行 ETL 过程。每天都有新文件写入 s3 源存储桶。当我为这些文件运行爬网程序以生成具有架构的表时,我得到的不仅仅是胶水数据目录中的一张表,这意味着爬网程序无法将这些文件的架构识别为相同的。可能是因为有很多文件只有标题而没有内容。

因此,当我使用向导创建粘合作业时,当被询问要使用哪个表时,我仅从粘合数据目录(基于最大的 csv 文件创建)中选择一个表。因此,在数据库中,我仅拥有来自最大文件的数据,而不是来自所有 csv 文件的数据。我想这是因为爬虫在glue数据目录中创建这些表时,还保存了与该表相对应的文件列表,我在s3上找到了这些文件:/aws-glue-temporary-000xxxxx-us-east-2 /admin/partitionlisting/script_name/xxxxx/ 对于每个粘合作业,都有datasource0.input-files.json文件,其内容如下{"path":"s3://bucket1/customer/dt=2020-02-03/","files":["s3://bucket1/customer/dt=2020-02-03/file1.csv"]}]

当我检查当我尝试在胶水数据目录中手动创建架构表并将其分配给胶水作业脚本时,希望处理 s3 路径中的所有文件,它不会读取任何文件,并且在日志中我看到

- Skipping Partition {}
 as no new files detected @ s3://bucket1/customer/ / or path does not exist
Run Code Online (Sandbox Code Playgroud)

当我检查相应的 datasource0.input-files.json 时,它没有任何文件:[{"path":"s3://bucket1/customer/","files":[]}]

我究竟做错了什么?如何使用手动创建的模式表使粘合作业脚本读取所选 s3 路径中的所有文件?或者是否可以仅使用包含所有文件的许多自动创建的模式表之一(而不仅仅是基于一个模式)?

aws-glue aws-glue-data-catalog

3
推荐指数
1
解决办法
1726
查看次数

无法在 Athena 中加载区分大小写的分区

我在 S3 中有数据,该数据按YYYY/MM/DD/HH/结构分区(不是year=YYYY/month=MM/day=DD/hour=HH

我为此设置了一个 Glue 爬虫,它在 Athena 中创建了一张表,但是当我在 Athena 中查询数据时,它会给出一个错误,因为一个字段具有重复的名称( 和 ,URLSerDeurl将其转换为小写,导致名称冲突)。

为了解决这个问题,我手动创建另一个表(使用上面的表定义 SHOW CREATE TABLE),添加'case.insensitive'= FALSE到 SERDEPROPERTIES

WITH SERDEPROPERTIES ('paths'='deviceType,emailId,inactiveDuration,pageData,platform,timeStamp,totalTime,userId','case.insensitive'= FALSE) 
Run Code Online (Sandbox Code Playgroud)

我将 s3 目录结构更改为与 hive 兼容的命名year=/month=/day=/hour=,然后使用 创建表'case.insensitive'= FALSE,然后运行MSCK REPAIR TABLE新表的命令,该命令会加载所有分区。 (完成创建表查询)

但查询时,我只能找到 1 个数据列 ( platform) 和分区列,其余所有列均未解析。但我实际上已经复制了 Glue 生成的 CREATE TABLE 查询以及条件case_insensitive=false

查询结果

我怎样才能解决这个问题?

hive amazon-s3 amazon-athena aws-glue-data-catalog

3
推荐指数
1
解决办法
4825
查看次数

使用spark从glue目录中读取而不是使用动态框架(glue上下文)

由于我们的方案是不变的,因此我们使用spark.read(),这比当数据存储在 s3 中时从选项创建动态框架要快得多

所以现在想使用动态框架从glue目录中读取数据需要花费很多时间所以想使用spark read api Dataframe.read.format("").option("url","").option("dtable", schema.表名).load()

在格式和网址选项中输入什么以及需要其他什么?

amazon-web-services apache-spark aws-glue aws-glue-data-catalog aws-glue-spark

3
推荐指数
1
解决办法
7876
查看次数

如何在 AWS 胶中检查 Spark 和 Hadoop 的版本?

我将 AWS 与(基本支持计划)一起使用。我想知道 AWS 粘合作业中使用了哪个版本的 Spark 和 Hadoop (HDFS)。这样我就可以在本地机器上设置相同的环境进行开发。

或者,如果我了解 Spark 的版本,则对应 AWS 粘合作业使用的 Hadoop 版本,反之亦然。

因为我正在使用基本支持计划。所以,我不能向支持中心提出案例。知道在哪里可以检查 AWS 胶水作业... Spark 和 Hadoop 版本吗?

任何形式的帮助和建议表示赞赏。谢谢!

hadoop amazon-web-services apache-spark aws-glue aws-glue-data-catalog

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

如何访问分区 Athena 表的子目录中的数据

我有一个 Athena 表,每天都有一个分区,其中实际文件按小时位于“子目录”中,如下所示:

s3://my-bucket/data/2019/06/27/00/00001.json
s3://my-bucket/data/2019/06/27/00/00002.json
s3://my-bucket/data/2019/06/27/01/00001.json
s3://my-bucket/data/2019/06/27/01/00002.json
Run Code Online (Sandbox Code Playgroud)

Athena 能够毫无问题地查询此表并找到我的数据,但在使用 AWS Glue 时,它​​似乎无法找到此数据。

ALTER TABLE mytable ADD 
PARTITION (year=2019, month=06, day=27) LOCATION 's3://my-bucket/data/2019/06/27/01';

select day, count(*)
from mytable
group by day;

day .   count
27 .    145431
Run Code Online (Sandbox Code Playgroud)

我已经尝试将分区的位置更改为以斜杠 ( s3://my-bucket/data/2019/06/27/01/)结尾,但这没有帮助。

以下是 Glue 中的分区属性。我希望 storedAsSubDirectories 设置会告诉它迭代子目录,但情况似乎并非如此:

{
    "StorageDescriptor": {
        "cols": {
            "FieldSchema": [
                {
                    "name": "userid",
                    "type": "string",
                    "comment": ""
                },
                {
                    "name": "labels",
                    "type": "array<string>",
                    "comment": ""
                }
            ]
        },
        "location": "s3://my-bucket/data/2019/06/27/01/",
        "inputFormat": "org.apache.hadoop.mapred.TextInputFormat",
        "outputFormat": "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat",
        "compressed": "false",
        "numBuckets": "0", …
Run Code Online (Sandbox Code Playgroud)

aws-glue aws-glue-data-catalog

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

无法创建胶水连接

我在 AWS Glue 中设置了到 RDS 数据库的 JDBC 连接。当我从 AWS 控制台测试连接时,出现错误:找不到子网 ID xxxx 的 S3 端点或 NAT 网关。为什么 AWS Glue 连接到 RDS 需要 S3 VPC 端点?

RDS实例有一个对所有IP地址完全开放的安全组。

amazon-web-services aws-glue aws-glue-data-catalog

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

如何在 Glue 作业中访问 AWS Glue 工作流程的运行属性?

我一直在使用 AWS Glue 工作流程来编排批处理作业。我们需要传递下推谓词以限制批处理作业的处理。当我们单独运行 Glue 作业时,我们可以在运行时将下推谓词作为命令行参数传递(即 awsgluestart-job-run --job-name foo.scala --arguments --arg1-text ${arg1} ..)。但是当我们使用glue工作流程来执行Glue作业时,就有点不清楚了。

当我们使用 AWS Glue 工作流程编排 Batch 作业时,我们可以在创建工作流程时添加运行属性。

  1. 我可以使用运行属性来传递我的 Glue Job 的下推谓词吗?
  2. 如果是,那么如何在运行时定义运行属性(下推谓词)的值。我想在运行时定义下推谓词的值的原因是因为谓词每天都会任意变化。(即过去 10 天、过去 20 天、过去 2 天等运行glue-workflow)

我试过:

awsgluestart-workflow-run --name 工作流程名称 | jq -r '.RunId'

awsglue put-workflow-run-properties --name 工作流名称 --run-id "ID" --run-properties --pushdownpredicate="some value"

我可以使用 put-workflow-run-property 查看已传递的运行属性

awsglue put-workflow-run-properties --name 工作流程名称 --run-id "ID"

但我无法在我的胶水作业中检测到“pushdownpredicate”。知道如何在胶水作业中访问工作流的运行属性吗?

在此输入图像描述

amazon-web-services aws-cli aws-glue aws-glue-data-catalog

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

粘合作业因连接超时错误而失败

我有一个 Glue ETL 作业,它从目录中读取数据并写入 s3。完成此操作后,需要触发爬虫来更新 Athena 中的数据。

因此,我使用glue_client.start_crawler(Name='crawler_name')方法来启动爬虫。但是每当我尝试从 ETL Glue 作业启动爬虫时,它都会失败并出现以下错误

ConnectTimeoutError: Connect timeout on endpoint URL: "https://glue.eu-central-1.amazonaws.com/"
Run Code Online (Sandbox Code Playgroud)

amazon-web-services aws-glue aws-glue-data-catalog

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