【发布时间】: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