博客
关于我
elasticsearch配置文件里的一些坑 [Failed to load settings from [elasticsearch.yml]]
阅读量:785 次
发布时间:2023-01-24

本文共 1767 字,大约阅读时间需要 5 分钟。

Elasticsearch配置文件格式问题排查

在使用Elasticsearch时,最近遇到了一个特别棘手的错误,这个错误源于配置文件格式的问题。经过一番调试,终于找到了问题的根源,并成功解决了问题。本文将详细记录整个排查过程。

关于错误信息

运行Elasticsearch时,程序抛出了以下错误信息:

Exception in thread "main" SettingsException[Failed to load settings from [elasticsearch.yml]];nested: ElasticsearchParseException[malformed, expected settings to start with 'object', instead was [VALUE_STRING]]

此外,还有以下错误:

Exception in thread "main" SettingsException[Failed to load settings from [elasticsearch.yml]];nested: ScannerException[while scanning a simple key in 'reader', line 11, column 2:discovery.zen.ping.unicast.hosts ...^]

这两个错误提示都指向了配置文件elasticsearch.yml存在问题。初次看的时候,可能会误认为是版本兼容性或者代码问题,但经过进一步分析,问题的根源在于配置文件的格式问题。

排查过程

  • 查看错误信息细节

    第一个错误提示提到,解析错误发生在读取配置文件的过程中,期望看到一个以object开头的设置对象,但实际读到的是一个字符串值。这意味着,配置文件中可能存在不符合YAML格式的内容。

  • 检查配置文件内容

    查看了详细的YAML解析器日志,发现具体的解析问题出现在文件的第3行第1列。这个位置持续读取到一种不期望的数据类型——BlockMappingStart,而不是期望的<document start>

  • 对比官方示例

    在官方文档和社区文章中,发现很多用户遇到过类似的问题。经查,主要是由于参数的格式问题。很多参数缺少冒号前后的空格,或者在某些特定场景下参数之间的格式不符合YAML规范。

  • 深入分析

    深入查看配置文件,发现以下几点问题:

    • 其中一行写着:node.rack : r1(冒号前后有空格,但实际上可能没有按照严格的空格数)。
    • 另有一行写着:discovery.zen.ping.unicast.hosts ...(设置中某些参数没有加空格,或者格式不规范)。
  • 测试修改

    根据错误提示,尝试在配置文件中添加必要的空格,并检查每一行的参数格式是否符合YAML标准。例如,将参数改写为:

    • discovery.zen.minimum_master_nodes: 3(增加冒号前后的空格)。
    • node.rack: r1(确保冒号前后至少有一个空格)。
  • 重新加载配置

    在修改完后,重新启动Elasticsearch服务,观察是否解决了问题。

  • 错误修复

    经过修改和重新启动后,发现问题确实得到了解决。错误信息不再出现,Elasticsearch能够正常运行。回顾整个排查过程,可以总结出以下几个关键点:

  • 参数格式问题:配置文件中部分参数缺少冒号后面的空格,或者没有按照规定的格式排列。
  • YAML解析器的strictness:Elasticsearch对配置文件的严格解析要求较高,任何格式偏差都可能导致解析失败。
  • 排查的方法:通过查看错误日志、对比官方示例、深入分析问题点,最终找到了问题所在。
  • 结论

    此次问题的关键在于配置文件的格式不规范,尤其是参数的空格使用导致解析器无法正确读取配置。解决方法是细致检查每一行参数,确保YAML格式正确。这样不仅解决了当前问题,还提升了对Elasticsearch配置的理解,为后续工作打下好的基础。

    通过这次经历可以看出,技术人员在排查问题时,不仅需要扎实的技术知识,更需要细心和耐心。每一个细节都可能隐藏着问题根源,只要:value有心寻找,就能找到突破口。希望这次的经验对其他遇到类似问题的同学有所帮助!

    转载地址:http://oeeyk.baihongyu.com/

    你可能感兴趣的文章
    解决:angularjs radio默认选中失效问题
    查看>>
    Hadoop学习笔记—Yarn
    查看>>
    Jenkins - 部署在Tomcat容器里的Jenkins,提示“反向代理设置有误”
    查看>>
    wxWidgets源码分析(3) - 消息映射表
    查看>>
    wxWidgets源码分析(9) - wxString
    查看>>
    [源码解析] 消息队列 Kombu 之 基本架构
    查看>>
    [源码分析] 消息队列 Kombu 之 启动过程
    查看>>
    wx.NET CLI wrapper for wxWidgets
    查看>>
    Silverlight for linux 和 DLR(Dynamic Language Runtime)
    查看>>
    Powershell中禁止执行脚本解决办法
    查看>>
    OO_Unit2 多线程电梯总结
    查看>>
    04_Mysql配置文件(重要参数)
    查看>>
    python 加密算法及其相关模块的学习(hashlib,RSA,random,string,math)
    查看>>
    JavaSE总结
    查看>>
    Python IO编程
    查看>>
    使用 TortoiseGit 时,报 Access denied 错误
    查看>>
    基于 HTML5 WebGL 的污水处理厂泵站自控系统
    查看>>
    c++之程序流程控制
    查看>>
    李笑来必读书籍整理
    查看>>
    Hadoop(十六)之使用Combiner优化MapReduce
    查看>>