Java 将大量数据从S3复制到ElasticSearch
我可以访问包含网站流量数据的S3存储桶。所有这些数据都存储在JSON文件中,每行一个对象。这些文件平均包含大约20000个不同的JSON对象。bucket每小时存储100-200个30-40MB的文件,这取决于站点的流量,因此每小时大约有200-400万条记录 我需要将这些数据复制到ElasticSearch中,以在Kibana中创建数据可视化。我目前正在使用来自Elastic和jq的BulkAPI为批量请求格式化JSON(添加索引以便ElasticSearch正确索引它),这非常慢。从S3下载一个20000条记录文件需要将近两分钟,使用jq重新格式化,然后使用我的Java代码、AWS Java SDK和Elastic Bulk API推送到ElasticSearchJava 将大量数据从S3复制到ElasticSearch,java,json,
elasticsearch,amazon-s3,kibana,Java,Json,
elasticsearch,Amazon S3,Kibana,我可以访问包含网站流量数据的S3存储桶。所有这些数据都存储在JSON文件中,每行一个对象。这些文件平均包含大约20000个不同的JSON对象。bucket每小时存储100-200个30-40MB的文件,这取决于站点的流量,因此每小时大约有200-400万条记录 我需要将这些数据复制到ElasticSearch中,以在Kibana中创建数据可视化。我目前正在使用来自Elastic和jq的BulkAPI为批量请求格式化JSON(添加索引以便ElasticSearch正确索引它),这非常慢。从S3下载
我已经考虑过使用AWS Lambda,但我无法将Lambda函数从我的帐户连接到另一个帐户的S3存储桶。关于如何将如此多的数据上传到ElasticSearch,还有其他想法吗?似乎您的S3存储桶和Elastic搜索群集不属于同一VPC或不同的专用网络。 要允许连接到这两个服务,您需要进行一些AWS联网。如果您的帐户位于不同的VPC中,请启用该选项,或者设置一个允许流量在两个网络之间传递的网络。
最后一种可能性是启用。您的ES群集是否也有可能托管在Amazon上?是的。它与S3 bucket在一个单独的公司/管道帐户上。您是否尝试过直接在AWS服务器上运行Java代码?你已经为下载数据腾出了很多时间。我正在下载数据,因为它需要解密和解压。我没有对bucket的写访问权限,只有read/get,所以在将解密文件推送到ES之前,我仍然必须将其存储在某个地方。是的,但最好在AWS云中的某个主机上执行所有这些操作。这样,您将受益于他们移动数据的大管道。您可以启动一个实例几分钟,运行Java代码,然后将其杀死。请注意,我只是在这里随意拍摄,但在我看来,管道大小是您的主要问题,即必须在本地主机上下载GB的数据,以便在转换后重新上传,这听起来像是什么在破坏性能。