2015-11-04 160 views
5

當試圖啓動我的羣集的主節點,只是從1.5升級到2.0(是的,這是一個大的跳躍),我得到這個錯誤日誌後:Elasticsearch - 映射衝突錯誤升級,從1.5到2.0

[2015-11-03 18:15:10,948][ERROR][gateway     ] [mon-01] failed to read local state, exiting... 
java.lang.IllegalStateException: unable to upgrade the mappings for the index [logstash-2015.10.18], reason: [Mapper for [timestamp] conflicts with existing mapping in other types: 
[mapper [timestamp] cannot be changed from type [date] to [string]]] 

不幸的是,我沒有在現場或在現場的相關分析儀配置的詳細描述,但正如它的名字的狀態,這是從logstash時間戳,所以它應該看起來像下列操作之一:

  • 「dd/MMM/yyyy:HH:mm:ss Z」
  • 「YYYY-MM-DD HH:MM:SS」
  • 「HH:MM:SS」
  • 「YYYY-MM-DD HH:MM:SS,SSS ZZ」
  • 「YYYY-MM-DD HH:MM:SS,SSSZZ」
  • 「YYYY-MM-DD HH:MM:SS,SSS」

日誌與此結束:

[2015-11-03 18:15:11,383][ERROR][bootstrap    ] Guice Exception: java.lang.IllegalStateException: unable to upgrade the mappings for the index [logstash-2015.10.18], reason: [Mapper for [timestamp] conflicts with existing mapping in other types: 
[mapper [timestamp] cannot be changed from type [date] to [string]]] 
Likely root cause: java.lang.IllegalArgumentException: Mapper for [timestamp] conflicts with existing mapping in other types: 
[mapper [timestamp] cannot be changed from type [date] to [string]] 
    at org.elasticsearch.index.mapper.FieldTypeLookup.checkCompatibility(FieldTypeLookup.java:117) 
    at org.elasticsearch.index.mapper.MapperService.checkNewMappersCompatibility(MapperService.java:345) 
    at org.elasticsearch.index.mapper.MapperService.merge(MapperService.java:296) 
    at org.elasticsearch.index.mapper.MapperService.merge(MapperService.java:242) 
    at org.elasticsearch.cluster.metadata.MetaDataIndexUpgradeService.checkMappingsCompatibility(MetaDataIndexUpgradeService.java:329) 
    at org.elasticsearch.cluster.metadata.MetaDataIndexUpgradeService.upgradeIndexMetaData(MetaDataIndexUpgradeService.java:112) 
    at org.elasticsearch.gateway.GatewayMetaState.pre20Upgrade(GatewayMetaState.java:226) 
    at org.elasticsearch.gateway.GatewayMetaState.<init>(GatewayMetaState.java:85) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526) 
    at <<<guice>>> 
    at org.elasticsearch.node.Node.<init>(Node.java:198) 
    at org.elasticsearch.node.NodeBuilder.build(NodeBuilder.java:145) 
    at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:170) 
    at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:270) 
    at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:35) 

和節點關閉。 。

我已經仔細閱讀了#13169#13345的問題,但這些都沒有幫助我,節點仍然無法啓動。

我知道changing the mappings在ES啓動時很容易,但我有點困在這裏。

有什麼想法?

回答

5

從Elasticsearch開發,它看起來像我的數據有問題,而不是在ES本身:https://github.com/elastic/elasticsearch/issues/14491

您logstash - 2015年10月18日指數已經被映射 作爲字符串上一個時間戳字段一種類型,另一種類型是 ,這是elasticsearch無法應對的。在elasticsearch 1.x 這個問題將是沉默的,並且只有在嘗試對字段進行搜索/排序/聚合時纔會跳閘。在Elasticsearch 2.0中,我們更主動地檢測到 這些不一致。

明確的答案就在這裏:https://www.elastic.co/blog/great-mapping-refactoring

您將無法與衝突的現場升級指數 映射Elasticsearch V2.0。

如果不再需要這些指數的數據,那麼你可以簡單地 刪除索引,否則你將需要與 正確映射重新索引數據。

這個工具可以幫助提取數據並重新導入:https://github.com/taskrabbit/elasticsearch-dump

+0

這是一個必須具備的工具:https://github.com/elastic/elasticsearch-migration – chilladx