Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 为什么AWS突然停止接受我对ElasticSearch的写入(puts)?_Amazon Web Services_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Clojure_Elastisch - Fatal编程技术网 elasticsearch,clojure,elastisch,Amazon Web Services,elasticsearch,Clojure,Elastisch" /> elasticsearch,clojure,elastisch,Amazon Web Services,elasticsearch,Clojure,Elastisch" />

Amazon web services 为什么AWS突然停止接受我对ElasticSearch的写入(puts)?

Amazon web services 为什么AWS突然停止接受我对ElasticSearch的写入(puts)?,amazon-web-services,elasticsearch,clojure,elastisch,Amazon Web Services,elasticsearch,Clojure,Elastisch,我们需要将MySQL数据库中的200万条记录反规范化为ElasticSearch。我们的devops家伙在AWS上设置了ElasticSearch。我编写了一个Clojure应用程序,它从MySQL中获取数据,将数据聚合成我们想要的格式,然后执行put to ElasticSearch。我在我们的EC2实例上设置了这个,devops的家伙正确地设置了AWS角色,然后我开始运行应用程序。10分钟后,我这样做了: curl --verbose -d '{"query": { "match_all"

我们需要将MySQL数据库中的200万条记录反规范化为ElasticSearch。我们的devops家伙在AWS上设置了ElasticSearch。我编写了一个Clojure应用程序,它从MySQL中获取数据,将数据聚合成我们想要的格式,然后执行put to ElasticSearch。我在我们的EC2实例上设置了这个,devops的家伙正确地设置了AWS角色,然后我开始运行应用程序。10分钟后,我这样做了:

curl --verbose  -d '{"query": { "match_all": {} }}' -H 'Content-Type: application/json' -X GET "https://search-samedayes01-ntt7r7b7sfhy3wu.us-east-1.es.amazonaws.com/facts-over-time/_search"
(System/setProperty "https.protocols" "TLSv1.1")
我看到:

