用于 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的数据同步

elasticsearch-jdbc 怎么用

Elasticsearch:使用 JDBC client 连接到 Elasticsearch

基于双馈风机的调频电源改造方案

elasticsearch-jdbc实现MySQL同步到ElasticSearch深入详解