AWS胶水爬虫不创建表

时间:2017-11-01 17:02:39

标签: amazon-web-services aws-glue

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

爬虫需要大约20秒才能运行,日志显示它已成功完成。 CloudWatch日志显示:

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

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

7 个答案:

答案 0 :(得分:12)

检查与抓取工具关联的IAM角色。很可能你没有正确的许可。

创建爬网程序时,如果选择创建IAM角色(默认设置),则它将为您指定的S3对象创建策略。如果以后编辑爬网程序并仅更改S3路径。与爬网程序关联的角色将无权访问新的S3路径。

答案 1 :(得分:0)

如果目标数据库中有现有表,则爬网程序可能会将新文件与现有表关联,而不是创建新表。

当数据或文件夹结构中存在相似性时,Glue可能会将其解释为分区。

有时我还需要刷新数据库的表格列表以显示新的数据库。

答案 2 :(得分:0)

您可以尝试排除s3存储桶中的某些文件,这些被排除的文件应出现在日志中。我发现它有助于调试搜寻器发生的情况。

答案 3 :(得分:0)

这是我的示例角色JSON,它允许胶水访问s3并创建表。

{
"Version": "2012-10-17",
"Statement": [
    {
        "Sid": "VisualEditor0",
        "Effect": "Allow",
        "Action": [
            "ec2:DeleteTags",
            "ec2:CreateTags"
        ],
        "Resource": [
            "arn:aws:ec2:*:*:instance/*",
            "arn:aws:ec2:*:*:security-group/*",
            "arn:aws:ec2:*:*:network-interface/*"
        ],
        "Condition": {
            "ForAllValues:StringEquals": {
                "aws:TagKeys": "aws-glue-service-resource"
            }
        }
    },
    {
        "Sid": "VisualEditor1",
        "Effect": "Allow",
        "Action": [
            "iam:GetRole",
            "cloudwatch:PutMetricData",
            "ec2:DeleteNetworkInterface",
            "s3:ListBucket",
            "s3:GetBucketAcl",
            "logs:PutLogEvents",
            "ec2:DescribeVpcAttribute",
            "glue:*",
            "ec2:DescribeSecurityGroups",
            "ec2:CreateNetworkInterface",
            "s3:GetObject",
            "s3:PutObject",
            "logs:CreateLogStream",
            "s3:ListAllMyBuckets",
            "ec2:DescribeNetworkInterfaces",
            "logs:AssociateKmsKey",
            "ec2:DescribeVpcEndpoints",
            "iam:ListRolePolicies",
            "s3:DeleteObject",
            "ec2:DescribeSubnets",
            "iam:GetRolePolicy",
            "s3:GetBucketLocation",
            "ec2:DescribeRouteTables"
        ],
        "Resource": "*"
    },
    {
        "Sid": "VisualEditor2",
        "Effect": "Allow",
        "Action": "s3:CreateBucket",
        "Resource": "arn:aws:s3:::aws-glue-*"
    },
    {
        "Sid": "VisualEditor3",
        "Effect": "Allow",
        "Action": "logs:CreateLogGroup",
        "Resource": "*"
    }
]

}

答案 4 :(得分:0)

我遇到了同样的问题,解决方法是指定表的架构。

Connection details

答案 5 :(得分:0)

我遇到了同样的问题,正如其他人所建议的那样,我试图修改现有的IAM角色,以将新的S3存储桶作为资源包括在内,但是由于某些原因它没有用。然后,我从头开始创建了一个全新的角色……这次起作用了。另外,我对AWS的一个大问题是“为什么由于错误的附加IAM策略导致此访问被拒绝错误未显示在Cloud Watch日志中?”这使得调试变得困难。

答案 6 :(得分:0)

我遇到了 Ray 提到的类似 IAM 问题。但就我而言,我没有在bucket名称后添加星号(*),这意味着爬虫没有进入子文件夹,也没有创建表。

错误:

{
   "Statement": [
    {
        "Action": [
            "s3:GetObject",
            "s3:PutObject"
        ],
        "Effect": "Allow",
        "Resource": [
            "arn:aws:s3:::bucket-name"
        ]
    }
   ],
   "Version": "2012-10-17"
}

正确:

{
   "Statement": [
    {
        "Action": [
            "s3:GetObject",
            "s3:PutObject"
        ],
        "Effect": "Allow",
        "Resource": [
            "arn:aws:s3:::bucket-name*"
        ]
    }
   ],
   "Version": "2012-10-17"
}