【问题标题】:AWS Glue - how to crawl a Kinesis Firehose output folder from S3AWS Glue - 如何从 S3 抓取 Kinesis Firehose 输出文件夹
【发布时间】:2018-09-24 22:00:53
【问题描述】:

我认为 AWS Glue 应该是一个相对简单的用例,但我在弄清楚如何实施它时遇到了很多麻烦。

我有一个 Kinesis Firehose 作业将流数据转储到 S3 存储桶中。这些文件由一系列离散的 Web 浏览事件组成,表示为具有不同结构的 JSON 文档(例如,一个文档可能具有字段“日期”但没有字段“名称”,而另一个文档可能具有“名称”但没有“日期” )。

我希望每小时对这些文件运行 ETL 作业,其细节与手头的事情无关。

我正在尝试运行 S3 数据目录爬网程序,但我遇到的问题是 Kinesis 输出格式本身不是有效的 JSON,这让我感到莫名其妙。相反,它是一堆由换行符分隔的 JSON 文档。爬虫可以自动识别解析JSON文件,但是无法解析。

我曾想过编写一个 lambda 函数来“修复”Firehose 文件,该文件由它在存储桶上的创建触发,但对于两个应该整齐地组合在一起的部分来说,这听起来像是一种廉价的解决方法。

另一种选择是完全绕过数据目录并在 Glue 脚本本身中进行必要的转换,但我不知道如何开始。

我错过了什么吗?有没有更简单的方法来解析 Firehouse 输出文件,或者如果失败了,可以绕过爬虫的需要?

提前干杯和感谢

【问题讨论】:

    标签: amazon-s3 aws-glue amazon-kinesis-firehose


    【解决方案1】:

    听起来您在描述 Kinesis Firehose 的行为,即根据一些缓冲(时间和大小)设置连接多个传入记录,然后将记录作为单个对象写入 S3。 Firehose Data Delivery

    如果工作负载将包含大量记录,则将多条记录批处理到单个文件中很重要,因为从 S3 处理许多小文件的性能(和 S3 成本)可能不是最佳的。

    AWS Glue Crawlers 和 ETL 作业确实支持处理“JSON 行”(newline delimited JSON) 格式。

    如果爬虫无法运行,请提供日志或错误详细信息(如果可能,还包括爬虫运行持续时间,以及创建和更新的表数。

    我看到一个爬虫在一个实例中失败,其中被爬取的文件的差异迫使它进入一个每个文件的表格模式,并且它达到了表格数量的限制。 AWS Glue Limits

    【讨论】:

      【解决方案2】:

      我设法解决了这个问题;基本上问题在于并非每个 JSON 文档都具有相同的底层结构。

      我编写了一个 lambda 脚本作为 Kinesis 进程的一部分,它通过在必要时添加 NULL 字段来强制每个文档进入相同的结构。然后,爬虫能够正确解析生成的文件并将它们映射到单个表。

      【讨论】:

      • 您能否发布示例 lamda 函数逻辑,您编写的内容强制每个文档进入相同的结构?
      【解决方案3】:

      你能从firehose创建的json文件中粘贴几行吗?我在 Kinesis Streams 生成的 json 文件上运行了爬虫,它能够成功解析它。

      您在创建 Firehose 作业时是否也尝试过“转换记录格式”?您可以在那里指定 JSONSerDe 或 Glue 目录来解析您的数据。

      【讨论】:

        【解决方案4】:

        为我解决这个问题的方法是在发送到 firehose 的每个有效负载的末尾添加一个换行字段“/n”。

        msg_pkg = (str(json_response) + '\n').encode('utf-8')
        record = {'Data': msg_pkg}
        put_firehose('agg2-na-firehose', record
        

        因为显然 Hive JSON SerDe 是用于处理 json 数据的默认设置。完成此操作后,我能够抓取 json 数据并在 Athena 中读取它。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-06-15
          • 2018-01-07
          • 2018-10-24
          • 2020-09-14
          • 2020-02-08
          • 2021-08-07
          • 2021-04-22
          • 1970-01-01
          相关资源
          最近更新 更多