Logstash error Java::JavaLang::NoClassDefFoundError unable to resolve(Logstash错误Java::JavaLang::NoClassDefFoundError无法解析)
问题描述
我是使用ElasticSearch(ES)和logstash的新手。我已经使用这个link成功设置了ElasticSearch和kibana。在此之后,我尝试使用logstash将一个表从SQL server上传到ES。我的logstash配置文件如下所示:
input {
jdbc {
clean_run => true
jdbc_driver_library => "/home/myusr/Downloads/sqljdbc_6.0/enu/jre8/sqljdbc42.jar"
jdbc_connection_string => "jdbc:sqlserver://xyz;databaseName=test;user=name;password=pass@123;"
jdbc_driver_class => "com.microsoft.sqlserver.jdbc.SQLServerDriver"
jdbc_validate_connection => true
jdbc_user => "name"
jdbc_password => "pass@123"
statement => "SELECT top 10 * FROM mytable"
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "my_table"
}
}
在运行此文件时,我得到:
[ERROR] 2021-07-16 18:13:55.567 [[main]<jdbc] jdbc - Unable to connect to database. Tried 1 times {:message=>"Java::JavaLang::NoClassDefFoundError: javax/xml/bind/DatatypeConverter", :exception=>Sequel::DatabaseConnectionError, :cause=>java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter, :backtrace=>["com.microsoft.sqlserver.jdbc.SQLServerConnection.sendLogon(com/microsoft/sqlserver/jdbc/SQLServerConnection.java:4098)"
我按照建议here在删除java11版本后尝试重新安装java8。但它没有起作用。我没有使用任何Gradle或IDE来执行--add-modules
来解决该问题。我正在跟进link,但到目前为止还没有解决方案。我用这个遇到了障碍。我也检查过这个link。我在这里没有执行的唯一步骤是";使用映射";创建Elasticsearch索引。这就是问题的原因吗?如何解决此问题?
感谢任何帮助。
推荐答案
我找到了问题的解决方案。
如果您看到上面的链接,它们会将sqljdbc42.jar
显示为JDBC SQL Server驱动程序,其路径必须保存在jdbc_driver_library
中。这是Microsoft website上可用的驱动程序,名称为tar.gz。但是,当我在这个link(zip文件中的驱动程序)中将驱动程序更改为‘mssql-jdbc-9.2.1.jre11.jar’时,它起作用了。我还更改了Logstash文件中的jdbc_driver_library
,如此link所示。
更新后的Logstash conf文件如下所示:
input {
jdbc {
clean_run => true
jdbc_driver_library => ""
jdbc_connection_string => "jdbc:sqlserver://xyz;databaseName=test;user=name;password=pass@123;"
jdbc_driver_class => "com.microsoft.sqlserver.jdbc.SQLServerDriver"
jdbc_validate_connection => true
jdbc_user => "name"
jdbc_password => "pass@123"
statement => "SELECT top 10 * FROM mytable"
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "my_table"
}
}
请注意,jdbc_driver_library
被分配给空字符串。之所以可以这样做,是因为我们已经设置了JDBC驱动程序文件的路径,以便可以通过Logstash找到它。除了设置给定的路径here外,我还将JAR文件复制到这个位置:/usr/share/logstash/logstash-core/lib/jars/
以便Logstash轻松找到驱动程序。
使用以上功能,我成功连接将数据从SQL Server迁移到Elastic Search。
这篇关于Logstash错误Java::JavaLang::NoClassDefFoundError无法解析的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Logstash错误Java::JavaLang::NoClassDefFoundError无法解析
基础教程推荐
- 如何使用 Eclipse 检查调试符号状态? 2022-01-01
- 如何对 HashSet 进行排序? 2022-01-01
- Spring Boot Freemarker从2.2.0升级失败 2022-01-01
- 由于对所需库 rt.jar 的限制,对类的访问限制? 2022-01-01
- 如何使用 Stream 在集合中拆分奇数和偶数以及两者的总和 2022-01-01
- 如何在不安装整个 WTP 包的情况下将 Tomcat 8 添加到 Eclipse Kepler 2022-01-01
- 在螺旋中写一个字符串 2022-01-01
- Java 中保存最后 N 个元素的大小受限队列 2022-01-01
- 如何强制对超级方法进行多态调用? 2022-01-01
- 首次使用 Hadoop,MapReduce Job 不运行 Reduce Phase 2022-01-01