【问题标题】:Copying large amounts of data from S3 to ElasticSearch将大量数据从 S3 复制到 ElasticSearch
【发布时间】:2016-10-15 22:43:59
【问题描述】:

我可以访问包含来自网站的流量数据的 S3 存储桶。所有这些数据都存储在 JSON 文件中,每行一个对象。这些文件平均包含大约 20,000 个不同的 JSON 对象。存储桶每小时存储 100-200 个这些 30-40 MB 文件,具体取决于网站的流量,因此每小时大约有 2-4 百万条记录。

我需要将此数据复制到 ElasticSearch 中,以便在 Kibana 中创建数据可视化。我目前正在使用来自 Elastic 和 jq 的 Bulk API 来格式化 Bulk 请求的 JSON(添加索引以便 ElasticSearch 正确索引它)这非常慢。从 S3 下载一个包含 20,000 条记录的文件,用 jq 重新格式化,然后使用我的 Java 代码、AWS Java SDK 和 Elastic Bulk API 推送到 ElasticSearch 需要将近两分钟。

我已经考虑过使用 AWS Lambda,但我无法将我账户中的 Lambda 函数连接到另一个账户的 S3 存储桶。关于如何将这么多数据上传到 ElasticSearch 还有其他想法吗?

【问题讨论】:

  • 您的 ES 集群是否也托管在 Amazon 上?
  • 是的。它位于与 S3 存储桶不同的公司/管道帐户上。
  • 您是否尝试过直接在 AWS 服务器上运行 Java 代码?仅仅为了下载数据,您就已经腾出了很多时间。
  • 好吧,我正在下载数据,因为它必须被解密和解压缩。我没有对存储桶的写入权限,只能读取/获取,所以我仍然需要在将解密文件推送到 ES 之前将它们存储在某个地方。
  • 是的,但最好在 AWS 云中的某个主机上执行所有这些操作。这样,您将受益于他们用于移动数据的大管道。您可以启动一个实例几分钟,运行您的 Java 代码,然后终止它。请注意,我在这里只是在野外拍摄,但在我看来,管道大小是您的主要问题,即必须在您的本地主机上下载 GB 的数据才能在转换后重新上传它听起来像什么杀死性能。

标签: java json elasticsearch amazon-s3 kibana


【解决方案1】:

您的 S3 存储桶和弹性搜索集群似乎不是同一个 VPC 的一部分或不同的专用网络。 要允许连接到这两种服务,您需要进行一些 AWS 联网。如果您的账户位于不同的 VPC 中,请启用 VPC peering 或设置 NAT gateway 以允许流量在两个网络之间传递。 最后一种可能是启用cross account permission to lambda

【讨论】:

    猜你喜欢
    • 2019-07-10
    • 1970-01-01
    • 1970-01-01
    • 2018-09-12
    • 1970-01-01
    • 2015-02-09
    • 1970-01-01
    • 2016-09-28
    • 2017-08-26
    相关资源
    最近更新 更多