{"took":1,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":14952,"max_score":1.0,"hits": [...
太棒了!它起作用了!我看了一些文件,它们看起来不错

又过了15分钟,我运行了与上面相同的查询。遗憾的是,我得到了同样的结果:

{"took":1,"timed_out":false,"_shards":    {"total":5,"successful":5,"failed":0},"hits":    {"total":14952,"max_score":1.0,"hits": [...
我想,什么?为什么它会接受14952条记录,然后停止

我的Clojure函数设置为在出现任何问题时抛出错误

(defn push-item-to-persistence
  [item db]
  (let [
        denormalized-id (get-in item [:denormalized-id] :no-id)
        item (assoc item :updated-at (temporal/current-time-as-datetime))
        item (assoc item :permanent-holding-id-for-item-instances (java.util.UUID/randomUUID))
        item (assoc item :instance-id-for-this-one-item (java.util.UUID/randomUUID))
        item (assoc item :item-type :deduplication)
        ]
    (if (= denormalized-id :no-id)
      (slingshot/throw+ {
                         :type ::no-denormalized-id-in-push-item-into-database
                         :item item
                         })
      (slingshot/try+
       (esd/put db "facts-over-time" "deduplicaton" (str denormalized-id) item)
       (println "We just put a document in ES.")
       (catch Object o
         (slingshot/throw+ {
                            :type ::push-item-to-persistence
                            :error o
                            :item item
                            :db db
                            }
                           ))))))
如果我查看日志,没有错误,并且我一直看到这一行打印出来:

We just put a document in ES.    
现在已经一个多小时了,我们似乎仍然停留在14952份文件上

可能出了什么问题?为什么我看不到一个错误

使用Elastisch作为库将Clojure连接到AWS ES

更新 好吧,现在至少我看到了这些例外。我不清楚他们在哪里被捕。在我的代码中的任何地方,我都会重新引用异常,因为我希望应用程序在第一个异常时死亡。这些是在某处被发现的,可能在我正在使用的Elastish库中?或者我不小心在某个地方抓到了日志

但这是一个有点微不足道的问题。更重要的是:

下一个问题是为什么会出现这些异常。我应该在哪里调整AWS ElasticSearch,以便它以合理的速度接受我们的写入

Oct 04, 2017 6:53:44 PM org.apache.http.impl.client.DefaultHttpClient tryConnect
INFO: I/O exception (java.net.SocketException) caught when connecting to {s}->https://search-samedayes01-ntsdht7sfhy3wu.us-east-1.es.amazonaws.com:443: Broken pipe (Write failed)

Oct 04, 2017 7:09:06 PM org.apache.http.impl.client.DefaultHttpClient tryConnect
INFO: Retrying connect to {s}->https://search-samedayes01-ntsdht7sfhy3wu.us-east-1.es.amazonaws.com:443

Oct 04, 2017 6:54:13 PM org.apache.http.impl.client.DefaultHttpClient tryConnect
INFO: I/O exception (java.net.SocketException) caught when connecting to {s}->https://search-samedayes01-ntsdht7sfhy3wu.us-east-1.es.amazonaws.com:443: Broken pipe (Write failed)

Oct 04, 2017 7:09:09 PM org.apache.http.impl.client.DefaultHttpClient tryConnect
INFO: Retrying connect to {s}->https://search-samedayes01-ntsdht7sfhy3wu.us-east-1.es.amazonaws.com:443
更新2 我重新开始。大约920份文件已成功放入ElasticSearch。然后我得到:

:hostname "UnknownHost"
:type java.io.EOFException
:message "SSL peer shut down incorrectly"
什么

而且,书写速度似乎非常慢。也许每秒10次手术。AWS中一定有我可以调整的东西,可以让我们的ElasticSearch节点接受更多的写入?我希望每秒至少写1000封信

更新3 所以现在我已经到了这个应用程序最有效的时候了,但它的工作方式是我能想象到的最奇怪的

我收到一条“管道破裂”的信息,这让我想到:

根据这一建议,我这样做了:

curl --verbose  -d '{"query": { "match_all": {} }}' -H 'Content-Type: application/json' -X GET "https://search-samedayes01-ntt7r7b7sfhy3wu.us-east-1.es.amazonaws.com/facts-over-time/_search"
(System/setProperty "https.protocols" "TLSv1.1")
这似乎没有效果

但现在我的应用程序做到了这一点:

  • 移动速度极快,每秒可能有1次写入ElasticSearch
  • 抛出“断管”异常
  • 像火箭一样起飞,每分钟向ElasticSearch发送大约15000个请求 我很高兴它终于起作用了,但我不知道它为什么起作用,这让我很不舒服


    此外,每分钟15000个请求实际上并没有那么快。当移动200万个文档时,这需要2个多小时,这太糟糕了。但是,Amazon只支持ElasticSearch的REST接口。据我所知,本机协议的速度要快8倍左右。这听起来正是我们需要的

    您可以打印put操作的响应,而不是打印“我们只是将文档放入ES”。通常,如果elasticsearch停止索引,那是因为集群空间不足,或者您编写文档的速度快于集群所能处理的速度。当然,这是个好主意。我将打印出put的返回值。关于您提到的两种故障模式,它们不会触发异常吗?“put”是一个阻塞操作,有2分钟的超时,超时结束时有一个异常。如果ElasticSearch出于任何原因都不排除写入(我指的是puts),我希望看到异常。如果没有异常,我将如何发现问题?我认为他们会触发异常。打印响应将向我们显示异常处理是否正常工作。我重新启动,输出“put”的结果。至少到目前为止,我没有看到任何错误,只是成功:{:{u索引事实随时间变化,:{u类型重复数据消除,:{u id company-164253,:{u版本1,:结果创建,:{u碎片{:总计2,:成功1,:失败0},:创建为真}我用附加信息更新了帖子。而不是打印“我们只是将文档放入ES。”,你能打印出你的行动的回应吗。通常,如果elasticsearch停止索引,那是因为集群空间不足,或者您编写文档的速度快于集群所能处理的速度。当然,这是个好主意。我将打印出put的返回值。关于您提到的两种故障模式,它们不会触发异常吗?“put”是一个阻塞操作,有2分钟的超时,超时结束时有一个异常。如果ElasticSearch出于任何原因都不排除写入(我指的是puts),我希望看到异常。如果没有异常,我将如何发现问题?我认为他们会触发异常。打印响应将向我们显示异常处理是否正常工作。我重新启动,输出“put”的结果。至少到目前为止,我没有看到任何错误,只是成功:{:{u索引事实随时间变化,:{u类型重复数据消除,:{u id公司-164253,:{u版本1,:结果已创建,:{u碎片{:总计2,:成功1,:失败0},:创建为真}我用其他信息更新了帖子。