用于 Elasticsearch 的 JDBC 馈送器
Posted
技术标签:
【中文标题】用于 Elasticsearch 的 JDBC 馈送器【英文标题】:JDBC feeder for Elasticsearch 【发布时间】:2014-11-18 05:54:23 【问题描述】:我正在尝试创建一个 JBDC 馈送器以将数据从 SQL Server 加载到 elasticsearch。我在这里使用指南:https://github.com/jprante/elasticsearch-river-jdbc(搜索标题“如何运行独立的 JDBC 馈送器”)。
我已经成功下载并安装了 elasticsearch 并启动并运行。我已经下载了 SQL server 的 JDBC 驱动程序并将其移到 ./plugins/jdbc 文件夹中。
我负责创建 bash 脚本的部分。在今天之前,我什至从未看过 bash 脚本,而且我无法让它工作,因为我还不知道一半的语法。
elasticsearch目录为c:\elasticsearch-1.4.0
这是我的 bash 脚本:
#!/bin/sh
DIR="$( cd "$( dirname "$BASH_SOURCE[0]" )" && pwd )"
# ES_HOME required to detect elasticsearch jars
export ES_HOME= C:\elasticsearch-1.4.0
echo '
"elasticsearch" :
"cluster" : "elasticsearch",
"host" : "localhost",
"port" : 9200
,
"type" : "jdbc",
"jdbc" :
"url" : "jdbc:sqlserver://localhost;databaseName=MyDatabase",
"user" : "MyUser",
"password" : "MyPassword",
"sql" : "select * From MyTable",
"treat_binary_as_string" : true,
"index" : "MyFirstESIndex"
' | java \
-cp "$DIR/*" \
org.xbib.elasticsearch.plugin.jdbc.feeder.Runner \
org.xbib.elasticsearch.plugin.jdbc.feeder.JDBCFeeder
我需要在这个脚本中更新什么?是不是在这行脚本中:
DIR="$( cd "$( dirname "$BASH_SOURCE[0]" )" && pwd )"
我这样做的原因是因为我正在寻找将潜在的数千万条记录从 sql server 一次性插入到 elasticsearch 中的最佳方法,即批量插入。
我们的第一次迭代涉及获取表中的每一行数据,将其转换为 JSON 文档,然后插入到 ES 中。这花了大约 10 小时来获取所有数据。
提前感谢您的任何建议。
【问题讨论】:
你曾经能够让它工作吗? 【参考方案1】:而不是这个:
DIR="$( cd "$( dirname "$BASH_SOURCE[0]" )" && pwd )"
如果进入该工作目录对您很重要,请执行此操作:
DIR="$( dirname "$BASH_SOURCE[0]" )"
cd $DIR
另外,如果不是拼写错误,请删除ES_HOME=
后面的空格,如有疑问,请使用引号:
export ES_HOME="C:\elasticsearch-1.4.0"
此外,使用 Java -cp
参数,如果您想包含所有 jar 文件(我假设),请不要使用引号,以便通配符起作用:
# Since you are already in the directory, you don't need DIR
JARS=$(echo ./*jar)
...
# On the cp line, substitute spaces with : to build the classpath
-cp "$JARS// /:" \
我希望这会有所帮助。如果您可以提供有关脚本如何失败的更多详细信息,我可以提供更多帮助。您是否收到特定的错误消息?
【讨论】:
以上是关于用于 Elasticsearch 的 JDBC 馈送器的主要内容,如果未能解决你的问题,请参考以下文章
elasticsearch 1.1.1 JDBC River 插件
如何实现elasticsearch与elasticsearch的数据同步