我是elasticsearch(ES) 和logstash 的新手。我已经使用它成功设置了elasticsearch和kibanalink https://www.youtube.com/watch?v=hVgrXi_9L6Y。之后我尝试使用logstash将一张表从sql server上传到ES。我的logstash conf文件如下:
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)"
我按照建议删除了 java 11 版本后尝试重新安装 java 8here https://discuss.elastic.co/t/unable-to-connect-to-database-tried-1-times-error-message-java-javax-xml-bind-datatypeconverter/200901/3。但这没有用。我没有使用任何 gradle 或 IDE 来做--add-modules
解决这个问题。我正在跟进这个link https://dbtut.com/index.php/2019/06/02/how-to-transfer-data-from-mssql-to-elasticsearch-using-logstash/但目前还没有解决办法。我在这方面遇到了障碍。我也检查过这个link https://dbtut.com/index.php/2019/06/02/how-to-transfer-data-from-mssql-to-elasticsearch-using-logstash/。我在这里没有执行的唯一步骤是“使用映射创建 Elasticsearch 索引”。这是问题的原因吗?我该如何解决这个问题?
任何帮助表示赞赏。
我找到了问题的解决方案。
如果您看到上面的链接,它们会显示sqljdbc42.jar
作为 JDBC SQL Server 驱动程序,其路径必须保存在jdbc_driver_library
。这是可用的驱动程序微软网站 https://learn.microsoft.com/en-us/sql/connect/jdbc/download-microsoft-jdbc-driver-for-sql-server?view=sql-server-ver15如 tar.gz。但是,当我将驱动程序更改为“mssql-jdbc-9.2.1.jre11.jar”时link https://learn.microsoft.com/en-us/sql/connect/jdbc/download-microsoft-jdbc-driver-for-sql-server?view=sql-server-ver15(zip 文件中的驱动程序),它工作了。我也改变了jdbc_driver_library
在 Logstash 文件中,如下所示link https://stackoverflow.com/a/59206373/5658251.
更新后的 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 https://stackoverflow.com/a/38751417/5658251,我还将我的 jar 文件复制到此位置:/usr/share/logstash/logstash-core/lib/jars/
让 Logstash 轻松找到驱动程序。
使用上述内容,我能够成功连接并将数据从 SQL Server 迁移到 Elastic Search。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)